Added: 
incubator/openjpa/trunk/openjpa-lib/src/test/java/org/apache/openjpa/lib/util/testlocalizer/LocalizerTestHelper.java
URL: 
http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-lib/src/test/java/org/apache/openjpa/lib/util/testlocalizer/LocalizerTestHelper.java?rev=417860&view=auto
==============================================================================
--- 
incubator/openjpa/trunk/openjpa-lib/src/test/java/org/apache/openjpa/lib/util/testlocalizer/LocalizerTestHelper.java
 (added)
+++ 
incubator/openjpa/trunk/openjpa-lib/src/test/java/org/apache/openjpa/lib/util/testlocalizer/LocalizerTestHelper.java
 Wed Jun 28 12:46:13 2006
@@ -0,0 +1,28 @@
+/*
+ * Copyright 2006 The Apache Software Foundation.
+ *
+ * Licensed 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.openjpa.lib.util.testlocalizer;
+
+
+/**
+ *  <p>Helper class used so that the localizer.properties file in this package
+ *  can be accessed.  The properties cannot be in the same package (serp.util)
+ *  as the main tester class because other utilities in the source line might
+ *  eventually want to use a localizer.properties file for that package.</p>
+ *
+ *  @author Abe White
+ */
+public class LocalizerTestHelper {
+}

Propchange: 
incubator/openjpa/trunk/openjpa-lib/src/test/java/org/apache/openjpa/lib/util/testlocalizer/LocalizerTestHelper.java
------------------------------------------------------------------------------
    svn:executable = *

Added: 
incubator/openjpa/trunk/openjpa-lib/src/test/resources/localizer.properties
URL: 
http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-lib/src/test/resources/localizer.properties?rev=417860&view=auto
==============================================================================
--- incubator/openjpa/trunk/openjpa-lib/src/test/resources/localizer.properties 
(added)
+++ incubator/openjpa/trunk/openjpa-lib/src/test/resources/localizer.properties 
Wed Jun 28 12:46:13 2006
@@ -0,0 +1 @@
+test.systemlocal               systemvalue1

Propchange: 
incubator/openjpa/trunk/openjpa-lib/src/test/resources/localizer.properties
------------------------------------------------------------------------------
    svn:executable = *

Added: 
incubator/openjpa/trunk/openjpa-lib/src/test/resources/org/apache/openjpa/lib/conf/test/localizer.properties
URL: 
http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-lib/src/test/resources/org/apache/openjpa/lib/conf/test/localizer.properties?rev=417860&view=auto
==============================================================================
--- 
incubator/openjpa/trunk/openjpa-lib/src/test/resources/org/apache/openjpa/lib/conf/test/localizer.properties
 (added)
+++ 
incubator/openjpa/trunk/openjpa-lib/src/test/resources/org/apache/openjpa/lib/conf/test/localizer.properties
 Wed Jun 28 12:46:13 2006
@@ -0,0 +1,12 @@
+testKey-name: name
+testKey-desc: desc
+testKey-type: General
+sysKey-name: name
+sysKey-desc: desc
+sysKey-type: General
+pluginKey-name: name
+pluginKey-desc: desc
+pluginKey-type: General
+objectKey-name: name
+objectKey-desc: desc
+objectKey-type: General

Propchange: 
incubator/openjpa/trunk/openjpa-lib/src/test/resources/org/apache/openjpa/lib/conf/test/localizer.properties
------------------------------------------------------------------------------
    svn:executable = *

Added: 
incubator/openjpa/trunk/openjpa-lib/src/test/resources/org/apache/openjpa/lib/util/testlocalizer/localizer.properties
URL: 
http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-lib/src/test/resources/org/apache/openjpa/lib/util/testlocalizer/localizer.properties?rev=417860&view=auto
==============================================================================
--- 
incubator/openjpa/trunk/openjpa-lib/src/test/resources/org/apache/openjpa/lib/util/testlocalizer/localizer.properties
 (added)
+++ 
incubator/openjpa/trunk/openjpa-lib/src/test/resources/org/apache/openjpa/lib/util/testlocalizer/localizer.properties
 Wed Jun 28 12:46:13 2006
@@ -0,0 +1,2 @@
+test.local1            value1
+test.local2            value2 {0} sep {1}

Propchange: 
incubator/openjpa/trunk/openjpa-lib/src/test/resources/org/apache/openjpa/lib/util/testlocalizer/localizer.properties
------------------------------------------------------------------------------
    svn:executable = *

Added: 
incubator/openjpa/trunk/openjpa-lib/src/test/resources/org/apache/openjpa/lib/util/testlocalizer/localizer_de_DE.properties
URL: 
http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-lib/src/test/resources/org/apache/openjpa/lib/util/testlocalizer/localizer_de_DE.properties?rev=417860&view=auto
==============================================================================
--- 
incubator/openjpa/trunk/openjpa-lib/src/test/resources/org/apache/openjpa/lib/util/testlocalizer/localizer_de_DE.properties
 (added)
+++ 
incubator/openjpa/trunk/openjpa-lib/src/test/resources/org/apache/openjpa/lib/util/testlocalizer/localizer_de_DE.properties
 Wed Jun 28 12:46:13 2006
@@ -0,0 +1,2 @@
+test.local1            value1_de
+test.local2            value2_de {0} sep {1}

Propchange: 
incubator/openjpa/trunk/openjpa-lib/src/test/resources/org/apache/openjpa/lib/util/testlocalizer/localizer_de_DE.properties
------------------------------------------------------------------------------
    svn:executable = *

Added: incubator/openjpa/trunk/pom.xml
URL: 
http://svn.apache.org/viewvc/incubator/openjpa/trunk/pom.xml?rev=417860&view=auto
==============================================================================
--- incubator/openjpa/trunk/pom.xml (added)
+++ incubator/openjpa/trunk/pom.xml Wed Jun 28 12:46:13 2006
@@ -0,0 +1,179 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>
+               <modelVersion>4.0.0</modelVersion>
+       <groupId>org.apache.openjpa</groupId>
+       <artifactId>openjpa</artifactId>
+       <packaging>pom</packaging>
+
+       <name>OpenJPA</name>
+       <description>OpenJPA</description>
+       <version>0.0.1</version>
+       <url>http://incubator.apache.org/projects/openjpa</url>
+       <issueManagement>
+               <system>jira</system>
+               <url>http://issues.apache.org/jira/browse/OPENJPA</url>
+       </issueManagement>
+       <inceptionYear>2006</inceptionYear>
+       <mailingLists>
+               <mailingList>
+                       <name>OpenJPA Developer List</name>
+                       <subscribe>[EMAIL PROTECTED]</subscribe>
+                       <unsubscribe>[EMAIL PROTECTED]</unsubscribe>
+                       <post>open-jpa-dev@incubator.apache.org</post>
+                       
<archive>http://mail-archives.apache.org/mod_mbox/incubator-open-jpa-dev/</archive>
+               </mailingList>
+               <mailingList>
+                       <name>OpenJPA Commits List</name>
+                       <subscribe>[EMAIL PROTECTED]</subscribe>
+                       <unsubscribe>[EMAIL PROTECTED]</unsubscribe>
+                       <post>open-jpa-commits@incubator.apache.org</post>
+                       
<archive>http://mail-archives.apache.org/mod_mbox/incubator-open-jpa-commits/</archive>
+               </mailingList>
+       </mailingLists>
+       <developers>
+               <developer>
+                       <name>Patrick Linskey</name>
+                       <id>plinskey</id>
+                       <organization>BEA Systems, Inc.</organization>
+                       <email>[EMAIL PROTECTED]</email>
+               </developer>
+               <developer>
+                       <name>Abe White</name>
+                       <id>awhite</id>
+                       <organization>BEA Systems, Inc.</organization>
+                       <email>[EMAIL PROTECTED]</email>
+               </developer>
+               <developer>
+                       <name>Steve Kim</name>
+                       <id>stkim</id>
+                       <organization>BEA Systems, Inc.</organization>
+                       <email>[EMAIL PROTECTED]</email>
+               </developer>
+               <developer>
+                       <name>Marc Prud'hommeaux</name>
+                       <id>mprudhom</id>
+                       <organization>BEA Systems, Inc.</organization>
+                       <email>[EMAIL PROTECTED]</email>
+               </developer>
+       </developers>
+       <licenses>
+               <license>
+                       <name>Apache Software License 2.0</name>
+                       
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
+                       <distribution>repo</distribution>
+               </license>
+       </licenses>
+       <organization>
+               <name>Apache Software Foundation</name>
+               <url>http://www.apache.org</url>
+       </organization>
+       <scm>
+               
<connection>scm:svn:http://svn.apache.org/repos/asf/incubator/openjpa/${pom.artifactId}</connection>
+               
<developerConnection>scm:svn:https://svn.apache.org/repos/asf/incubator/openjpa/${pom.artifactId}</developerConnection>
+               
<url>https://svn.apache.org/repos/asf/incubator/openjpa/${pom.artifactId}</url>
+       </scm>
+<modules>
+       
+               <module>openjpa-lib</module>
+               <module>serp</module>
+               
+       </modules>
+       <repositories>
+       
+               <repository>
+               <id>central</id>
+               <name>Maven Repository Switchboard</name>
+               <url>http://www.ibiblio.org/maven2</url>
+               </repository>
+               
+       
+               <repository>
+               <id>swami</id>
+               <name>Swami repository</name>
+               <url>http://m2.ngbw.org</url>
+               </repository>
+               
+       
+               <repository>
+               <id>java-net</id>
+               <name>dev.java.net repository</name>
+               
<url>https://maven-repository.dev.java.net/nonav/repository</url>
+               <layout>legacy</layout>
+               </repository>
+               
+       </repositories>
+       <dependencies>
+       
+               <dependency>
+               
+                       <groupId>junit</groupId>
+                       <artifactId>junit</artifactId>
+                       <version>3.8.1</version>
+                       <scope>compile</scope>
+                       
+               </dependency>
+               
+       </dependencies>
+       <build>
+       
+               <plugins>
+               
+                       <plugin>
+                       
+                               <groupId>org.apache.maven.plugins</groupId>
+                               <artifactId>maven-compiler-plugin</artifactId>
+                               <configuration>
+                               <source>1.5</source>
+                               <target>1.5</target>
+                               </configuration>
+                               
+                       </plugin>
+                       
+               </plugins>
+               
+       </build>
+       
+       <reporting>
+               <plugins>
+                       <plugin>
+                               <artifactId>maven-surefire-plugin</artifactId>
+                       </plugin>
+                       <plugin>
+                               <groupId>org.codehaus.mojo</groupId>
+                               <artifactId>taglist-maven-plugin</artifactId>
+                       </plugin>
+                       <plugin>
+                               <groupId>org.codehaus.mojo</groupId>
+                               <artifactId>jxr-maven-plugin</artifactId>
+                               <configuration>
+                                       <aggregate>true</aggregate>
+                               </configuration>
+                       </plugin>
+                       <plugin>
+                               <groupId>org.apache.maven.plugins</groupId>
+                               <artifactId>maven-javadoc-plugin</artifactId>
+                               <configuration>
+                                       <aggregate>true</aggregate>
+                                       <linksource>true</linksource>
+                                       <links>
+                                               
<link>http://java.sun.com/j2se/1.5.0/docs/api</link>
+                                               
<link>http://java.sun.com/javaee/5/docs/api</link>
+                                               
<link>http://jakarta.apache.org/commons/collections/api-release</link>
+                                       </links>
+                               </configuration>
+                       </plugin>
+               </plugins>
+       </reporting>
+       <distributionManagement>
+               <repository>
+                       <id>bea-internal</id>
+                       <name>Internal BEA OpenJPA test site</name>
+                       <url>file:///${user.home}/web/devel/openjpa/dist</url>
+               </repository>
+               <site>
+                       <id>bea-internal</id>
+                       <name>Internal BEA OpenJPA test sit</name>
+                       <url>file:///${user.home}/web/devel/openjpa/site</url>
+               </site>
+       </distributionManagement>
+
+</project>

Propchange: incubator/openjpa/trunk/pom.xml
------------------------------------------------------------------------------
    svn:executable = *

Added: incubator/openjpa/trunk/serp/pom.xml
URL: 
http://svn.apache.org/viewvc/incubator/openjpa/trunk/serp/pom.xml?rev=417860&view=auto
==============================================================================
--- incubator/openjpa/trunk/serp/pom.xml (added)
+++ incubator/openjpa/trunk/serp/pom.xml Wed Jun 28 12:46:13 2006
@@ -0,0 +1,41 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>
+               <modelVersion>4.0.0</modelVersion>
+       <groupId>org.apache.openjpa</groupId>
+       <artifactId>serp</artifactId>
+       <packaging>jar</packaging>
+
+       <name>Serp</name>
+       <description>Serp</description>
+       <url>http://incubator.apache.org/projects/openjpa</url>
+<parent>
+       
+               <groupId>org.apache.openjpa</groupId>
+               <artifactId>openjpa</artifactId>
+               <version>0.0.1</version>
+               
+       </parent>
+       <dependencies>
+       
+               
+       </dependencies>
+       <build>
+       
+               <plugins>
+               
+                       <plugin>
+                       
+                               <groupId>org.apache.maven.plugins</groupId>
+                               <artifactId>maven-compiler-plugin</artifactId>
+                               <configuration>
+                               <source>1.3</source>
+                               <target>1.3</target>
+                               </configuration>
+                               
+                       </plugin>
+                       
+               </plugins>
+               
+       </build>
+       
+
+</project>

Propchange: incubator/openjpa/trunk/serp/pom.xml
------------------------------------------------------------------------------
    svn:executable = *

Added: 
incubator/openjpa/trunk/serp/src/main/java/serp/bytecode/ArrayInstruction.java
URL: 
http://svn.apache.org/viewvc/incubator/openjpa/trunk/serp/src/main/java/serp/bytecode/ArrayInstruction.java?rev=417860&view=auto
==============================================================================
--- 
incubator/openjpa/trunk/serp/src/main/java/serp/bytecode/ArrayInstruction.java 
(added)
+++ 
incubator/openjpa/trunk/serp/src/main/java/serp/bytecode/ArrayInstruction.java 
Wed Jun 28 12:46:13 2006
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2006 The Apache Software Foundation.
+ *
+ * Licensed 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 serp.bytecode;
+
+import java.util.*;
+
+
+/**
+ *  <p>Any array load or store instruction.  This class has
+ *  no functionality beyond the [EMAIL PROTECTED] TypedInstruction} but is 
provided
+ *  so that users can easily identify array instructions in code if
+ *  need be.</p>
+ *
+ *  @author Abe White
+ */
+public abstract class ArrayInstruction extends TypedInstruction {
+    ArrayInstruction(Code owner) {
+        super(owner);
+    }
+
+    ArrayInstruction(Code owner, int opcode) {
+        super(owner, opcode);
+    }
+}

Propchange: 
incubator/openjpa/trunk/serp/src/main/java/serp/bytecode/ArrayInstruction.java
------------------------------------------------------------------------------
    svn:executable = *

Added: 
incubator/openjpa/trunk/serp/src/main/java/serp/bytecode/ArrayLoadInstruction.java
URL: 
http://svn.apache.org/viewvc/incubator/openjpa/trunk/serp/src/main/java/serp/bytecode/ArrayLoadInstruction.java?rev=417860&view=auto
==============================================================================
--- 
incubator/openjpa/trunk/serp/src/main/java/serp/bytecode/ArrayLoadInstruction.java
 (added)
+++ 
incubator/openjpa/trunk/serp/src/main/java/serp/bytecode/ArrayLoadInstruction.java
 Wed Jun 28 12:46:13 2006
@@ -0,0 +1,131 @@
+/*
+ * Copyright 2006 The Apache Software Foundation.
+ *
+ * Licensed 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 serp.bytecode;
+
+import serp.bytecode.visitor.*;
+
+
+/**
+ *  <p>Loads a value from an array onto the stack.</p>
+ *
+ *  @author Abe White
+ */
+public class ArrayLoadInstruction extends ArrayInstruction {
+    private static final Class[][] _mappings = new Class[][] {
+            { boolean.class, int.class },
+            { void.class, int.class },
+        };
+
+    ArrayLoadInstruction(Code owner) {
+        super(owner);
+    }
+
+    ArrayLoadInstruction(Code owner, int opcode) {
+        super(owner, opcode);
+    }
+
+    public int getLogicalStackChange() {
+        switch (getOpcode()) {
+        case Constants.NOP:
+            return 0;
+
+        default:
+            return -1;
+        }
+    }
+
+    public int getStackChange() {
+        switch (getOpcode()) {
+        case Constants.DALOAD:
+        case Constants.LALOAD:
+        case Constants.NOP:
+            return 0;
+
+        default:
+            return -1;
+        }
+    }
+
+    public String getTypeName() {
+        switch (getOpcode()) {
+        case Constants.IALOAD:
+            return int.class.getName();
+
+        case Constants.LALOAD:
+            return long.class.getName();
+
+        case Constants.FALOAD:
+            return float.class.getName();
+
+        case Constants.DALOAD:
+            return double.class.getName();
+
+        case Constants.AALOAD:
+            return Object.class.getName();
+
+        case Constants.BALOAD:
+            return byte.class.getName();
+
+        case Constants.CALOAD:
+            return char.class.getName();
+
+        case Constants.SALOAD:
+            return short.class.getName();
+
+        default:
+            return null;
+        }
+    }
+
+    public TypedInstruction setType(String type) {
+        type = mapType(type, _mappings, true);
+
+        if (type == null) {
+            return (TypedInstruction) setOpcode(Constants.NOP);
+        }
+
+        switch (type.charAt(0)) {
+        case 'i':
+            return (TypedInstruction) setOpcode(Constants.IALOAD);
+
+        case 'l':
+            return (TypedInstruction) setOpcode(Constants.LALOAD);
+
+        case 'f':
+            return (TypedInstruction) setOpcode(Constants.FALOAD);
+
+        case 'd':
+            return (TypedInstruction) setOpcode(Constants.DALOAD);
+
+        case 'b':
+            return (TypedInstruction) setOpcode(Constants.BALOAD);
+
+        case 'c':
+            return (TypedInstruction) setOpcode(Constants.CALOAD);
+
+        case 's':
+            return (TypedInstruction) setOpcode(Constants.SALOAD);
+
+        default:
+            return (TypedInstruction) setOpcode(Constants.AALOAD);
+        }
+    }
+
+    public void acceptVisit(BCVisitor visit) {
+        visit.enterArrayLoadInstruction(this);
+        visit.exitArrayLoadInstruction(this);
+    }
+}

