Return-Path: Delivered-To: apmail-jakarta-commons-dev-archive@apache.org Received: (qmail 7372 invoked from network); 10 Mar 2002 23:11:20 -0000 Received: from unknown (HELO nagoya.betaversion.org) (192.18.49.131) by daedalus.apache.org with SMTP; 10 Mar 2002 23:11:20 -0000 Received: (qmail 19810 invoked by uid 97); 10 Mar 2002 23:11:22 -0000 Delivered-To: qmlist-jakarta-archive-commons-dev@jakarta.apache.org Received: (qmail 19800 invoked by uid 97); 10 Mar 2002 23:11:21 -0000 Mailing-List: contact commons-dev-help@jakarta.apache.org; run by ezmlm Precedence: bulk List-Unsubscribe: List-Subscribe: List-Help: List-Post: List-Id: "Jakarta Commons Developers List" Reply-To: "Jakarta Commons Developers List" Delivered-To: mailing list commons-dev@jakarta.apache.org Received: (qmail 22987 invoked by uid 97); 10 Mar 2002 18:37:22 -0000 Date: 10 Mar 2002 18:37:17 -0000 Message-ID: <20020310183717.61723.qmail@icarus.apache.org> From: baliuka@apache.org To: jakarta-commons-sandbox-cvs@apache.org Subject: cvs commit: jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/persistence/impl NotNull.java MetaClassImpl.java PersistentProxy.java X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N baliuka 02/03/10 10:37:17 Modified: simplestore/src/java/org/apache/commons/simplestore/persistence MetaClass.java simplestore/src/java/org/apache/commons/simplestore/persistence/impl MetaClassImpl.java PersistentProxy.java Added: simplestore/src/java/org/apache/commons/simplestore/persistence ValidationException.java Validator.java simplestore/src/java/org/apache/commons/simplestore/persistence/impl NotNull.java Log: Added validation Revision Changes Path 1.6 +3 -1 jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/persistence/MetaClass.java Index: MetaClass.java =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/persistence/MetaClass.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- MetaClass.java 28 Feb 2002 18:28:41 -0000 1.5 +++ MetaClass.java 10 Mar 2002 18:37:17 -0000 1.6 @@ -61,7 +61,7 @@ * *@author Juozas Baliuka * baliuka@mwm.lt - *@version $Id: MetaClass.java,v 1.5 2002/02/28 18:28:41 baliuka Exp $ + *@version $Id: MetaClass.java,v 1.6 2002/03/10 18:37:17 baliuka Exp $ */ public interface MetaClass { @@ -130,6 +130,8 @@ public Persistent newInstance(Object oid, boolean create,java.lang.ClassLoader cl); public void setContext( Context context ); + + public Validator getValidator(int index); } 1.1 jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/persistence/ValidationException.java Index: ValidationException.java =================================================================== /* * The Apache Software License, Version 1.1 * * * Copyright (c) 2001 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "Apache Cocoon" and "Apache Software Foundation" must * not be used to endorse or promote products derived from this * software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache", * nor may "Apache" appear in their name, without prior written * permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . */ package org.apache.commons.simplestore.persistence; /** *@author Juozas Baliuka * baliuka@mwm.lt *@version $Id: ValidationException.java,v 1.1 2002/03/10 18:37:17 baliuka Exp $ */ public class ValidationException extends java.lang.RuntimeException { /** Holds value of property object. */ private Object object; /** Holds value of property method. */ private java.lang.reflect.Method method; /** Holds value of property value. */ private Object value; /** Creates a new instance of ValidationException */ public ValidationException() { } /** Creates a new instance of ValidationException */ public ValidationException(String msg) { super(msg); } /** Creates a new instance of ValidationException */ public ValidationException(Object object,java.lang.reflect.Method method,Object value,String message ) { super(message); this.object = object; this.method = method; this.value = value; } /** Getter for property object. * @return Value of property object. */ public Object getObject() { return this.object; } /** Getter for property method. * @return Value of property method. */ public java.lang.reflect.Method getMethod() { return this.method; } /** Getter for property value. * @return Value of property value. */ public Object getValue() { return this.value; } } 1.1 jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/persistence/Validator.java Index: Validator.java =================================================================== /* * The Apache Software License, Version 1.1 * * * Copyright (c) 2001 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "Apache Cocoon" and "Apache Software Foundation" must * not be used to endorse or promote products derived from this * software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache", * nor may "Apache" appear in their name, without prior written * permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . */ package org.apache.commons.simplestore.persistence; /** *@author Juozas Baliuka * baliuka@mwm.lt *@version $Id: Validator.java,v 1.1 2002/03/10 18:37:17 baliuka Exp $ */ public interface Validator { public boolean isValid(Object value); } 1.7 +17 -5 jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/persistence/impl/MetaClassImpl.java Index: MetaClassImpl.java =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/persistence/impl/MetaClassImpl.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- MetaClassImpl.java 10 Mar 2002 12:32:30 -0000 1.6 +++ MetaClassImpl.java 10 Mar 2002 18:37:17 -0000 1.7 @@ -65,7 +65,7 @@ * *@author Juozas Baliuka * baliuka@mwm.lt - *@version $Id: MetaClassImpl.java,v 1.6 2002/03/10 12:32:30 baliuka Exp $ + *@version $Id: MetaClassImpl.java,v 1.7 2002/03/10 18:37:17 baliuka Exp $ */ public class MetaClassImpl implements MetaClass, org.apache.commons.simplestore.tools.Constants { @@ -118,6 +118,8 @@ /** Holds value of property referencedClass. */ private Class refClass; + private Validator validator; + /** Getter for property id. * @return Value of property id. */ @@ -182,14 +184,15 @@ /** Getter for property validator. * @return Value of property validator. */ - public Object getValidator() { - return null; + public Validator getValidator() { + return validator; } /** Setter for property validator. * @param validator New value of property validator. */ - public void setValidator(Object validator) { + public void setValidator( Validator validator ) { + this.validator = validator; } } @@ -488,6 +491,7 @@ MetaClassImpl currentClass ; Field currentField; + Validator currentValidator; StorageHandlerImpl( ){ @@ -523,7 +527,12 @@ } public void start_validator(final Attributes meta) throws SAXException { - + try{ + currentValidator = (Validator)Class.forName(meta.getValue("id")).newInstance(); + currentField.setValidator(currentValidator); + }catch(Exception e){ + rethrow(e); + } } public void end_validator() throws SAXException { @@ -593,5 +602,8 @@ ), new StorageHandlerImpl()); } + public Validator getValidator(int index) { + return getField(descriptors[ index ].getName()).getValidator(); + } } 1.12 +44 -25 jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/persistence/impl/PersistentProxy.java Index: PersistentProxy.java =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/persistence/impl/PersistentProxy.java,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- PersistentProxy.java 10 Mar 2002 12:32:30 -0000 1.11 +++ PersistentProxy.java 10 Mar 2002 18:37:17 -0000 1.12 @@ -58,6 +58,8 @@ import org.apache.commons.simplestore.persistence.MetaObject; import org.apache.commons.simplestore.persistence.Persistent; import org.apache.commons.simplestore.persistence.Context; +import org.apache.commons.simplestore.persistence.Validator; +import org.apache.commons.simplestore.persistence.ValidationException; import org.apache.commons.simplestore.persistence.TypeConverter; import org.apache.commons.simplestore.tools.*; @@ -75,7 +77,7 @@ * baliuka@mwm.lt *@author Gerhard Froehlich * g-froehlich@gmx.de - *@version $Id: PersistentProxy.java,v 1.11 2002/03/10 12:32:30 baliuka Exp $ + *@version $Id: PersistentProxy.java,v 1.12 2002/03/10 18:37:17 baliuka Exp $ */ public class PersistentProxy implements MetaObject, org.apache.commons.simplestore.tools.Constants , @@ -88,27 +90,38 @@ private static Method TO_STRING; private static Method GET_OID; private static Method GET_META_OBJECT; + static final private int DIRTY = 8; + static final private int DELETED = 4; + static final private int NEW_CREATED = 2; + static final private int CLEAN = 1; private Object m_props[] ; private Object m_oid = null; - private boolean m_dirty = false; - private boolean m_deleted = false; - private boolean m_newCreated = false; - private boolean m_clean = false; + // private boolean m_dirty = false; + // private boolean m_deleted = false; + // private boolean m_newCreated = false; + // private boolean m_clean = false; + private int state = 0; private TypeConverter m_typeConverter = new DefaultTypeConverter(); private Persistent m_object; private Class m_clazz; private MetaClass m_metaClass; private Context m_context; - + private void setState(boolean flag,int state){ + this.state = flag ? this.state | state : this.state & ~state; + } + private boolean getState( int state ){ + return ( this.state & state ) != 0; + } public PersistentProxy(Class clazz, Object oid, boolean newCreated, Context context) { m_oid = oid; - m_newCreated = newCreated; + setState( newCreated, NEW_CREATED ); + m_context = context; m_clazz = clazz; m_metaClass = context.getMetaClass(clazz); @@ -138,9 +151,9 @@ handler.m_object = p; if ( newCreated ) { - handler.m_clean = true; + handler.setState(true,CLEAN); context.getTransactionManager().getTransaction().add( handler ); - handler.m_clean = false; + handler.setState(false,CLEAN); } return p; @@ -152,16 +165,16 @@ public void setDirty(boolean dirty) { - m_dirty = dirty; + setState(dirty,DIRTY); } public boolean isDeleted() { - return m_deleted; + return getState( DELETED ); } public boolean isNew() { - return m_newCreated; + return getState( NEW_CREATED ); } public MetaObject getMetaObject() { @@ -198,7 +211,7 @@ } public boolean isDirty() { - return m_dirty; + return getState(DIRTY); } public Persistent getObject() { @@ -290,27 +303,35 @@ public String toString(){ return "OID=" + m_oid + - ";dirty=" + m_dirty + - ";newCreated=" + m_newCreated + - ";deleted=" + m_deleted + - ";clean=" + m_clean; + ";dirty=" + isDirty() + + ";newCreated=" + isNew() + + ";deleted=" + isDeleted() + + ";clean=" + isClean(); } public Object handleProperty(Object obj, Method method, Object[] obj2) throws Throwable { - if( m_clean || m_deleted ) + if( isClean() || isDeleted() ) throw new IllegalStateException("Object properties invalidated"); int index = m_metaClass.getPropertyIndex( method ); if ( method.getReturnType() == Void.TYPE && obj2.length == 1 ) { + + Validator validator = m_metaClass.getValidator(index); + + if( validator != null && !validator.isValid(obj2[0]) ){ + throw new ValidationException(obj,method,obj2[0],validator.toString()); + } + + if( obj2[0] != null && m_metaClass.isReference(method) ){ setProperty(index, ((Persistent)obj2[0]).getOID()); }else{ setProperty(index, obj2[0]); } - m_dirty = true; + setState(true,DIRTY); return null; } else if( obj2.length == 0 ){ Object value = getProperty(index); @@ -333,7 +354,7 @@ public void remove() { m_context.getTransactionManager().getTransaction().add(this); - m_deleted = true; + setState( true, DELETED ); } public Object clone() throws CloneNotSupportedException { @@ -348,14 +369,12 @@ m_oid = mo.getOID(); m_object = mo.getObject(); m_clazz = mo.getPersistentClass(); - m_dirty = mo.isDirty(); - m_deleted = mo.isDeleted(); - m_newCreated = mo.isNew(); - m_clean = mo.isClean(); + state = ((PersistentProxy)mo).state; + } public boolean isClean() { - return m_clean; + return getState(CLEAN); } public void handle( java.lang.reflect.Method m, java.lang.Throwable e ){ System.out.println("Error in " + m.getName()); 1.1 jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/persistence/impl/NotNull.java Index: NotNull.java =================================================================== /* * The Apache Software License, Version 1.1 * * * Copyright (c) 2001 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "Apache Cocoon" and "Apache Software Foundation" must * not be used to endorse or promote products derived from this * software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache", * nor may "Apache" appear in their name, without prior written * permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . */ package org.apache.commons.simplestore.persistence.impl; import org.apache.commons.simplestore.persistence.Validator; /** *@author Juozas Baliuka * baliuka@mwm.lt *@version $Id: NotNull.java,v 1.1 2002/03/10 18:37:17 baliuka Exp $ */ public class NotNull implements Validator { /** Creates a new instance of NotNull */ public NotNull() { } public boolean isValid(Object value) { return value != null; } } -- To unsubscribe, e-mail: For additional commands, e-mail: