From 32d1493301051961def34abcc16a9e0d7517279c Mon Sep 17 00:00:00 2001 From: Britt Park Date: Mon, 9 Apr 2007 16:06:01 +0000 Subject: [PATCH] Added DAOs. Attribute query objects seem to be able to generate hibernate predicates. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@5467 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../repo/attributes/AttrQueryHelperImpl.java | 72 +++++++++ .../repo/attributes/AttrQueryTest.java | 74 +++++++++ .../repo/attributes/GlobalAttributeEntry.java | 10 +- .../attributes/GlobalAttributeEntryImpl.java | 75 +++++++++ .../repo/attributes/MapAttributeImpl.java | 51 ++++-- .../alfresco/repo/attributes/MapEntry.java | 24 ++- .../repo/attributes/MapEntryImpl.java | 115 ++++++++++++++ .../hibernate/AttributeDAOHibernate.java | 66 ++++++++ .../attributes/hibernate/Attributes.hbm.xml | 2 +- .../GlobalAttributeEntryDAOHibernate.java | 74 +++++++++ .../hibernate/MapEntryDAOHibernate.java | 90 +++++++++++ .../java/org/alfresco/repo/avm/AVMDAOs.java | 25 +++ .../service/cmr/attributes/AttrAndQuery.java | 72 +++++++++ .../service/cmr/attributes/AttrNotQuery.java | 55 +++++++ .../service/cmr/attributes/AttrOrQuery.java | 72 +++++++++ .../service/cmr/attributes/AttrQuery.java | 148 +----------------- .../cmr/attributes/AttrQueryEquals.java | 13 +- .../service/cmr/attributes/AttrQueryGT.java | 14 +- .../service/cmr/attributes/AttrQueryGTE.java | 13 +- .../cmr/attributes/AttrQueryHelper.java | 56 +++++++ .../service/cmr/attributes/AttrQueryLT.java | 14 +- .../service/cmr/attributes/AttrQueryLTE.java | 10 +- .../service/cmr/attributes/AttrQueryLike.java | 18 +-- .../service/cmr/attributes/AttrQueryNE.java | 14 +- .../cmr/attributes/AttributeService.java | 13 +- 25 files changed, 975 insertions(+), 215 deletions(-) create mode 100644 source/java/org/alfresco/repo/attributes/AttrQueryHelperImpl.java create mode 100644 source/java/org/alfresco/repo/attributes/AttrQueryTest.java create mode 100644 source/java/org/alfresco/repo/attributes/GlobalAttributeEntryImpl.java create mode 100644 source/java/org/alfresco/repo/attributes/MapEntryImpl.java create mode 100644 source/java/org/alfresco/repo/attributes/hibernate/AttributeDAOHibernate.java create mode 100644 source/java/org/alfresco/repo/attributes/hibernate/GlobalAttributeEntryDAOHibernate.java create mode 100644 source/java/org/alfresco/repo/attributes/hibernate/MapEntryDAOHibernate.java create mode 100644 source/java/org/alfresco/service/cmr/attributes/AttrAndQuery.java create mode 100644 source/java/org/alfresco/service/cmr/attributes/AttrNotQuery.java create mode 100644 source/java/org/alfresco/service/cmr/attributes/AttrOrQuery.java create mode 100644 source/java/org/alfresco/service/cmr/attributes/AttrQueryHelper.java diff --git a/source/java/org/alfresco/repo/attributes/AttrQueryHelperImpl.java b/source/java/org/alfresco/repo/attributes/AttrQueryHelperImpl.java new file mode 100644 index 0000000000..aa18e2bba5 --- /dev/null +++ b/source/java/org/alfresco/repo/attributes/AttrQueryHelperImpl.java @@ -0,0 +1,72 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing + */ + +package org.alfresco.repo.attributes; + +import java.util.HashMap; +import java.util.Map; + +import org.alfresco.service.cmr.attributes.AttrQueryHelper; + +/** + * Implementation of query helper for building predicates. + * @author britt + */ +public class AttrQueryHelperImpl implements AttrQueryHelper +{ + private int fSuffix; + + private Map fParameters; + + public AttrQueryHelperImpl() + { + fSuffix = 0; + fParameters = new HashMap(); + } + + /* (non-Javadoc) + * @see org.alfresco.service.cmr.attributes.AttrQueryHelper#getNextSuffix() + */ + public int getNextSuffix() + { + return fSuffix++; + } + + /* (non-Javadoc) + * @see org.alfresco.service.cmr.attributes.AttrQueryHelper#getParameters() + */ + public Map getParameters() + { + return fParameters; + } + + /* (non-Javadoc) + * @see org.alfresco.service.cmr.attributes.AttrQueryHelper#setParameter(java.lang.String, java.lang.String) + */ + public void setParameter(String name, String value) + { + fParameters.put(name, value); + } +} diff --git a/source/java/org/alfresco/repo/attributes/AttrQueryTest.java b/source/java/org/alfresco/repo/attributes/AttrQueryTest.java new file mode 100644 index 0000000000..01290a9c76 --- /dev/null +++ b/source/java/org/alfresco/repo/attributes/AttrQueryTest.java @@ -0,0 +1,74 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing + */ + +package org.alfresco.repo.attributes; + +import org.alfresco.service.cmr.attributes.AttrAndQuery; +import org.alfresco.service.cmr.attributes.AttrNotQuery; +import org.alfresco.service.cmr.attributes.AttrOrQuery; +import org.alfresco.service.cmr.attributes.AttrQuery; +import org.alfresco.service.cmr.attributes.AttrQueryGT; +import org.alfresco.service.cmr.attributes.AttrQueryHelper; +import org.alfresco.service.cmr.attributes.AttrQueryLT; +import org.alfresco.service.cmr.attributes.AttrQueryLike; + +import junit.framework.TestCase; + +/** + * Tests of AttrQueries. + * @author britt + */ +public class AttrQueryTest extends TestCase +{ + private AttrQueryHelper fHelper; + + /* (non-Javadoc) + * @see junit.framework.TestCase#setUp() + */ + @Override + protected void setUp() throws Exception + { + fHelper = new AttrQueryHelperImpl(); + } + + /** + * Do all the testing in one. + */ + public void testAll() + { + AttrQuery query = + new AttrOrQuery( + new AttrAndQuery(new AttrQueryGT("cat"), new AttrQueryLT("hat")), + new AttrNotQuery(new AttrQueryLike("fur%"))); + String predicate = query.getPredicate(fHelper); + System.out.println(predicate); + System.out.println(fHelper.getParameters()); + assertEquals("((me.key > :name0 and me.key < :name1) or (not me.key like :name2))", + predicate); + assertEquals("cat", fHelper.getParameters().get(":name0")); + assertEquals("hat", fHelper.getParameters().get(":name1")); + assertEquals("fur%", fHelper.getParameters().get(":name2")); + } +} diff --git a/source/java/org/alfresco/repo/attributes/GlobalAttributeEntry.java b/source/java/org/alfresco/repo/attributes/GlobalAttributeEntry.java index 4571e56932..7cdaec8d73 100644 --- a/source/java/org/alfresco/repo/attributes/GlobalAttributeEntry.java +++ b/source/java/org/alfresco/repo/attributes/GlobalAttributeEntry.java @@ -31,5 +31,13 @@ package org.alfresco.repo.attributes; */ public interface GlobalAttributeEntry { - // TODO This is a stub and needs to be completed. + /** + * Get the name of the entry. + */ + public String getName(); + + /** + * Get the Attribute. + */ + public Attribute getAttribute(); } diff --git a/source/java/org/alfresco/repo/attributes/GlobalAttributeEntryImpl.java b/source/java/org/alfresco/repo/attributes/GlobalAttributeEntryImpl.java new file mode 100644 index 0000000000..816d4a31ce --- /dev/null +++ b/source/java/org/alfresco/repo/attributes/GlobalAttributeEntryImpl.java @@ -0,0 +1,75 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing + */ + +package org.alfresco.repo.attributes; + +/** + * @author britt + * + */ +public class GlobalAttributeEntryImpl implements GlobalAttributeEntry +{ + private String fName; + + private Attribute fAttribute; + + public GlobalAttributeEntryImpl(String name, Attribute attr) + { + fName = name; + fAttribute = attr; + } + + /* (non-Javadoc) + * @see org.alfresco.repo.attributes.GlobalAttributeEntry#getAttribute() + */ + public Attribute getAttribute() + { + return fAttribute; + } + + /** + * Setter. + */ + public void setAttribute(Attribute attr) + { + fAttribute = attr; + } + + /* (non-Javadoc) + * @see org.alfresco.repo.attributes.GlobalAttributeEntry#getName() + */ + public String getName() + { + return fName; + } + + /** + * Setter. + */ + public void setName(String name) + { + fName = name; + } +} diff --git a/source/java/org/alfresco/repo/attributes/MapAttributeImpl.java b/source/java/org/alfresco/repo/attributes/MapAttributeImpl.java index 0579fbf8be..ae0d9dea3c 100644 --- a/source/java/org/alfresco/repo/attributes/MapAttributeImpl.java +++ b/source/java/org/alfresco/repo/attributes/MapAttributeImpl.java @@ -25,10 +25,17 @@ package org.alfresco.repo.attributes; +import java.util.ArrayList; import java.util.Collection; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; import java.util.Set; import java.util.Map.Entry; +import org.alfresco.repo.avm.AVMDAOs; + /** * @author britt * @@ -53,8 +60,7 @@ public class MapAttributeImpl extends AttributeImpl implements MapAttribute @Override public void clear() { - // TODO Auto-generated method stub - super.clear(); + AVMDAOs.Instance().fMapEntryDAO.delete(this); } /* (non-Javadoc) @@ -63,8 +69,13 @@ public class MapAttributeImpl extends AttributeImpl implements MapAttribute @Override public Set> entrySet() { - // TODO Auto-generated method stub - return super.entrySet(); + List entries = AVMDAOs.Instance().fMapEntryDAO.get(this); + Map map = new HashMap(); + for (MapEntry entry : entries) + { + map.put(entry.getKey(), entry.getAttribute()); + } + return map.entrySet(); } /* (non-Javadoc) @@ -73,8 +84,7 @@ public class MapAttributeImpl extends AttributeImpl implements MapAttribute @Override public Attribute get(String key) { - // TODO Auto-generated method stub - return super.get(key); + return AVMDAOs.Instance().fMapEntryDAO.get(this, key).getAttribute(); } /* (non-Javadoc) @@ -83,8 +93,13 @@ public class MapAttributeImpl extends AttributeImpl implements MapAttribute @Override public Set keySet() { - // TODO Auto-generated method stub - return super.keySet(); + List entries = AVMDAOs.Instance().fMapEntryDAO.get(this); + Set keys = new HashSet(); + for (MapEntry entry : entries) + { + keys.add(entry.getKey()); + } + return keys; } /* (non-Javadoc) @@ -93,8 +108,8 @@ public class MapAttributeImpl extends AttributeImpl implements MapAttribute @Override public void put(String key, Attribute value) { - // TODO Auto-generated method stub - super.put(key, value); + MapEntry entry = new MapEntryImpl(this, key, value); + AVMDAOs.Instance().fMapEntryDAO.save(entry); } /* (non-Javadoc) @@ -103,8 +118,11 @@ public class MapAttributeImpl extends AttributeImpl implements MapAttribute @Override public void remove(String key) { - // TODO Auto-generated method stub - super.remove(key); + MapEntry entry = AVMDAOs.Instance().fMapEntryDAO.get(this, key); + if (entry != null) + { + AVMDAOs.Instance().fMapEntryDAO.delete(entry); + } } /* (non-Javadoc) @@ -113,7 +131,12 @@ public class MapAttributeImpl extends AttributeImpl implements MapAttribute @Override public Collection values() { - // TODO Auto-generated method stub - return super.values(); + List entries = AVMDAOs.Instance().fMapEntryDAO.get(this); + List attrs = new ArrayList(); + for (MapEntry entry : entries) + { + attrs.add(entry.getAttribute()); + } + return attrs; } } diff --git a/source/java/org/alfresco/repo/attributes/MapEntry.java b/source/java/org/alfresco/repo/attributes/MapEntry.java index 6558e16999..e9990bc29d 100644 --- a/source/java/org/alfresco/repo/attributes/MapEntry.java +++ b/source/java/org/alfresco/repo/attributes/MapEntry.java @@ -31,5 +31,27 @@ package org.alfresco.repo.attributes; */ public interface MapEntry { - // TODO This is a stub. Fix it. + /** + * Get the primary key. + * @return The key. + */ + public long getId(); + + /** + * Get the map attribute that this entry belongs to. + * @return The map attribute. + */ + public MapAttribute getMap(); + + /** + * Get the lookup key for this entry. + * @return The key. + */ + public String getKey(); + + /** + * Get the value attribute. + * @return The value attribute. + */ + public Attribute getAttribute(); } diff --git a/source/java/org/alfresco/repo/attributes/MapEntryImpl.java b/source/java/org/alfresco/repo/attributes/MapEntryImpl.java new file mode 100644 index 0000000000..d81a8baa04 --- /dev/null +++ b/source/java/org/alfresco/repo/attributes/MapEntryImpl.java @@ -0,0 +1,115 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing + */ + +package org.alfresco.repo.attributes; + +/** + * Implementation of map entries. + * @author britt + */ +public class MapEntryImpl implements MapEntry +{ + private long fID; + + private MapAttribute fMap; + + private String fKey; + + private Attribute fAttribute; + + public MapEntryImpl(MapAttribute map, + String key, + Attribute attribute) + { + fMap = map; + fKey = key; + fAttribute = attribute; + } + + /* (non-Javadoc) + * @see org.alfresco.repo.attributes.MapEntry#getAttribute() + */ + public Attribute getAttribute() + { + return fAttribute; + } + + /** + * Set the attribute. + * @param attr The attribute. + */ + public void setAttribute(Attribute attr) + { + fAttribute = attr; + } + + /* (non-Javadoc) + * @see org.alfresco.repo.attributes.MapEntry#getId() + */ + public long getId() + { + return fID; + } + + /** + * Setter. + */ + public void setId(long id) + { + fID = id; + } + + /* (non-Javadoc) + * @see org.alfresco.repo.attributes.MapEntry#getKey() + */ + public String getKey() + { + return fKey; + } + + /** + * Setter. + */ + public void setKey(String key) + { + fKey = key; + } + + /* (non-Javadoc) + * @see org.alfresco.repo.attributes.MapEntry#getMap() + */ + public MapAttribute getMap() + { + return fMap; + } + + /** + * Setter. + */ + public void setMap(MapAttribute map) + { + fMap = map; + } +} diff --git a/source/java/org/alfresco/repo/attributes/hibernate/AttributeDAOHibernate.java b/source/java/org/alfresco/repo/attributes/hibernate/AttributeDAOHibernate.java new file mode 100644 index 0000000000..986d70573d --- /dev/null +++ b/source/java/org/alfresco/repo/attributes/hibernate/AttributeDAOHibernate.java @@ -0,0 +1,66 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing + */ + +package org.alfresco.repo.attributes.hibernate; + +import java.util.List; + +import org.alfresco.repo.attributes.Attribute; +import org.alfresco.repo.attributes.AttributeDAO; +import org.alfresco.service.cmr.attributes.AttrQuery; +import org.springframework.orm.hibernate3.support.HibernateDaoSupport; + +/** + * Hibernate implementation of persistence for Attributes. + * @author britt + */ +public class AttributeDAOHibernate extends HibernateDaoSupport implements + AttributeDAO +{ + /* (non-Javadoc) + * @see org.alfresco.repo.attributes.AttributeDAO#delete(org.alfresco.repo.attributes.Attribute) + */ + public void delete(Attribute attr) + { + getSession().delete(attr); + } + + /* (non-Javadoc) + * @see org.alfresco.repo.attributes.AttributeDAO#find(java.lang.String, org.alfresco.service.cmr.attributes.AttrQuery) + */ + public List find(String path, AttrQuery query) + { + // TODO Need to implement query processing. + return null; + } + + /* (non-Javadoc) + * @see org.alfresco.repo.attributes.AttributeDAO#save(org.alfresco.repo.attributes.Attribute) + */ + public void save(Attribute attr) + { + getSession().save(attr); + } +} diff --git a/source/java/org/alfresco/repo/attributes/hibernate/Attributes.hbm.xml b/source/java/org/alfresco/repo/attributes/hibernate/Attributes.hbm.xml index 27d0ec821e..da6235ae05 100644 --- a/source/java/org/alfresco/repo/attributes/hibernate/Attributes.hbm.xml +++ b/source/java/org/alfresco/repo/attributes/hibernate/Attributes.hbm.xml @@ -86,6 +86,6 @@ - + diff --git a/source/java/org/alfresco/repo/attributes/hibernate/GlobalAttributeEntryDAOHibernate.java b/source/java/org/alfresco/repo/attributes/hibernate/GlobalAttributeEntryDAOHibernate.java new file mode 100644 index 0000000000..dfb29832c3 --- /dev/null +++ b/source/java/org/alfresco/repo/attributes/hibernate/GlobalAttributeEntryDAOHibernate.java @@ -0,0 +1,74 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing + */ + +package org.alfresco.repo.attributes.hibernate; + +import org.alfresco.repo.attributes.Attribute; +import org.alfresco.repo.attributes.GlobalAttributeEntry; +import org.alfresco.repo.attributes.GlobalAttributeEntryDAO; +import org.alfresco.repo.attributes.GlobalAttributeEntryImpl; +import org.springframework.orm.hibernate3.support.HibernateDaoSupport; + +/** + * Hibernate implementation of Global Attribute Entries. + * @author britt + */ +public class GlobalAttributeEntryDAOHibernate extends HibernateDaoSupport + implements GlobalAttributeEntryDAO +{ + /* (non-Javadoc) + * @see org.alfresco.repo.attributes.GlobalAttributeEntryDAO#delete(org.alfresco.repo.attributes.GlobalAttributeEntry) + */ + public void delete(GlobalAttributeEntry entry) + { + getSession().delete(entry); + } + + /* (non-Javadoc) + * @see org.alfresco.repo.attributes.GlobalAttributeEntryDAO#delete(java.lang.String) + */ + public void delete(String name) + { + delete((GlobalAttributeEntry)getSession().get(GlobalAttributeEntryImpl.class, name)); + } + + /* (non-Javadoc) + * @see org.alfresco.repo.attributes.GlobalAttributeEntryDAO#get(java.lang.String) + */ + public Attribute get(String name) + { + GlobalAttributeEntry entry = + (GlobalAttributeEntry)getSession().get(GlobalAttributeEntryImpl.class, name); + return entry.getAttribute(); + } + + /* (non-Javadoc) + * @see org.alfresco.repo.attributes.GlobalAttributeEntryDAO#save(org.alfresco.repo.attributes.GlobalAttributeEntry) + */ + public void save(GlobalAttributeEntry entry) + { + getSession().save(entry); + } +} diff --git a/source/java/org/alfresco/repo/attributes/hibernate/MapEntryDAOHibernate.java b/source/java/org/alfresco/repo/attributes/hibernate/MapEntryDAOHibernate.java new file mode 100644 index 0000000000..7a72568963 --- /dev/null +++ b/source/java/org/alfresco/repo/attributes/hibernate/MapEntryDAOHibernate.java @@ -0,0 +1,90 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing + */ + +package org.alfresco.repo.attributes.hibernate; + +import java.util.List; + +import org.alfresco.repo.attributes.MapAttribute; +import org.alfresco.repo.attributes.MapEntry; +import org.alfresco.repo.attributes.MapEntryDAO; +import org.hibernate.Query; +import org.springframework.orm.hibernate3.support.HibernateDaoSupport; + +/** + * Hibernate implementation of persistence for MapEntries. + * @author britt + */ +public class MapEntryDAOHibernate extends HibernateDaoSupport implements + MapEntryDAO +{ + /* (non-Javadoc) + * @see org.alfresco.repo.attributes.MapEntryDAO#delete(org.alfresco.repo.attributes.MapEntry) + */ + public void delete(MapEntry entry) + { + getSession().delete(entry); + } + + /* (non-Javadoc) + * @see org.alfresco.repo.attributes.MapEntryDAO#delete(org.alfresco.repo.attributes.MapAttribute) + */ + public void delete(MapAttribute mapAttr) + { + Query query = getSession().createQuery("delete from MapEntryImpl me where me.map = :map"); + query.setEntity("map", mapAttr); + query.executeUpdate(); + } + + /* (non-Javadoc) + * @see org.alfresco.repo.attributes.MapEntryDAO#get(org.alfresco.repo.attributes.MapAttribute, java.lang.String) + */ + public MapEntry get(MapAttribute mapAttr, String key) + { + Query query = getSession().createQuery("from MapEntryImpl me where me.map = :map and me.key = :key"); + query.setEntity("map", mapAttr); + query.setParameter("key", key); + return (MapEntry)query.uniqueResult(); + } + + /* (non-Javadoc) + * @see org.alfresco.repo.attributes.MapEntryDAO#get(org.alfresco.repo.attributes.MapAttribute) + */ + @SuppressWarnings("unchecked") + public List get(MapAttribute mapAttr) + { + Query query = getSession().createQuery("from MapEntryImpl me where me.map = :map"); + query.setEntity("map", mapAttr); + return (List)query.list(); + } + + /* (non-Javadoc) + * @see org.alfresco.repo.attributes.MapEntryDAO#save(org.alfresco.repo.attributes.MapEntry) + */ + public void save(MapEntry entry) + { + getSession().save(entry); + } +} diff --git a/source/java/org/alfresco/repo/avm/AVMDAOs.java b/source/java/org/alfresco/repo/avm/AVMDAOs.java index 13f611b67a..ceb4cfd452 100644 --- a/source/java/org/alfresco/repo/avm/AVMDAOs.java +++ b/source/java/org/alfresco/repo/avm/AVMDAOs.java @@ -3,6 +3,10 @@ */ package org.alfresco.repo.avm; +import org.alfresco.repo.attributes.AttributeDAO; +import org.alfresco.repo.attributes.GlobalAttributeEntryDAO; +import org.alfresco.repo.attributes.MapEntryDAO; + /** * This is the (shudder) global context for AVM. It a rendezvous * point for access to needed global instances. @@ -79,6 +83,12 @@ public class AVMDAOs */ public AVMAspectNameDAO fAVMAspectNameDAO; + public AttributeDAO fAttributeDAO; + + public MapEntryDAO fMapEntryDAO; + + public GlobalAttributeEntryDAO fGlobalAttributeEntryDAO; + /** * @param nodeDAO the fAVMNodeDAO to set */ @@ -149,4 +159,19 @@ public class AVMDAOs { fAVMAspectNameDAO = avmAspectNameDAO; } + + public void setAttributeDAO(AttributeDAO dao) + { + fAttributeDAO = dao; + } + + public void setMapEntryDAO(MapEntryDAO dao) + { + fMapEntryDAO = dao; + } + + public void setGlobalAttributeEntryDAO(GlobalAttributeEntryDAO dao) + { + fGlobalAttributeEntryDAO = dao; + } } diff --git a/source/java/org/alfresco/service/cmr/attributes/AttrAndQuery.java b/source/java/org/alfresco/service/cmr/attributes/AttrAndQuery.java new file mode 100644 index 0000000000..5bed3ab5d2 --- /dev/null +++ b/source/java/org/alfresco/service/cmr/attributes/AttrAndQuery.java @@ -0,0 +1,72 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing + */ + +package org.alfresco.service.cmr.attributes; + +import java.util.ArrayList; +import java.util.List; + +/** + * And aggregate query. + * @author britt + */ +public class AttrAndQuery extends AttrQuery +{ + private static final long serialVersionUID = 5452165715643751502L; + + private List fSubQueries; + + public AttrAndQuery(List queries) + { + fSubQueries = queries; + } + + public AttrAndQuery(AttrQuery... queries) + { + fSubQueries = new ArrayList(); + for (AttrQuery query : queries) + { + fSubQueries.add(query); + } + } + + /* (non-Javadoc) + * @see org.alfresco.service.cmr.attributes.AttrQuery#getPredicate(org.alfresco.service.cmr.attributes.AttrQueryHelper) + */ + @Override + public String getPredicate(AttrQueryHelper helper) + { + StringBuilder builder = new StringBuilder(); + builder.append('('); + for (int i = 0; i < fSubQueries.size() - 1; i++) + { + builder.append(fSubQueries.get(i).getPredicate(helper)); + builder.append(" and "); + } + builder.append(fSubQueries.get(fSubQueries.size() - 1).getPredicate(helper)); + builder.append(')'); + return builder.toString(); + } +} diff --git a/source/java/org/alfresco/service/cmr/attributes/AttrNotQuery.java b/source/java/org/alfresco/service/cmr/attributes/AttrNotQuery.java new file mode 100644 index 0000000000..a25a2527d8 --- /dev/null +++ b/source/java/org/alfresco/service/cmr/attributes/AttrNotQuery.java @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing + */ + +package org.alfresco.service.cmr.attributes; + +/** + * The negation of a sub query. + * @author britt + */ +public class AttrNotQuery extends AttrQuery +{ + private static final long serialVersionUID = -7798693028454128695L; + + private AttrQuery fSubQuery; + + public AttrNotQuery(AttrQuery sub) + { + fSubQuery = sub; + } + + /* (non-Javadoc) + * @see org.alfresco.service.cmr.attributes.AttrQuery#getPredicate(org.alfresco.service.cmr.attributes.AttrQueryHelper) + */ + @Override + public String getPredicate(AttrQueryHelper helper) + { + StringBuilder builder = new StringBuilder(); + builder.append("(not "); + builder.append(fSubQuery.getPredicate(helper)); + builder.append(')'); + return builder.toString(); + } +} diff --git a/source/java/org/alfresco/service/cmr/attributes/AttrOrQuery.java b/source/java/org/alfresco/service/cmr/attributes/AttrOrQuery.java new file mode 100644 index 0000000000..218fec3aee --- /dev/null +++ b/source/java/org/alfresco/service/cmr/attributes/AttrOrQuery.java @@ -0,0 +1,72 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing + */ + +package org.alfresco.service.cmr.attributes; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author britt + * + */ +public class AttrOrQuery extends AttrQuery +{ + private static final long serialVersionUID = 2295618804175882547L; + + private List fSubQueries; + + public AttrOrQuery(List queries) + { + fSubQueries = queries; + } + + public AttrOrQuery(AttrQuery... queries) + { + fSubQueries = new ArrayList(); + for (AttrQuery query : queries) + { + fSubQueries.add(query); + } + } + + /* (non-Javadoc) + * @see org.alfresco.service.cmr.attributes.AttrQuery#getPredicate(int) + */ + @Override + public String getPredicate(AttrQueryHelper helper) + { + StringBuilder builder = new StringBuilder(); + builder.append('('); + for (int i = 0; i < fSubQueries.size() - 1; i++) + { + builder.append(fSubQueries.get(i).getPredicate(helper)); + builder.append(" or "); + } + builder.append(fSubQueries.get(fSubQueries.size() - 1).getPredicate(helper)); + builder.append(')'); + return builder.toString(); + } +} diff --git a/source/java/org/alfresco/service/cmr/attributes/AttrQuery.java b/source/java/org/alfresco/service/cmr/attributes/AttrQuery.java index 1508d44eef..71d8bd2aa8 100644 --- a/source/java/org/alfresco/service/cmr/attributes/AttrQuery.java +++ b/source/java/org/alfresco/service/cmr/attributes/AttrQuery.java @@ -27,162 +27,26 @@ package org.alfresco.service.cmr.attributes; import java.io.Serializable; -import org.alfresco.repo.attributes.Attribute; -import org.alfresco.repo.attributes.AttributeUnsupportedQueryType; - /** * Abstract base class for Attribute Query nodes. * @author britt */ public abstract class AttrQuery implements Serializable { - protected Attribute fValue; + protected String fValue; - protected String fAttrName; + protected AttrQuery() + { + } - protected String fEntityName; - - protected AttrQuery(Attribute value) + protected AttrQuery(String value) { fValue = value; - switch (fValue.getType()) - { - case BOOLEAN : - { - fAttrName = "booleanValue"; - fEntityName = "BooleanAttributeImpl"; - break; - } - case BYTE : - { - fAttrName = "byteValue"; - fEntityName = "ByteAttributeImpl"; - break; - } - case SHORT : - { - fAttrName = "shortValue"; - fEntityName = "ShortAttributeImpl"; - break; - } - case INT : - { - fAttrName = "intValue"; - fEntityName = "IntAttributeImpl"; - break; - } - case LONG : - { - fAttrName = "longValue"; - fEntityName = "LongAttributeImpl"; - break; - } - case FLOAT : - { - fAttrName = "floatValue"; - fEntityName = "FloatAttributeImpl"; - break; - } - case DOUBLE : - { - fAttrName = "doubleValue"; - fEntityName = "DoubleAttributeImpl"; - break; - } - case STRING : - { - fAttrName = "stringValue"; - fEntityName = "StringAttributeImpl"; - break; - } - case BLOB : - { - fAttrName = "blobValue"; - fEntityName = "BlobValueImpl"; - break; - } - case SERIALIZABLE : - { - fAttrName = "serializableValue"; - fEntityName = "SerializableValueImpl"; - break; - } - case MAP : - { - fAttrName = "mapValue"; // This doesn't need to make sense. - fEntityName = "MapValueImpl"; // Nor does this. - } - } } /** * Get the predicate that goes into a Hibernate query. * @return The predicate. */ - public abstract String getPredicate(); - - /** - * Get the entity that this predicate applies to. - * @return The entity name. - */ - public String getEntity() - { - return fEntityName; - } - - protected String getValue() - { - switch (fValue.getType()) - { - case BOOLEAN : - { - return fValue.getBooleanValue() ? "1" : "0"; - } - case BYTE : - { - return Byte.toString(fValue.getByteValue()); - } - case SHORT : - { - return Short.toString(fValue.getShortValue()); - } - case INT : - { - return Integer.toString(fValue.getIntValue()); - } - case LONG : - { - return Long.toString(fValue.getLongValue()); - } - case FLOAT : - { - return Float.toString(fValue.getFloatValue()); - } - case DOUBLE : - { - return Double.toString(fValue.getDoubleValue()); - } - case STRING : - { - StringBuilder builder = new StringBuilder(); - char[] chars = fValue.getStringValue().toCharArray(); - builder.append('\''); - for (char c : chars) - { - if (c == '\'') - { - builder.append("\\'"); - continue; - } - builder.append(c); - } - builder.append('\''); - return builder.toString(); - } - default : - { - throw new AttributeUnsupportedQueryType(fValue.getType().name()); - } - } - } + public abstract String getPredicate(AttrQueryHelper helper); } diff --git a/source/java/org/alfresco/service/cmr/attributes/AttrQueryEquals.java b/source/java/org/alfresco/service/cmr/attributes/AttrQueryEquals.java index c25abc0eec..72062eb77e 100644 --- a/source/java/org/alfresco/service/cmr/attributes/AttrQueryEquals.java +++ b/source/java/org/alfresco/service/cmr/attributes/AttrQueryEquals.java @@ -25,9 +25,6 @@ package org.alfresco.service.cmr.attributes; -import org.alfresco.repo.attributes.Attribute; -import org.alfresco.repo.attributes.AttributeUnsupportedQueryType; - /** * The equals predicate. * @author britt @@ -36,17 +33,19 @@ public class AttrQueryEquals extends AttrQuery { private static final long serialVersionUID = 2180915053803244460L; - public AttrQueryEquals(Attribute value) + public AttrQueryEquals(String name) { - super(value); + super(name); } /* (non-Javadoc) * @see org.alfresco.service.cmr.attributes.AttrQuery#getPredicate() */ @Override - public String getPredicate() + public String getPredicate(AttrQueryHelper helper) { - return "ent." + fAttrName + " = " + getValue(); + String name = ":name" + helper.getNextSuffix(); + helper.setParameter(name, fValue); + return "me.key = " + name; } } diff --git a/source/java/org/alfresco/service/cmr/attributes/AttrQueryGT.java b/source/java/org/alfresco/service/cmr/attributes/AttrQueryGT.java index 6fb4315bbd..1a519c384f 100644 --- a/source/java/org/alfresco/service/cmr/attributes/AttrQueryGT.java +++ b/source/java/org/alfresco/service/cmr/attributes/AttrQueryGT.java @@ -25,8 +25,6 @@ package org.alfresco.service.cmr.attributes; -import org.alfresco.repo.attributes.Attribute; - /** * Greater than query. * @author britt @@ -36,19 +34,21 @@ public class AttrQueryGT extends AttrQuery private static final long serialVersionUID = 3171792743187950462L; /** - * @param value + * @param name */ - public AttrQueryGT(Attribute value) + public AttrQueryGT(String name) { - super(value); + super(name); } /* (non-Javadoc) * @see org.alfresco.service.cmr.attributes.AttrQuery#getPredicate() */ @Override - public String getPredicate() + public String getPredicate(AttrQueryHelper helper) { - return "ent." + fAttrName + " > " + getValue(); + String name = ":name" + helper.getNextSuffix(); + helper.setParameter(name, fValue); + return "me.key > " + name; } } diff --git a/source/java/org/alfresco/service/cmr/attributes/AttrQueryGTE.java b/source/java/org/alfresco/service/cmr/attributes/AttrQueryGTE.java index af536ccf87..a440a4de52 100644 --- a/source/java/org/alfresco/service/cmr/attributes/AttrQueryGTE.java +++ b/source/java/org/alfresco/service/cmr/attributes/AttrQueryGTE.java @@ -25,7 +25,6 @@ package org.alfresco.service.cmr.attributes; -import org.alfresco.repo.attributes.Attribute; /** * Greater than or equals predicate. @@ -36,19 +35,21 @@ public class AttrQueryGTE extends AttrQuery private static final long serialVersionUID = -7957078449719425057L; /** - * @param value + * @param name */ - public AttrQueryGTE(Attribute value) + public AttrQueryGTE(String name) { - super(value); + super(name); } /* (non-Javadoc) * @see org.alfresco.service.cmr.attributes.AttrQuery#getPredicate() */ @Override - public String getPredicate() + public String getPredicate(AttrQueryHelper helper) { - return "ent." + fAttrName + " >= " + getValue(); + String name = ":name" + helper.getNextSuffix(); + helper.setParameter(name, fValue); + return "me.key >= " + name; } } diff --git a/source/java/org/alfresco/service/cmr/attributes/AttrQueryHelper.java b/source/java/org/alfresco/service/cmr/attributes/AttrQueryHelper.java new file mode 100644 index 0000000000..ef843c6d37 --- /dev/null +++ b/source/java/org/alfresco/service/cmr/attributes/AttrQueryHelper.java @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing + */ + +package org.alfresco.service.cmr.attributes; + +import java.util.Map; + +/** + * An implementation of this is passed into an AttrQuery to aid it + * in generating the actual predicate. + * @author britt + */ +public interface AttrQueryHelper +{ + /** + * Get the next integer suffix for named arguments. + * @return The next integer suffix. + */ + public int getNextSuffix(); + + /** + * As an AttrQuery is generating the predicate, it + * tells this helper about its parameter names and bindings. + * @param name The name of the parameter + * @param value The binding. + */ + public void setParameter(String name, String value); + + /** + * Get the parameter bindings for a generated predicate. + * @return The parameter bindings. + */ + public Map getParameters(); +} diff --git a/source/java/org/alfresco/service/cmr/attributes/AttrQueryLT.java b/source/java/org/alfresco/service/cmr/attributes/AttrQueryLT.java index 452be6fe52..f96b6b32ef 100644 --- a/source/java/org/alfresco/service/cmr/attributes/AttrQueryLT.java +++ b/source/java/org/alfresco/service/cmr/attributes/AttrQueryLT.java @@ -25,8 +25,6 @@ package org.alfresco.service.cmr.attributes; -import org.alfresco.repo.attributes.Attribute; - /** * Query a less than condition. * @author britt @@ -36,19 +34,21 @@ public class AttrQueryLT extends AttrQuery private static final long serialVersionUID = -2385160490778425115L; /** - * @param value + * @param name */ - public AttrQueryLT(Attribute value) + public AttrQueryLT(String name) { - super(value); + super(name); } /* (non-Javadoc) * @see org.alfresco.service.cmr.attributes.AttrQuery#getPredicate() */ @Override - public String getPredicate() + public String getPredicate(AttrQueryHelper helper) { - return "ent." + fAttrName + " < " + getValue(); + String name = ":name" + helper.getNextSuffix(); + helper.setParameter(name, fValue); + return "me.key < " + name; } } diff --git a/source/java/org/alfresco/service/cmr/attributes/AttrQueryLTE.java b/source/java/org/alfresco/service/cmr/attributes/AttrQueryLTE.java index 9b0a07db92..5ef6338e7e 100644 --- a/source/java/org/alfresco/service/cmr/attributes/AttrQueryLTE.java +++ b/source/java/org/alfresco/service/cmr/attributes/AttrQueryLTE.java @@ -25,8 +25,6 @@ package org.alfresco.service.cmr.attributes; -import org.alfresco.repo.attributes.Attribute; - /** * Less than or equal query * @author britt @@ -38,7 +36,7 @@ public class AttrQueryLTE extends AttrQuery /** * @param value */ - public AttrQueryLTE(Attribute value) + public AttrQueryLTE(String value) { super(value); } @@ -47,8 +45,10 @@ public class AttrQueryLTE extends AttrQuery * @see org.alfresco.service.cmr.attributes.AttrQuery#getPredicate() */ @Override - public String getPredicate() + public String getPredicate(AttrQueryHelper helper) { - return "ent." + fAttrName + " <= " + getValue(); + String name = ":name" + helper.getNextSuffix(); + helper.setParameter(name, fValue); + return "me.key <= " + name; } } diff --git a/source/java/org/alfresco/service/cmr/attributes/AttrQueryLike.java b/source/java/org/alfresco/service/cmr/attributes/AttrQueryLike.java index 844a632972..5db01b5561 100644 --- a/source/java/org/alfresco/service/cmr/attributes/AttrQueryLike.java +++ b/source/java/org/alfresco/service/cmr/attributes/AttrQueryLike.java @@ -25,8 +25,6 @@ package org.alfresco.service.cmr.attributes; -import org.alfresco.repo.attributes.Attribute; -import org.alfresco.repo.attributes.AttributeUnsupportedQueryType; /** * A "like" query. @@ -37,23 +35,21 @@ public class AttrQueryLike extends AttrQuery private static final long serialVersionUID = -984397014171296687L; /** - * @param value + * @param name */ - public AttrQueryLike(Attribute value) + public AttrQueryLike(String name) { - super(value); + super(name); } /* (non-Javadoc) * @see org.alfresco.service.cmr.attributes.AttrQuery#getPredicate() */ @Override - public String getPredicate() + public String getPredicate(AttrQueryHelper helper) { - if (fValue.getType() != Attribute.Type.STRING) - { - throw new AttributeUnsupportedQueryType(fValue.getType().name()); - } - return "ent." + fAttrName + " like " + getValue(); + String name = ":name" + helper.getNextSuffix(); + helper.setParameter(name, fValue); + return "me.key like " + name; } } diff --git a/source/java/org/alfresco/service/cmr/attributes/AttrQueryNE.java b/source/java/org/alfresco/service/cmr/attributes/AttrQueryNE.java index d7f4177599..871c7d7f8c 100644 --- a/source/java/org/alfresco/service/cmr/attributes/AttrQueryNE.java +++ b/source/java/org/alfresco/service/cmr/attributes/AttrQueryNE.java @@ -25,8 +25,6 @@ package org.alfresco.service.cmr.attributes; -import org.alfresco.repo.attributes.Attribute; - /** * Not equals query. * @author britt @@ -36,19 +34,21 @@ public class AttrQueryNE extends AttrQuery private static final long serialVersionUID = 103038173214972590L; /** - * @param value + * @param name */ - public AttrQueryNE(Attribute value) + public AttrQueryNE(String name) { - super(value); + super(name); } /* (non-Javadoc) * @see org.alfresco.service.cmr.attributes.AttrQuery#getPredicate() */ @Override - public String getPredicate() + public String getPredicate(AttrQueryHelper helper) { - return "ent." + fAttrName + " <> " + getValue(); + String name = ":name" + helper.getNextSuffix(); + helper.setParameter(name, fValue); + return "me.key <> " + name; } } diff --git a/source/java/org/alfresco/service/cmr/attributes/AttributeService.java b/source/java/org/alfresco/service/cmr/attributes/AttributeService.java index 17418206c6..8e5ba7ce12 100644 --- a/source/java/org/alfresco/service/cmr/attributes/AttributeService.java +++ b/source/java/org/alfresco/service/cmr/attributes/AttributeService.java @@ -27,6 +27,8 @@ package org.alfresco.service.cmr.attributes; import java.util.List; +import org.alfresco.repo.attributes.Attribute; + /** * This provides services for reading, writing, and querying global attributes. * @author britt @@ -35,24 +37,23 @@ public interface AttributeService { /** * Get a Global Attribute. - * @param path The path of the Attribute. Attribute paths are of the form - * {name}({name}|[index])* + * @param path The path of the Attribute. * @return The value of the attribute or null. */ - public Object getValue(String path); + public Attribute getAttribute(String path); /** * Set a Global Attribute. Overwrites if it exists. * @param name The name of the Attribute. * @param value The value to set. */ - public void setValue(String path, Object value); + public void setAttribute(String path, Attribute value); /** * Remove an Attribute. * @param name The name of the Attribute. */ - public void removeValue(String path); + public void removeAttribute(String path); /** * Query for a list of attributes which are contained in the container @@ -61,5 +62,5 @@ public interface AttributeService * @param query * @return A List of matching attributes. */ - public List query(String path, AttrQuery query); + public List query(String path, AttrQuery query); }