Propchange: 
incubator/openjpa/trunk/serp/src/main/java/serp/bytecode/ArrayLoadInstruction.java
------------------------------------------------------------------------------
    svn:executable = *

Added: incubator/openjpa/trunk/serp/src/main/java/serp/bytecode/ArrayState.java
URL: 
http://svn.apache.org/viewvc/incubator/openjpa/trunk/serp/src/main/java/serp/bytecode/ArrayState.java?rev=417860&view=auto
==============================================================================
--- incubator/openjpa/trunk/serp/src/main/java/serp/bytecode/ArrayState.java 
(added)
+++ incubator/openjpa/trunk/serp/src/main/java/serp/bytecode/ArrayState.java 
Wed Jun 28 12:46:13 2006
@@ -0,0 +1,94 @@
+/*
+ * Copyright 2006 The Apache Software Foundation.
+ *
+ * Licensed 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 serp.bytecode;
+
+import java.util.*;
+
+
+/**
+ *  <p>State implementing the behavior of an array class.</p>
+ *
+ *  @author Abe White
+ */
+class ArrayState extends State {
+    private String _name = null;
+    private String _componentName = null;
+
+    public ArrayState(String name, String componentName) {
+        _name = name;
+        _componentName = componentName;
+    }
+
+    public int getMagic() {
+        return Constants.VALID_MAGIC;
+    }
+
+    public int getMajorVersion() {
+        return Constants.MAJOR_VERSION;
+    }
+
+    public int getMinorVersion() {
+        return Constants.MINOR_VERSION;
+    }
+
+    public int getAccessFlags() {
+        return Constants.ACCESS_PUBLIC | Constants.ACCESS_FINAL;
+    }
+
+    public int getIndex() {
+        return 0;
+    }
+
+    public int getSuperclassIndex() {
+        return 0;
+    }
+
+    public Collection getInterfacesHolder() {
+        return Collections.EMPTY_LIST;
+    }
+
+    public Collection getFieldsHolder() {
+        return Collections.EMPTY_LIST;
+    }
+
+    public Collection getMethodsHolder() {
+        return Collections.EMPTY_LIST;
+    }
+
+    public Collection getAttributesHolder() {
+        return Collections.EMPTY_LIST;
+    }
+
+    public String getName() {
+        return _name;
+    }
+
+    public String getSuperclassName() {
+        return Object.class.getName();
+    }
+
+    public String getComponentName() {
+        return _componentName;
+    }
+
+    public boolean isPrimitive() {
+        return false;
+    }
+
+    public boolean isArray() {
+        return true;
+    }
+}

Propchange: 
incubator/openjpa/trunk/serp/src/main/java/serp/bytecode/ArrayState.java
------------------------------------------------------------------------------
    svn:executable = *

Added: 
incubator/openjpa/trunk/serp/src/main/java/serp/bytecode/ArrayStoreInstruction.java
URL: 
http://svn.apache.org/viewvc/incubator/openjpa/trunk/serp/src/main/java/serp/bytecode/ArrayStoreInstruction.java?rev=417860&view=auto
==============================================================================
--- 
incubator/openjpa/trunk/serp/src/main/java/serp/bytecode/ArrayStoreInstruction.java
 (added)
+++ 
incubator/openjpa/trunk/serp/src/main/java/serp/bytecode/ArrayStoreInstruction.java
 Wed Jun 28 12:46:13 2006
@@ -0,0 +1,133 @@
+/*
+ * Copyright 2006 The Apache Software Foundation.
+ *
+ * Licensed 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 serp.bytecode;
+
+import serp.bytecode.visitor.*;
+
+
+/**
+ *  <p>Store a value from the stack into an array.</p>
+ *
+ *  @author Abe White
+ */
+public class ArrayStoreInstruction extends ArrayInstruction {
+    private static final Class[][] _mappings = new Class[][] {
+            { boolean.class, int.class },
+            { void.class, int.class },
+        };
+
+    ArrayStoreInstruction(Code owner) {
+        super(owner);
+    }
+
+    ArrayStoreInstruction(Code owner, int opcode) {
+        super(owner, opcode);
+    }
+
+    public int getLogicalStackChange() {
+        switch (getOpcode()) {
+        case Constants.NOP:
+            return 0;
+
+        default:
+            return -3;
+        }
+    }
+
+    public int getStackChange() {
+        switch (getOpcode()) {
+        case Constants.DASTORE:
+        case Constants.LASTORE:
+            return -4;
+
+        case Constants.NOP:
+            return 0;
+
+        default:
+            return -3;
+        }
+    }
+
+    public String getTypeName() {
+        switch (getOpcode()) {
+        case Constants.IASTORE:
+            return int.class.getName();
+
+        case Constants.LASTORE:
+            return long.class.getName();
+
+        case Constants.FASTORE:
+            return float.class.getName();
+
+        case Constants.DASTORE:
+            return double.class.getName();
+
+        case Constants.AASTORE:
+            return Object.class.getName();
+
+        case Constants.BASTORE:
+            return byte.class.getName();
+
+        case Constants.CASTORE:
+            return char.class.getName();
+
+        case Constants.SASTORE:
+            return short.class.getName();
+
+        default:
+            return null;
+        }
+    }
+
+    public TypedInstruction setType(String type) {
+        type = mapType(type, _mappings, true);
+
+        if (type == null) {
+            return (TypedInstruction) setOpcode(Constants.NOP);
+        }
+
+        switch (type.charAt(0)) {
+        case 'i':
+            return (TypedInstruction) setOpcode(Constants.IASTORE);
+
+        case 'l':
+            return (TypedInstruction) setOpcode(Constants.LASTORE);
+
+        case 'f':
+            return (TypedInstruction) setOpcode(Constants.FASTORE);
+
+        case 'd':
+            return (TypedInstruction) setOpcode(Constants.DASTORE);
+
+        case 'b':
+            return (TypedInstruction) setOpcode(Constants.BASTORE);
+
+        case 'c':
+            return (TypedInstruction) setOpcode(Constants.CASTORE);
+
+        case 's':
+            return (TypedInstruction) setOpcode(Constants.SASTORE);
+
+        default:
+            return (TypedInstruction) setOpcode(Constants.AASTORE);
+        }
+    }
+
+    public void acceptVisit(BCVisitor visit) {
+        visit.enterArrayStoreInstruction(this);
+        visit.exitArrayStoreInstruction(this);
+    }
+}

Propchange: 
incubator/openjpa/trunk/serp/src/main/java/serp/bytecode/ArrayStoreInstruction.java
------------------------------------------------------------------------------
    svn:executable = *

Added: incubator/openjpa/trunk/serp/src/main/java/serp/bytecode/Attribute.java
URL: 
http://svn.apache.org/viewvc/incubator/openjpa/trunk/serp/src/main/java/serp/bytecode/Attribute.java?rev=417860&view=auto
==============================================================================
--- incubator/openjpa/trunk/serp/src/main/java/serp/bytecode/Attribute.java 
(added)
+++ incubator/openjpa/trunk/serp/src/main/java/serp/bytecode/Attribute.java Wed 
Jun 28 12:46:13 2006
@@ -0,0 +1,148 @@
+/*
+ * Copyright 2006 The Apache Software Foundation.
+ *
+ * Licensed 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 serp.bytecode;
+
+import serp.bytecode.lowlevel.*;
+
+import serp.bytecode.visitor.*;
+
+import serp.util.*;
+
+import java.io.*;
+
+import java.lang.reflect.*;
+
+import java.util.*;
+
+
+/**
+ *  <p>In bytecode attributes are used to represent anything that is not
+ *  part of the class structure.  This includes the source file name, code of
+ *  methods, the line number table, etc.  All attributes contain at a minimum
+ *  an immutable name that also determines the attribute's type.</p>
+ *
+ *  @author Abe White
+ */
+public abstract class Attribute extends Attributes implements VisitAcceptor {
+    private int _nameIndex = 0;
+    private Attributes _owner = null;
+
+    Attribute(int nameIndex, Attributes owner) {
+        _owner = owner;
+        _nameIndex = nameIndex;
+    }
+
+    /**
+     *  Create an attribute of the appropriate type based on the
+     *  the attribute name.
+     */
+    static Attribute create(String name, Attributes owner) {
+        int nameIndex = owner.getPool().findUTF8Entry(name, true);
+
+        try {
+            Class type = Class.forName("serp.bytecode." + name);
+            Constructor cons = type.getDeclaredConstructor(new Class[] {
+                        int.class, Attributes.class
+                    });
+
+            return (Attribute) cons.newInstance(new Object[] {
+                    Numbers.valueOf(nameIndex), owner
+                });
+        } catch (Throwable t) {
+            return new UnknownAttribute(nameIndex, owner);
+        }
+    }
+
+    /**
+     *  Return the [EMAIL PROTECTED] Attributes} that owns this attribute.  
The entity
+     *  might be a [EMAIL PROTECTED] BCClass}, [EMAIL PROTECTED] BCField}, 
[EMAIL PROTECTED] BCMethod}, or other
+     *  attribute.
+     */
+    public Attributes getOwner() {
+        return _owner;
+    }
+
+    /**
+     *  Return the index in the [EMAIL PROTECTED] ConstantPool} of the [EMAIL 
PROTECTED] UTF8Entry}
+     *  holding the name of this attribute.
+     */
+    public int getNameIndex() {
+        return _nameIndex;
+    }
+
+    /**
+      *  Return the name of this attribute.
+     */
+    public String getName() {
+        return ((UTF8Entry) getPool().getEntry(_nameIndex)).getValue();
+    }
+
+    public Project getProject() {
+        return _owner.getProject();
+    }
+
+    public ConstantPool getPool() {
+        return _owner.getPool();
+    }
+
+    public ClassLoader getClassLoader() {
+        return _owner.getClassLoader();
+    }
+
+    public boolean isValid() {
+        return _owner != null;
+    }
+
+    Collection getAttributesHolder() {
+        return Collections.EMPTY_LIST;
+    }
+
+    /**
+     *  Invalidate this attribute.
+     */
+    void invalidate() {
+        _owner = null;
+    }
+
+    /**
+     *  Return the length of the bytecode representation of this attribute
+     *  in bytes, excluding the name index.
+     */
+    int getLength() {
+        return 0;
+    }
+
+    /**
+     *  Copy the information from the given attribute to this one.  Does
+     *  nothing by default.
+     */
+    void read(Attribute other) {
+    }
+
+    /**
+     *  Read the attribute bytecode from the given stream, up to length
+     *  bytes, excluding the name index.  Does nothing by default.
+     */
+    void read(DataInput in, int length) throws IOException {
+    }
+
+    /**
+     *  Write the attribute bytecode to the given stream, up to length bytes,
+     *  excluding the name index.  Does nothing by default.
+     */
+    void write(DataOutput out, int length) throws IOException {
+    }
+}

Propchange: 
incubator/openjpa/trunk/serp/src/main/java/serp/bytecode/Attribute.java
------------------------------------------------------------------------------
    svn:executable = *

