| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| |
| package org.apache.axis2.util; |
| |
| import org.apache.axis2.context.externalize.SafeObjectInputStream; |
| import org.apache.axis2.context.externalize.SafeObjectOutputStream; |
| import org.apache.axis2.context.externalize.SafeSerializable; |
| |
| import javax.xml.namespace.QName; |
| import java.io.Externalizable; |
| import java.io.IOException; |
| import java.io.ObjectInput; |
| import java.io.ObjectOutput; |
| import java.util.ArrayList; |
| |
| |
| /** |
| * An internal class for holding a set of information |
| * about an object. |
| */ |
| public class MetaDataEntry implements Externalizable, SafeSerializable { |
| // serialization identifier |
| private static final long serialVersionUID = 8978361069526299875L; |
| |
| // supported revision levels, add a new level to manage compatible changes |
| private static final int REVISION_2 = 2; |
| // current revision level of this object |
| private static final int revisionID = REVISION_2; |
| |
| // data to keep on an object |
| |
| private String className = null; |
| private String qnameAsString = null; |
| private String extraName = null; |
| |
| // list of MetaDataEntry objects that are owned by the |
| // original object referred to by this MetaDataEntry |
| private ArrayList children = null; |
| |
| // marker to indicate end-of-list |
| public static String END_OF_LIST = "LAST_ENTRY"; |
| |
| /** |
| * Simple constructor |
| */ |
| public MetaDataEntry() { |
| } |
| |
| /** |
| * Constructor |
| * @param className name of the object class |
| * @param qnameAsString an expanded version of the QName of this object |
| */ |
| public MetaDataEntry(String className, String qnameAsString) { |
| this.className = className; |
| this.qnameAsString = qnameAsString; |
| } |
| |
| /** |
| * Constructor |
| * @param className name of the object class |
| * @param qnameAsString an expanded version of the QName of this object |
| * @param extraName an additional name associated withe the object |
| */ |
| public MetaDataEntry(String className, String qnameAsString, String extraName) { |
| this.className = className; |
| this.qnameAsString = qnameAsString; |
| this.extraName = extraName; |
| } |
| |
| /** |
| * Constructor |
| * @param className name of the object class |
| * @param qnameAsString an expanded version of the QName of this object |
| * @param children an ArrayList containing MetaDataEntries for owned objects |
| */ |
| public MetaDataEntry(String className, String qnameAsString, ArrayList children) { |
| this.className = className; |
| this.qnameAsString = qnameAsString; |
| this.children = children; |
| } |
| |
| |
| /** |
| * Get the class name |
| * |
| * @return the class name string |
| */ |
| public String getClassName() { |
| return className; |
| } |
| |
| |
| /** |
| * Set the class name |
| * |
| * @param c the class name string |
| */ |
| public void setClassName(String c) { |
| className = c; |
| } |
| |
| |
| /** |
| * Get the QName |
| * |
| * @return the QName based on the qnameAsString value |
| */ |
| public QName getQName() { |
| if (qnameAsString != null) { |
| return QName.valueOf(qnameAsString); |
| } else { |
| return null; |
| } |
| } |
| |
| |
| /** |
| * Set the QName |
| * |
| * @param q the QName |
| */ |
| public void setQName(QName q) { |
| if (q != null) { |
| qnameAsString = q.toString(); |
| } else { |
| qnameAsString = null; |
| } |
| } |
| |
| /** |
| * Set the QName |
| * |
| * @param n the QName as a string |
| */ |
| public void setQName(String n) { |
| qnameAsString = n; |
| } |
| |
| |
| /** |
| * Get the QName as a string |
| * |
| * @return the QName as a string |
| */ |
| public String getQNameAsString() { |
| return qnameAsString; |
| } |
| |
| |
| /** |
| * This is a convenience method. |
| * Returns the string that is used as a name. |
| * |
| * @return the name |
| */ |
| public String getName() { |
| return qnameAsString; |
| } |
| |
| |
| /** |
| * Get the additional name associated with the object |
| * |
| * @return the additional name string |
| */ |
| public String getExtraName() { |
| return extraName; |
| } |
| |
| |
| /** |
| * Set the additional name associated with the object |
| * |
| * @param e the extra name string |
| */ |
| public void setExtraName(String e) { |
| extraName = e; |
| } |
| |
| |
| /** |
| * Indicates whether the list is empty or not |
| * |
| * @return false for a non-empty list, true for an empty list |
| */ |
| public boolean isListEmpty() { |
| return children == null || children.isEmpty(); |
| } |
| |
| |
| /** |
| * Get the list |
| * |
| * @return the array list |
| */ |
| public ArrayList getChildren() { |
| return children; |
| } |
| |
| |
| /** |
| * Set the list |
| * |
| * @param L the ArrayList of MetaDataEntry objects |
| */ |
| public void setChildren(ArrayList L) { |
| children = L; |
| } |
| |
| /** |
| * Add to the list |
| * |
| * @param e the MetaDataEntry object to add to the list |
| */ |
| public void addToList(MetaDataEntry e) { |
| if (children == null) { |
| children = new ArrayList(); |
| } |
| children.add(e); |
| } |
| |
| /** |
| * Remove the list |
| */ |
| public void removeList() { |
| children = null; |
| } |
| |
| |
| // message strings |
| private static final String UNSUPPORTED_SUID = "Serialization version ID is not supported."; |
| private static final String UNSUPPORTED_REVID = "Revision ID is not supported."; |
| |
| |
| /** |
| * Save the contents of this object |
| * |
| * @param out The stream to write the object contents to |
| * @throws IOException |
| */ |
| public void writeExternal(ObjectOutput o) throws IOException { |
| SafeObjectOutputStream out = SafeObjectOutputStream.install(o); |
| // write out contents of this object |
| |
| //--------------------------------------------------------- |
| // in order to handle future changes to the message |
| // context definition, be sure to maintain the |
| // object level identifiers |
| //--------------------------------------------------------- |
| // serialization version ID |
| out.writeLong(serialVersionUID); |
| |
| // revision ID |
| out.writeInt(revisionID); |
| |
| //--------------------------------------------------------- |
| // various simple fields |
| //--------------------------------------------------------- |
| out.writeObject(className); |
| out.writeObject(qnameAsString); |
| out.writeObject(extraName); |
| out.writeList(children); |
| |
| } |
| |
| |
| /** |
| * Restore the contents of the object that was |
| * previously saved. |
| * <p/> |
| * NOTE: The field data must read back in the same order and type |
| * as it was written. |
| * |
| * @param in The stream to read the object contents from |
| * @throws IOException |
| * @throws ClassNotFoundException |
| */ |
| public void readExternal(ObjectInput inObject) throws IOException, ClassNotFoundException { |
| SafeObjectInputStream in = SafeObjectInputStream.install(inObject); |
| |
| // serialization version ID |
| long suid = in.readLong(); |
| |
| // revision ID |
| int revID = in.readInt(); |
| |
| // make sure the object data is in a version we can handle |
| if (suid != serialVersionUID) { |
| throw new ClassNotFoundException(UNSUPPORTED_SUID); |
| } |
| |
| // make sure the object data is in a revision level we can handle |
| if (revID != REVISION_2) { |
| throw new ClassNotFoundException(UNSUPPORTED_REVID); |
| } |
| |
| //--------------------------------------------------------- |
| // various simple fields |
| //--------------------------------------------------------- |
| |
| className = (String) in.readObject(); |
| qnameAsString = (String) in.readObject(); |
| extraName = (String) in.readObject(); |
| children = in.readArrayList(); |
| |
| } |
| |
| } |