From 3e0c445ff41114ed6aca5f62322fb359448f62cc Mon Sep 17 00:00:00 2001 From: Britt Park Date: Mon, 12 Mar 2007 15:56:59 +0000 Subject: [PATCH] Nestable metadata checkpoint. Preliminary mapping. Preliminary interface for value items. Preliminary service interface. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@5379 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../org/alfresco/repo/attributes/Value.java | 256 ++++++++++++++ .../alfresco/repo/attributes/ValueImpl.java | 325 ++++++++++++++++++ .../ValueMethodNotImplementedException.java | 42 +++ .../attributes/hibernate/Attributes.hbm.xml | 91 +++++ .../cmr/attributes/AttributeService.java | 56 +++ 5 files changed, 770 insertions(+) create mode 100644 source/java/org/alfresco/repo/attributes/Value.java create mode 100644 source/java/org/alfresco/repo/attributes/ValueImpl.java create mode 100644 source/java/org/alfresco/repo/attributes/ValueMethodNotImplementedException.java create mode 100644 source/java/org/alfresco/repo/attributes/hibernate/Attributes.hbm.xml create mode 100644 source/java/org/alfresco/service/cmr/attributes/AttributeService.java diff --git a/source/java/org/alfresco/repo/attributes/Value.java b/source/java/org/alfresco/repo/attributes/Value.java new file mode 100644 index 0000000000..495205c561 --- /dev/null +++ b/source/java/org/alfresco/repo/attributes/Value.java @@ -0,0 +1,256 @@ +/* + * 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.io.Serializable; +import java.util.Collection; +import java.util.Map; +import java.util.Set; + +/** + * Interface for polymorphic attributes. + * @author britt + */ +public interface Value extends Iterable +{ + public static enum Type implements Serializable + { + BYTE, + SHORT, + INT, + LONG, + FLOAT, + DOUBLE, + STRING, + BLOB, + SERIALIZABLE, + LIST, + MAP + }; + + /** + * Get the value type for this node. + * @return + */ + public Type getType(); + + /** + * Set a boolean value. + * @param value The value. + */ + public void setBooleanValue(boolean value); + + /** + * Get the value of a BooleanValue. + * @return The value. + */ + public boolean getBooleanValue(); + + /** + * Set a byte value. + * @param value The value to set. + */ + public void setByteValue(byte value); + + /** + * Get the value of a ByteValue. + * @return The value. + */ + public byte getByteValue(); + + /** + * Set a short value. + * @param value The value to set. + */ + public void setShortValue(short value); + + /** + * Get the value of a ShortValue. + * @return The value. + */ + public short getShortValue(); + + /** + * Set an integer value. + * @param value The value to set. + */ + public void setIntValue(int value); + + /** + * Get the integer value of an IntValue. + * @return The value. + */ + public int getIntValue(); + + /** + * Set a long value. + * @param value The value to set. + */ + public void setLongValue(long value); + + /** + * Get the long value of a LongValue. + * @return The value. + */ + public long getLongValue(); + + /** + * Set a float value. + * @param value The value to set. + */ + public void setFloatValue(float value); + + /** + * Get the value of a FloatValue. + * @return The value. + */ + public float getFloatValue(); + + /** + * Set a double value. + * @param value The value to set. + */ + public void setDoubleValue(double value); + + /** + * Get a double value from a DoubleValue. + * @return The value. + */ + public double getDoubleValue(); + + /** + * Set a String value. + * @param value The value to set. + */ + public void setStringValue(String value); + + /** + * Get a String value from a StringValue. + * @return The value. + */ + public String getStringValue(); + + /** + * Set a Blob value. + * @param value The value to set. + */ + public void setBlobValue(byte[] value); + + /** + * Get a Blob value from a BlobValue + * @return The value. + */ + public byte[] getBlobValue(); + + /** + * Set a Serializable value. + * @param value + */ + public void setSerializableValue(Serializable value); + + /** + * Get a Seriailizable value from a SerializableValue + * @return The value. + */ + public Serializable getSerializableValue(); + + /** + * Add a Value to a list. + * @param value The value to add. + */ + public void add(Value value); + + /** + * Add a Value to a list at the given index. + * @param index The offset. + * @param value The value to add. + */ + public void add(int index, Value value); + + /** + * Get the value at the given index of a list. + * @param index The offset. + * @return The value. + */ + public Value get(int index); + + /** + * Remove the given entry from a list. + * @param index The offset to remove. + */ + public void remove(int index); + + /** + * Clear a list or a map. + */ + public void clear(); + + /** + * Add an entry to a map. + * @param key The key to the entry. + * @param value The Value of the entry. + */ + public void put(String key, Value value); + + /** + * Get the Value for a key in a map. + * @param key The key. + * @return The value. + */ + public Value get(String key); + + /** + * Remove an entry by key from a map. + * @param key The key of the entry to remove. + */ + public void remove(String key); + + /** + * Get the entry set for a map. + * @return The entry set. + */ + public Set> entrySet(); + + /** + * Get the key set for a map. + * @return The key set. + */ + public Set keySet(); + + /** + * Get the collection of values of a map. + * @return The values. + */ + public Collection values(); + + /** + * Get (possibly recursively) the Value as an Object. The returned + * value is a copy of the Value using standard java Integers, Longs, Doubles, Strings, + * byte[]s, Maps, and Lists. + * @return The Object value. + */ + public Object getAsObject(); +} diff --git a/source/java/org/alfresco/repo/attributes/ValueImpl.java b/source/java/org/alfresco/repo/attributes/ValueImpl.java new file mode 100644 index 0000000000..28d32e62a6 --- /dev/null +++ b/source/java/org/alfresco/repo/attributes/ValueImpl.java @@ -0,0 +1,325 @@ +/* + * 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.io.Serializable; +import java.util.Collection; +import java.util.Iterator; +import java.util.Set; +import java.util.Map.Entry; + +/** + * The base class of the implementation of Values. + * @author britt + */ +public abstract class ValueImpl implements Value +{ + /** + * The primary key. + */ + private long fID; + + /** + * Base constructor. + */ + protected ValueImpl() + { + } + + public void setId(long id) + { + fID = id; + } + + public long getId() + { + return fID; + } + + /* (non-Javadoc) + * @see org.alfresco.repo.attributes.Value#add(org.alfresco.repo.attributes.Value) + */ + public void add(Value value) + { + throw new ValueMethodNotImplementedException("Not ListValue"); + } + + /* (non-Javadoc) + * @see org.alfresco.repo.attributes.Value#add(int, org.alfresco.repo.attributes.Value) + */ + public void add(int index, Value value) + { + throw new ValueMethodNotImplementedException("Not ListValue"); + } + + /* (non-Javadoc) + * @see org.alfresco.repo.attributes.Value#clear() + */ + public void clear() + { + throw new ValueMethodNotImplementedException("Not ListValue or MapValue"); + } + + /* (non-Javadoc) + * @see org.alfresco.repo.attributes.Value#entrySet() + */ + public Set> entrySet() + { + throw new ValueMethodNotImplementedException("Not MapValue"); + } + + /* (non-Javadoc) + * @see org.alfresco.repo.attributes.Value#get(int) + */ + public Value get(int index) + { + throw new ValueMethodNotImplementedException("Not ListValue"); + } + + /* (non-Javadoc) + * @see org.alfresco.repo.attributes.Value#get(java.lang.String) + */ + public Value get(String key) + { + throw new ValueMethodNotImplementedException("Not MapValue"); + } + + /* (non-Javadoc) + * @see org.alfresco.repo.attributes.Value#getAsObject() + */ + public Object getAsObject() + { + throw new ValueMethodNotImplementedException("Not implemented in base class"); + } + + /* (non-Javadoc) + * @see org.alfresco.repo.attributes.Value#getBlobValue() + */ + public byte[] getBlobValue() + { + throw new ValueMethodNotImplementedException("Not BlobValue"); + } + + /* (non-Javadoc) + * @see org.alfresco.repo.attributes.Value#getDoubleValue() + */ + public double getDoubleValue() + { + throw new ValueMethodNotImplementedException("Not DoubleValue"); + } + + /* (non-Javadoc) + * @see org.alfresco.repo.attributes.Value#getIntValue() + */ + public int getIntValue() + { + throw new ValueMethodNotImplementedException("Not IntValue"); + } + + /* (non-Javadoc) + * @see org.alfresco.repo.attributes.Value#getLongValue() + */ + public long getLongValue() + { + throw new ValueMethodNotImplementedException("Not LongValue"); + } + + /* (non-Javadoc) + * @see org.alfresco.repo.attributes.Value#getSerializableValue() + */ + public Serializable getSerializableValue() + { + throw new ValueMethodNotImplementedException("Not SerializableValue"); + } + + /* (non-Javadoc) + * @see org.alfresco.repo.attributes.Value#getStringValue() + */ + public String getStringValue() + { + throw new ValueMethodNotImplementedException("Not StringValue"); + } + + /* (non-Javadoc) + * @see org.alfresco.repo.attributes.Value#keySet() + */ + public Set keySet() + { + throw new ValueMethodNotImplementedException("Not MapValue"); + } + + /* (non-Javadoc) + * @see org.alfresco.repo.attributes.Value#put(java.lang.String, org.alfresco.repo.attributes.Value) + */ + public void put(String key, Value value) + { + throw new ValueMethodNotImplementedException("Not MapValue"); + } + + /* (non-Javadoc) + * @see org.alfresco.repo.attributes.Value#remove(int) + */ + public void remove(int index) + { + throw new ValueMethodNotImplementedException("Not ListValue"); + } + + /* (non-Javadoc) + * @see org.alfresco.repo.attributes.Value#remove(java.lang.String) + */ + public void remove(String key) + { + throw new ValueMethodNotImplementedException("Not MapValue"); + } + + /* (non-Javadoc) + * @see org.alfresco.repo.attributes.Value#setBlobValue(byte[]) + */ + public void setBlobValue(byte[] value) + { + throw new ValueMethodNotImplementedException("Not BlobValue"); + } + + /* (non-Javadoc) + * @see org.alfresco.repo.attributes.Value#setDoubleValue(double) + */ + public void setDoubleValue(double value) + { + throw new ValueMethodNotImplementedException("Not DoubleValue"); + } + + /* (non-Javadoc) + * @see org.alfresco.repo.attributes.Value#setIntValue(int) + */ + public void setIntValue(int value) + { + throw new ValueMethodNotImplementedException("Not IntValue"); + } + + /* (non-Javadoc) + * @see org.alfresco.repo.attributes.Value#setLongValue(long) + */ + public void setLongValue(long value) + { + throw new ValueMethodNotImplementedException("Not LongValue"); + } + + /* (non-Javadoc) + * @see org.alfresco.repo.attributes.Value#setSerializableValue(java.io.Serializable) + */ + public void setSerializableValue(Serializable value) + { + throw new ValueMethodNotImplementedException("Not SerializableValue"); + } + + /* (non-Javadoc) + * @see org.alfresco.repo.attributes.Value#setStringValue(java.lang.String) + */ + public void setStringValue(String value) + { + throw new ValueMethodNotImplementedException("Not StringValue"); + } + + /* (non-Javadoc) + * @see org.alfresco.repo.attributes.Value#values() + */ + public Collection values() + { + throw new ValueMethodNotImplementedException("Not MapValue"); + } + + /* (non-Javadoc) + * @see java.lang.Iterable#iterator() + */ + public Iterator iterator() + { + throw new ValueMethodNotImplementedException("Not ListValue"); + } + + /* (non-Javadoc) + * @see org.alfresco.repo.attributes.Value#getBooleanValue() + */ + public boolean getBooleanValue() + { + throw new ValueMethodNotImplementedException("Not BooleanValue"); + } + + /* (non-Javadoc) + * @see org.alfresco.repo.attributes.Value#getByteValue() + */ + public byte getByteValue() + { + throw new ValueMethodNotImplementedException("Not ByteValue"); + } + + /* (non-Javadoc) + * @see org.alfresco.repo.attributes.Value#getFloatValue() + */ + public float getFloatValue() + { + throw new ValueMethodNotImplementedException("Not FloatValue"); + } + + /* (non-Javadoc) + * @see org.alfresco.repo.attributes.Value#getShortValue() + */ + public short getShortValue() + { + throw new ValueMethodNotImplementedException("Not ShortValue"); + } + + /* (non-Javadoc) + * @see org.alfresco.repo.attributes.Value#setBooleanValue(boolean) + */ + public void setBooleanValue(boolean value) + { + throw new ValueMethodNotImplementedException("Not BooleanValue"); + } + + /* (non-Javadoc) + * @see org.alfresco.repo.attributes.Value#setByteValue(byte) + */ + public void setByteValue(byte value) + { + throw new ValueMethodNotImplementedException("Not ByteValue"); + } + + /* (non-Javadoc) + * @see org.alfresco.repo.attributes.Value#setFloatValue(float) + */ + public void setFloatValue(float value) + { + throw new ValueMethodNotImplementedException("Not FloatValue"); + } + + /* (non-Javadoc) + * @see org.alfresco.repo.attributes.Value#setShortValue(short) + */ + public void setShortValue(short value) + { + throw new ValueMethodNotImplementedException("Not ShortValue"); + } +} diff --git a/source/java/org/alfresco/repo/attributes/ValueMethodNotImplementedException.java b/source/java/org/alfresco/repo/attributes/ValueMethodNotImplementedException.java new file mode 100644 index 0000000000..8edcf2a696 --- /dev/null +++ b/source/java/org/alfresco/repo/attributes/ValueMethodNotImplementedException.java @@ -0,0 +1,42 @@ +/* + * 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.error.AlfrescoRuntimeException; + +/** + * For unimplemented attribute methods. + * @author britt + */ +public class ValueMethodNotImplementedException extends AlfrescoRuntimeException +{ + private static final long serialVersionUID = -7167699355451456957L; + + public ValueMethodNotImplementedException(String message) + { + super(message); + } +} diff --git a/source/java/org/alfresco/repo/attributes/hibernate/Attributes.hbm.xml b/source/java/org/alfresco/repo/attributes/hibernate/Attributes.hbm.xml new file mode 100644 index 0000000000..3b13f496c7 --- /dev/null +++ b/source/java/org/alfresco/repo/attributes/hibernate/Attributes.hbm.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/source/java/org/alfresco/service/cmr/attributes/AttributeService.java b/source/java/org/alfresco/service/cmr/attributes/AttributeService.java new file mode 100644 index 0000000000..5125fd0435 --- /dev/null +++ b/source/java/org/alfresco/service/cmr/attributes/AttributeService.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; + +/** + * This provides services for reading, writing, and querying global attributes. + * @author britt + */ +public interface AttributeService +{ + /** + * Get a Global Attribute. + * @param path The path of the Attribute. Attribute paths are of the form + * {name}({name}|[index])* + * @return The value of the attribute or null. + */ + public Object getValue(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); + + /** + * Remove an Attribute. + * @param name The name of the Attribute. + */ + public void removeValue(String path); + + // TODO A query interface. +}