Added: incubator/openjpa/trunk/serp/src/main/java/serp/bytecode/Attributes.java
URL: 
http://svn.apache.org/viewvc/incubator/openjpa/trunk/serp/src/main/java/serp/bytecode/Attributes.java?rev=417860&view=auto
==============================================================================
--- incubator/openjpa/trunk/serp/src/main/java/serp/bytecode/Attributes.java 
(added)
+++ incubator/openjpa/trunk/serp/src/main/java/serp/bytecode/Attributes.java 
Wed Jun 28 12:46:13 2006
@@ -0,0 +1,217 @@
+/*
+ * Copyright 2006 The Apache Software Foundation.
+ *
+ * Licensed 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 serp.bytecode;
+
+import serp.bytecode.lowlevel.*;
+
+import serp.bytecode.visitor.*;
+
+import java.io.*;
+
+import java.util.*;
+
+
+/**
+ *  <p>Abstract superclass for all bytecode entities that hold attributes.</p>
+ *
+ *  @author Abe White
+ */
+public abstract class Attributes implements BCEntity {
+    /**
+     *  Return all the attributes owned by this entity.
+     *
+     *  @return all owned attributes, or empty array if none
+     */
+    public Attribute[] getAttributes() {
+        Collection attrs = getAttributesHolder();
+
+        return (Attribute[]) attrs.toArray(new Attribute[attrs.size()]);
+    }
+
+    /**
+     *  Return the attribute with the given name.  If multiple attributes
+     *  share the name, which is returned is undefined.
+     */
+    public Attribute getAttribute(String name) {
+        Collection attrs = getAttributesHolder();
+        Attribute attr;
+
+        for (Iterator itr = attrs.iterator(); itr.hasNext();) {
+            attr = (Attribute) itr.next();
+
+            if (attr.getName().equals(name)) {
+                return attr;
+            }
+        }
+
+        return null;
+    }
+
+    /**
+     *  Return all attributes with the given name.
+      *
+     *  @return the matching attributes, or empty array if none
+     */
+    public Attribute[] getAttributes(String name) {
+        List matches = new LinkedList();
+
+        Collection attrs = getAttributesHolder();
+        Attribute attr;
+
+        for (Iterator itr = attrs.iterator(); itr.hasNext();) {
+            attr = (Attribute) itr.next();
+
+            if (attr.getName().equals(name)) {
+                matches.add(attr);
+            }
+        }
+
+        return (Attribute[]) matches.toArray(new Attribute[matches.size()]);
+    }
+
+    /**
+     *  Set the attributes for this entity; this method is useful for importing
+     *  all attributes from another entity.  Set to null or empty array if 
none.
+     */
+    public void setAttributes(Attribute[] attrs) {
+        clearAttributes();
+
+        if (attrs != null) {
+            for (int i = 0; i < attrs.length; i++)
+                addAttribute(attrs[i]);
+        }
+    }
+
+    /**
+     *  Import an attribute from another entity, or make a copy of one
+     *  on this entity.
+     */
+    public Attribute addAttribute(Attribute attr) {
+        Attribute newAttr = addAttribute(attr.getName());
+        newAttr.read(attr);
+
+        return newAttr;
+    }
+
+    /**
+      *  Add an attribute of the given type.
+     */
+    public Attribute addAttribute(String name) {
+        Attribute attr = Attribute.create(name, this);
+        getAttributesHolder().add(attr);
+
+        return attr;
+    }
+
+    /**
+     *  Clear all attributes from this entity.
+     */
+    public void clearAttributes() {
+        Collection attrs = getAttributesHolder();
+        Attribute attr;
+
+        for (Iterator itr = attrs.iterator(); itr.hasNext();) {
+            attr = (Attribute) itr.next();
+            itr.remove();
+            attr.invalidate();
+        }
+    }
+
+    /**
+     *  Remove all attributes with the given name from this entity.
+     *
+     *  @return true if an attribute was removed, false otherwise
+     */
+    public boolean removeAttribute(String name) {
+        return removeAttribute(getAttribute(name));
+    }
+
+    /**
+     *  Remove the given attribute.  After being removed, the attribute
+     *  is invalid, and the result of any operations on it are undefined.
+     *
+     *  @return true if the attribute was removed, false otherwise
+     */
+    public boolean removeAttribute(Attribute attribute) {
+        if ((attribute == null) || !getAttributesHolder().remove(attribute)) {
+            return false;
+        }
+
+        attribute.invalidate();
+
+        return true;
+    }
+
+    /**
+     *  Convenience method to be called by BCEntities when being visited
+     *  by a [EMAIL PROTECTED] BCVisitor}; this method will allow the visitor 
to visit all
+     *  attributes of this entity.
+     */
+    void visitAttributes(BCVisitor visit) {
+        Attribute attr;
+
+        for (Iterator itr = getAttributesHolder().iterator(); itr.hasNext();) {
+            attr = (Attribute) itr.next();
+            visit.enterAttribute(attr);
+            attr.acceptVisit(visit);
+            visit.exitAttribute(attr);
+        }
+    }
+
+    /**
+     *  Build the attribute list from the given stream.
+     *  Relies on the ability of attributes to read themselves, and
+     *  requires access to the constant pool, which must already by read.
+     */
+    void readAttributes(DataInput in) throws IOException {
+        Collection attrs = getAttributesHolder();
+        attrs.clear();
+
+        Attribute attribute;
+        String name;
+
+        for (int i = in.readUnsignedShort(); i > 0; i--) {
+            name = ((UTF8Entry) 
getPool().getEntry(in.readUnsignedShort())).getValue();
+            attribute = addAttribute(name);
+            attribute.read(in, in.readInt());
+        }
+    }
+
+    /**
+     *  Writes all the owned attributes to the given stream.
+     *  Relies on the ability of attributes to write themselves.
+     */
+    void writeAttributes(DataOutput out) throws IOException {
+        Collection attrs = getAttributesHolder();
+        out.writeShort(attrs.size());
+
+        Attribute attribute;
+        int length;
+
+        for (Iterator itr = attrs.iterator(); itr.hasNext();) {
+            attribute = (Attribute) itr.next();
+            out.writeShort(attribute.getNameIndex());
+            length = attribute.getLength();
+            out.writeInt(length);
+            attribute.write(out, length);
+        }
+    }
+
+    /**
+     *  Return the collection used to hold the attributes of this entity.
+     */
+    abstract Collection getAttributesHolder();
+}

Propchange: 
incubator/openjpa/trunk/serp/src/main/java/serp/bytecode/Attributes.java
------------------------------------------------------------------------------
    svn:executable = *


Reply via email to