com.sun.jdo.api.persistence.model.jdo.impl.PersistenceElementCollection Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of payara-client Show documentation
Show all versions of payara-client Show documentation
Appclient for Payara Server
The newest version!
/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
* Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
*
* The contents of this file are subject to the terms of either the GNU
* General Public License Version 2 only ("GPL") or the Common Development
* and Distribution License("CDDL") (collectively, the "License"). You
* may not use this file except in compliance with the License. You can
* obtain a copy of the License at
* https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
* or packager/legal/LICENSE.txt. See the License for the specific
* language governing permissions and limitations under the License.
*
* When distributing the software, include this License Header Notice in each
* file and include the License file at packager/legal/LICENSE.txt.
*
* GPL Classpath Exception:
* Oracle designates this particular file as subject to the "Classpath"
* exception as provided by Oracle in the GPL Version 2 section of the License
* file that accompanied this code.
*
* Modifications:
* If applicable, add the following below the License Header, with the fields
* enclosed by brackets [] replaced by your own identifying information:
* "Portions Copyright [year] [name of copyright owner]"
*
* Contributor(s):
* If you wish your version of this file to be governed by only the CDDL or
* only the GPL Version 2, indicate your decision by adding "[Contributor]
* elects to include this software in this distribution under the [CDDL or GPL
* Version 2] license." If you don't indicate a single choice of license, a
* recipient has the option to distribute your version of this file under
* either the CDDL, the GPL Version 2 or to extend the choice of license to
* its licensees as provided above. However, if you add GPL Version 2 code
* and therefore, elected the GPL Version 2 license, then the option applies
* only if the new code is made subject to such option by the copyright
* holder.
*/
/*
* PersistenceElementCollection.java
*
* Created on March 6, 2000, 2:20 PM
*/
package com.sun.jdo.api.persistence.model.jdo.impl;
import java.util.*;
import java.beans.PropertyVetoException;
import com.sun.jdo.api.persistence.model.ModelException;
import com.sun.jdo.api.persistence.model.ModelVetoException;
import com.sun.jdo.api.persistence.model.jdo.*;
/**
*
* @author raccah
* @version %I%
*/
public class PersistenceElementCollection
{
/** Owner of the collection. */
private PersistenceElementImpl _owner;
/** Elements of the collection. */
private PersistenceElement[] _elements;
/** Array template for typed returns */
private Object[] _template;
/** Property name. */
private String _propertyName;
/** Create new PersistenceElementCollection with no owner, property, or
* template. This constructor should only be used for cloning and
* archiving.
*/
public PersistenceElementCollection ()
{
this(null, null, null);
}
/** Creates new PersistenceElementCollection */
public PersistenceElementCollection (PersistenceElementImpl owner,
String propertyName, Object[] template)
{
_owner = owner;
_propertyName = propertyName;
_template = template;
}
/** Change the set of elements.
* @param elements the new elements
* @param action {@link com.sun.jdo.api.persistence.model.jdo.PersistenceElement.Impl#ADD},
* {@link com.sun.jdo.api.persistence.model.jdo.PersistenceElement.Impl#REMOVE}, or
* {@link com.sun.jdo.api.persistence.model.jdo.PersistenceElement.Impl#SET}
* @exception ModelException if impossible
*/
public void changeElements (PersistenceElement[] elements, int action)
throws ModelException
{
changeElements(Arrays.asList(elements), action);
}
/** Change the set of elements.
* @param elements the new elements
* @param action {@link com.sun.jdo.api.persistence.model.jdo.PersistenceElement.Impl#ADD},
* {@link com.sun.jdo.api.persistence.model.jdo.PersistenceElement.Impl#REMOVE}, or
* {@link com.sun.jdo.api.persistence.model.jdo.PersistenceElement.Impl#SET}
* @exception ModelException if impossible
*/
public void changeElements (List elements, int action)
throws ModelException
{
boolean changed = false;
try
{
PersistenceElement[] oldElements = getElements();
int oldLength = (oldElements == null) ? 0 : oldElements.length;
int newLength = (elements == null) ? 0 : elements.size();
List list = null;
switch (action)
{
case PersistenceElement.Impl.SET:
list = elements;
changed = true;
break;
case PersistenceElement.Impl.ADD:
if (newLength > 0)
{
list = ((oldLength == 0) ? new ArrayList() :
new ArrayList(Arrays.asList(oldElements)));
list.addAll(elements);
changed = true;
}
break;
case PersistenceElement.Impl.REMOVE:
if ((newLength > 0) && (oldLength > 0))
{
list = new ArrayList(Arrays.asList(oldElements));
list.removeAll(elements);
changed = true;
}
break;
}
if (changed)
{
try
{
_owner.fireVetoableChange(_propertyName, null, null);
_elements = (PersistenceElement[])list.toArray(_template);
}
catch (PropertyVetoException e)
{
throw new ModelVetoException(e);
}
}
}
finally
{
if (changed)
_owner.firePropertyChange(_propertyName, null, null);
}
}
/** Returns the collection of elements maintained by this holder in the form
* of an array.
* @return the elements maintained by this collection
*/
public PersistenceElement[] getElements () { return _elements; }
/** Returns the element with the supplied name from the collection of
* elements maintained by this collection.
* @param name the name to match
* @return the element with the supplied name, null
if none
* exists
*/
public PersistenceElement getElement (String name)
{
PersistenceElement[] elements = getElements();
int i, count = ((elements != null) ? elements.length : 0);
for (i = 0; i < count; i++)
{
PersistenceElement element = elements[i];
if (name.equals(element.getName()))
return element;
}
return null;
}
//=============== extra methods needed for xml archiver ==============
/** Returns the owner of this collection. This method should only
* be used internally and for cloning and archiving.
* @return the owner of this collection
*/
public PersistenceElementImpl getOwner () { return _owner; }
/** Set the owner of this collection to the supplied implementation.
* This method should only be used internally and for cloning and
* archiving.
* @param owner the owner of this collection
*/
public void setOwner (PersistenceElementImpl owner)
{
_owner = owner;
}
/** Returns the template for the array of this collection. This method
* should only be used internally and for cloning and archiving.
* @return the typed template of this collection
*/
public Object[] getTemplate () { return _template; }
/** Set the template for the array of this collection to the supplied
* array. This template is used so the array returned by getElements is
* properly typed. This method should only be used internally and
* for cloning and archiving.
* @param template the typed template of this collection
*/
public void setTemplate (Object[] template) { _template = template; }
/** Returns the property name of this collection. This method
* should only be used internally and for cloning and archiving.
* @return the property name for this collection
*/
public String getPropertyName () { return _propertyName; }
/** Set the property name of this collection to the supplied name.
* This name is used to generate the correct property change event on
* changes to the collection. This method should only be used
* internally and for cloning and archiving.
* @param propertyName the property name for this collection
*/
public void setPropertyName (String propertyName)
{
_propertyName = propertyName;
}
/** Set the collection of elements maintained by this holder to the
* supplied array. This method should only be used internally and for
* cloning and archiving.
* @param elements the collection of elements maintained by this holder
*/
public void setElements (PersistenceElement[] elements)
{
_elements = elements;
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy