http://git-wip-us.apache.org/repos/asf/isis/blob/255ef514/component/profilestore/xml/src/test/java/org/apache/isis/runtimes/dflt/profilestores/xml/internal/UserProfileDataHandlerTest.java ---------------------------------------------------------------------- diff --git a/component/profilestore/xml/src/test/java/org/apache/isis/runtimes/dflt/profilestores/xml/internal/UserProfileDataHandlerTest.java b/component/profilestore/xml/src/test/java/org/apache/isis/runtimes/dflt/profilestores/xml/internal/UserProfileDataHandlerTest.java new file mode 100644 index 0000000..791ffd3 --- /dev/null +++ b/component/profilestore/xml/src/test/java/org/apache/isis/runtimes/dflt/profilestores/xml/internal/UserProfileDataHandlerTest.java @@ -0,0 +1,152 @@ +/* + * 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.isis.runtimes.dflt.profilestores.xml.internal; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import java.io.FileInputStream; +import java.io.InputStreamReader; +import java.util.Arrays; +import java.util.List; + +import org.apache.isis.core.commons.config.IsisConfigurationDefault; +import org.apache.isis.core.metamodel.adapter.oid.OidMarshaller; +import org.apache.isis.core.metamodel.spec.SpecificationLoaderSpi; +import org.apache.isis.core.runtime.authentication.AuthenticationManager; +import org.apache.isis.core.runtime.authorization.AuthorizationManager; +import org.apache.isis.core.runtime.imageloader.TemplateImageLoader; +import org.apache.isis.core.runtime.userprofile.Options; +import org.apache.isis.core.runtime.userprofile.UserProfile; +import org.apache.isis.core.runtime.userprofile.UserProfileLoader; +import org.apache.isis.core.testsupport.jmock.JUnitRuleMockery2; +import org.apache.isis.core.testsupport.jmock.JUnitRuleMockery2.Mode; +import org.apache.isis.runtimes.dflt.runtime.system.DeploymentType; +import org.apache.isis.runtimes.dflt.runtime.system.context.IsisContextStatic; +import org.apache.isis.runtimes.dflt.runtime.system.persistence.PersistenceSessionFactory; +import org.apache.isis.runtimes.dflt.runtime.system.session.IsisSessionFactory; +import org.apache.isis.runtimes.dflt.runtime.system.session.IsisSessionFactoryDefault; +import org.apache.log4j.Level; +import org.apache.log4j.Logger; +import org.jmock.auto.Mock; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.xml.sax.InputSource; +import org.xml.sax.XMLReader; +import org.xml.sax.helpers.XMLReaderFactory; + +public class UserProfileDataHandlerTest { + + @Rule + public JUnitRuleMockery2 context = JUnitRuleMockery2.createFor(Mode.INTERFACES_AND_CLASSES); + + @Mock + private TemplateImageLoader mockTemplateImageLoader; + @Mock + private SpecificationLoaderSpi mockSpecificationLoader; + @Mock + private AuthenticationManager mockAuthenticationManager; + @Mock + private AuthorizationManager mockAuthorizationManager; + @Mock + private UserProfileLoader mockUserProfileLoader; + @Mock + private PersistenceSessionFactory mockPersistenceSessionFactory; + + private TestServiceObject1 service; + private UserProfile profile; + + + @Before + public void setup() throws Exception { + Logger.getRootLogger().setLevel(Level.OFF); + service = new TestServiceObject1(); + final IsisSessionFactory executionContextFactory = new IsisSessionFactoryDefault(DeploymentType.EXPLORATION, new IsisConfigurationDefault(), mockTemplateImageLoader, mockSpecificationLoader, mockAuthenticationManager, + mockAuthorizationManager, mockUserProfileLoader, mockPersistenceSessionFactory, Arrays.<Object>asList(service), new OidMarshaller()); + + IsisContextStatic.createRelaxedInstance(executionContextFactory); + + final XMLReader parser = XMLReaderFactory.createXMLReader(); + final UserProfileDataHandler handler = new UserProfileDataHandler(); + parser.setContentHandler(handler); + parser.parse(new InputSource(new InputStreamReader(new FileInputStream("test.xml")))); + + profile = handler.getUserProfile(); + } + + @Test + public void stringOption() throws Exception { + assertEquals("on", profile.getOptions().getString("power")); + } + + @Test + public void unknownOptionReturnsNull() throws Exception { + assertEquals(null, profile.getOptions().getString("device")); + } + + @Test + public void integerOption() throws Exception { + assertEquals(50, profile.getOptions().getInteger("height", 10)); + } + + @Test + public void unknownIntegerReturnsDefault() throws Exception { + assertEquals(30, profile.getOptions().getInteger("width", 30)); + } + + @Test + public void unknownOptionsCreated() throws Exception { + final Options options = profile.getOptions().getOptions(""); + assertNotNull(options); + assertEquals(false, options.names().hasNext()); + } + + @Test + public void containedOptions() throws Exception { + final Options options = profile.getOptions().getOptions("opts"); + assertNotNull(options); + assertEquals("value1", options.getString("option1")); + assertEquals("value2", options.getString("option2")); + } + + @Test + public void recursiveOptions() throws Exception { + Options options = profile.getOptions().getOptions("opts"); + options = options.getOptions("options3"); + assertEquals("value4", options.getString("option4")); + assertEquals("value5", options.getString("option5")); + } + + @Test + public void profileNames() throws Exception { + final List<String> list = profile.list(); + assertEquals(2, list.size()); + assertEquals("Library", list.get(0)); + assertEquals("Admin", list.get(1)); + } + + @Test + public void perspective() throws Exception { + assertEquals("Admin", profile.getPerspective().getName()); + assertEquals(1, profile.getPerspective().getServices().size()); + assertEquals(service, profile.getPerspective().getServices().get(0)); + } +}
http://git-wip-us.apache.org/repos/asf/isis/blob/255ef514/component/profilestore/xml/test.xml ---------------------------------------------------------------------- diff --git a/component/profilestore/xml/test.xml b/component/profilestore/xml/test.xml new file mode 100644 index 0000000..12fcca4 --- /dev/null +++ b/component/profilestore/xml/test.xml @@ -0,0 +1,53 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + 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. +--> + +<profile> + <options> + <option id="power">on</option> + <option id="height">50</option> + <options id="opts"> + <option id="option1">value1</option> + <options id="options3"> + <option id="option4">value4</option> + <option id="option5">value5</option> + </options> + <option id="option2">value2</option> + </options> + </options> + <perspectives> + <perspective name="Library"> + <services> + <service id="Service one"/> + <service id="Service two"/> + <service id="Service three"/> + </services> + <objects> + </objects> + </perspective> + <perspective name="Admin"> + <services> + <service id="repository#org.apache.isis.xmlpersistence.profilestore.TestServiceObject"/> + <service id="test service"/> + </services> + <objects> + </objects> + </perspective> + </perspectives> +</profile> http://git-wip-us.apache.org/repos/asf/isis/blob/255ef514/component/progmodel/groovy/NOTICE ---------------------------------------------------------------------- diff --git a/component/progmodel/groovy/NOTICE b/component/progmodel/groovy/NOTICE new file mode 100644 index 0000000..d391f54 --- /dev/null +++ b/component/progmodel/groovy/NOTICE @@ -0,0 +1,7 @@ +Apache Isis +Copyright 2010-2011 The Apache Software Foundation + +This product includes software developed at +The Apache Software Foundation (http://www.apache.org/). + + http://git-wip-us.apache.org/repos/asf/isis/blob/255ef514/component/progmodel/groovy/applib/NOTICE ---------------------------------------------------------------------- diff --git a/component/progmodel/groovy/applib/NOTICE b/component/progmodel/groovy/applib/NOTICE new file mode 100644 index 0000000..d391f54 --- /dev/null +++ b/component/progmodel/groovy/applib/NOTICE @@ -0,0 +1,7 @@ +Apache Isis +Copyright 2010-2011 The Apache Software Foundation + +This product includes software developed at +The Apache Software Foundation (http://www.apache.org/). + + http://git-wip-us.apache.org/repos/asf/isis/blob/255ef514/component/progmodel/groovy/applib/pom.xml ---------------------------------------------------------------------- diff --git a/component/progmodel/groovy/applib/pom.xml b/component/progmodel/groovy/applib/pom.xml new file mode 100644 index 0000000..a1fd534 --- /dev/null +++ b/component/progmodel/groovy/applib/pom.xml @@ -0,0 +1,55 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + 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. +--> +<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> + + <parent> + <groupId>org.apache.isis.progmodels</groupId> + <artifactId>groovy</artifactId> + <version>0.3.1-SNAPSHOT</version> + </parent> + + <artifactId>groovy-applib</artifactId> + <name>Groovy ProgModel AppLib</name> + + <properties> + <siteBaseDir>..</siteBaseDir> + <relativeUrl>applib/</relativeUrl> + </properties> + + <!-- used in Site generation for relative references. --> + <url>http://incubator.apache.org/isis/${relativeUrl}</url> + + <dependencies> + <dependency> + <groupId>org.apache.isis</groupId> + <artifactId>applib</artifactId> + </dependency> + + <!-- is marked as optional in parent, so not exported as a transitive dependency --> + <dependency> + <groupId>org.codehaus.groovy</groupId> + <artifactId>groovy-all</artifactId> + </dependency> + + </dependencies> + +</project> http://git-wip-us.apache.org/repos/asf/isis/blob/255ef514/component/progmodel/groovy/applib/src/main/java/org/apache/isis/progmodel/groovy/applib/DomainObjectBuilder.java ---------------------------------------------------------------------- diff --git a/component/progmodel/groovy/applib/src/main/java/org/apache/isis/progmodel/groovy/applib/DomainObjectBuilder.java b/component/progmodel/groovy/applib/src/main/java/org/apache/isis/progmodel/groovy/applib/DomainObjectBuilder.java new file mode 100644 index 0000000..f5698d6 --- /dev/null +++ b/component/progmodel/groovy/applib/src/main/java/org/apache/isis/progmodel/groovy/applib/DomainObjectBuilder.java @@ -0,0 +1,72 @@ +/* + * 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.isis.progmodel.groovy.applib; + +import groovy.util.ObjectGraphBuilder; + +import java.util.Map; + +import org.apache.isis.applib.DomainObjectContainer; + +public class DomainObjectBuilder<T> extends ObjectGraphBuilder { + + private final DomainObjectContainer container; + + public DomainObjectBuilder(final DomainObjectContainer container, final Class<?>... classes) { + this.container = container; + final ClassNameResolver classNameResolver = new ClassNameResolver() { + @Override + public String resolveClassname(final String classname) { + for (final Class<?> cls : classes) { + final String packageName = cls.getPackage().getName(); + final String fqcn = packageName + "." + upperFirst(classname); + try { + Thread.currentThread().getContextClassLoader().loadClass(fqcn); + return fqcn; + } catch (final ClassNotFoundException ex) { + // continue + } + } + throw new RuntimeException("could not resolve " + classname + "'"); + } + + }; + this.setClassNameResolver(classNameResolver); + final NewInstanceResolver instanceResolver = new DefaultNewInstanceResolver() { + @SuppressWarnings("unchecked") + @Override + public Object newInstance(final Class cls, final Map attributes) throws InstantiationException, IllegalAccessException { + return container.newTransientInstance(cls); + } + }; + this.setNewInstanceResolver(instanceResolver); + } + + private static String upperFirst(final String name) { + return name.substring(0, 1).toUpperCase() + name.substring(1); + } + + @SuppressWarnings("unchecked") + @Override + protected Object createNode(final Object arg0, final Map arg1, final Object arg2) { + final Object domainObject = super.createNode(arg0, arg1, arg2); + container.persistIfNotAlready(domainObject); + return domainObject; + } +} http://git-wip-us.apache.org/repos/asf/isis/blob/255ef514/component/progmodel/groovy/applib/src/site/apt/index.apt ---------------------------------------------------------------------- diff --git a/component/progmodel/groovy/applib/src/site/apt/index.apt b/component/progmodel/groovy/applib/src/site/apt/index.apt new file mode 100644 index 0000000..31ab5b9 --- /dev/null +++ b/component/progmodel/groovy/applib/src/site/apt/index.apt @@ -0,0 +1,29 @@ +~~ 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. + +Documentation + + The <Groovy Objects> applib defines: + + * helper classes for writing fixtures + + * a transitive dependency to the <Isis> applib + + [] + + See the {{{../../docbkx/html/guide/isis-progmodels.html}Isis Programming Model user guide}} for more information. + http://git-wip-us.apache.org/repos/asf/isis/blob/255ef514/component/progmodel/groovy/applib/src/site/apt/jottings.apt ---------------------------------------------------------------------- diff --git a/component/progmodel/groovy/applib/src/site/apt/jottings.apt b/component/progmodel/groovy/applib/src/site/apt/jottings.apt new file mode 100644 index 0000000..c5d1200 --- /dev/null +++ b/component/progmodel/groovy/applib/src/site/apt/jottings.apt @@ -0,0 +1,24 @@ +~~ 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. + + + +Jottings + + This page is to capture any random jottings relating to this module prior + to being moved into formal documentation. + http://git-wip-us.apache.org/repos/asf/isis/blob/255ef514/component/progmodel/groovy/applib/src/site/site.xml ---------------------------------------------------------------------- diff --git a/component/progmodel/groovy/applib/src/site/site.xml b/component/progmodel/groovy/applib/src/site/site.xml new file mode 100644 index 0000000..725e8ca --- /dev/null +++ b/component/progmodel/groovy/applib/src/site/site.xml @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + 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. +--> +<project name="${project.name}"> + <body> + <breadcrumbs> + <item name="Applib" href="index.html"/> + </breadcrumbs> + + <menu name="Groovy Applib"> + <item name="About" href="index.html" /> + <item name="Jottings" href="jottings.html" /> + </menu> + + <menu name="Groovy Modules"> + <item name="Applib" href="../groovy-applib/index.html" /> + <item name="Metamodel" href="../groovy-metamodel/index.html" /> + </menu> + + <menu name="Maven Reports" ref="reports" /> + </body> +</project> http://git-wip-us.apache.org/repos/asf/isis/blob/255ef514/component/progmodel/groovy/metamodel/NOTICE ---------------------------------------------------------------------- diff --git a/component/progmodel/groovy/metamodel/NOTICE b/component/progmodel/groovy/metamodel/NOTICE new file mode 100644 index 0000000..d391f54 --- /dev/null +++ b/component/progmodel/groovy/metamodel/NOTICE @@ -0,0 +1,7 @@ +Apache Isis +Copyright 2010-2011 The Apache Software Foundation + +This product includes software developed at +The Apache Software Foundation (http://www.apache.org/). + + http://git-wip-us.apache.org/repos/asf/isis/blob/255ef514/component/progmodel/groovy/metamodel/pom.xml ---------------------------------------------------------------------- diff --git a/component/progmodel/groovy/metamodel/pom.xml b/component/progmodel/groovy/metamodel/pom.xml new file mode 100644 index 0000000..01765f0 --- /dev/null +++ b/component/progmodel/groovy/metamodel/pom.xml @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + 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. +--> +<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> + + <parent> + <groupId>org.apache.isis.progmodels</groupId> + <artifactId>groovy</artifactId> + <version>0.3.1-SNAPSHOT</version> + </parent> + + <artifactId>groovy-metamodel</artifactId> + <name>Groovy ProgModel MetaModel</name> + + <properties> + <siteBaseDir>..</siteBaseDir> + <relativeUrl>metamodel/</relativeUrl> + </properties> + + <!-- used in Site generation for relative references. --> + <url>http://incubator.apache.org/isis/${relativeUrl}</url> + + <dependencies> + <dependency> + <groupId>org.apache.isis.progmodels</groupId> + <artifactId>groovy-applib</artifactId> + </dependency> + + <dependency> + <groupId>org.apache.isis.core</groupId> + <artifactId>isis-metamodel</artifactId> + </dependency> + + <!-- is marked as optional in parent, so not exported as a transitive dependency --> + <dependency> + <groupId>org.codehaus.groovy</groupId> + <artifactId>groovy-all</artifactId> + </dependency> + </dependencies> + +</project> http://git-wip-us.apache.org/repos/asf/isis/blob/255ef514/component/progmodel/groovy/metamodel/src/main/java/org/apache/isis/progmodel/groovy/metamodel/RemoveGroovyMethodsFacetFactory.java ---------------------------------------------------------------------- diff --git a/component/progmodel/groovy/metamodel/src/main/java/org/apache/isis/progmodel/groovy/metamodel/RemoveGroovyMethodsFacetFactory.java b/component/progmodel/groovy/metamodel/src/main/java/org/apache/isis/progmodel/groovy/metamodel/RemoveGroovyMethodsFacetFactory.java new file mode 100644 index 0000000..c2346af --- /dev/null +++ b/component/progmodel/groovy/metamodel/src/main/java/org/apache/isis/progmodel/groovy/metamodel/RemoveGroovyMethodsFacetFactory.java @@ -0,0 +1,115 @@ +/* + * 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.isis.progmodel.groovy.metamodel; + +import java.lang.reflect.Method; + +import org.apache.isis.core.commons.config.IsisConfiguration; +import org.apache.isis.core.commons.config.IsisConfigurationAware; +import org.apache.isis.core.metamodel.facetapi.FeatureType; +import org.apache.isis.core.metamodel.facetapi.MethodRemover; +import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract; +import org.apache.isis.core.metamodel.methodutils.MethodScope; + +public class RemoveGroovyMethodsFacetFactory extends FacetFactoryAbstract implements IsisConfigurationAware { + + private static final String DEPTH_KEY = "isis.groovy.depth"; + private static final int DEPTH_DEFAULT = 5; + + private IsisConfiguration configuration; + + public RemoveGroovyMethodsFacetFactory() { + super(FeatureType.OBJECTS_ONLY); + } + + static class MethodSpec { + static class Builder { + + private final MethodSpec methodSpec = new MethodSpec(); + + public Builder param(final Class<?>... paramTypes) { + methodSpec.parameterTypes = paramTypes; + return this; + } + + public Builder ret(final Class<?> returnType) { + methodSpec.returnType = returnType; + return this; + } + + public MethodSpec build() { + return methodSpec; + } + + public void remove(final MethodRemover remover) { + build().removeMethod(remover); + } + } + + static Builder specFor(final String methodName) { + final Builder builder = new Builder(); + builder.methodSpec.methodName = methodName; + return builder; + } + + static Builder specFor(final String formatStr, final Object... args) { + return specFor(String.format(formatStr, args)); + } + + private String methodName; + private Class<?> returnType = void.class; + private Class<?>[] parameterTypes = new Class[0]; + + void removeMethod(final MethodRemover methodRemover) { + methodRemover.removeMethod(MethodScope.OBJECT, methodName, returnType, parameterTypes); + } + } + + @Override + public void process(final ProcessClassContext processClassContext) { + MethodSpec.specFor("invokeMethod").param(String.class, Object.class).ret(Object.class).remove(processClassContext); + MethodSpec.specFor("getMetaClass").ret(groovy.lang.MetaClass.class).remove(processClassContext); + MethodSpec.specFor("setMetaClass").param(groovy.lang.MetaClass.class).remove(processClassContext); + MethodSpec.specFor("getProperty").param(String.class).ret(Object.class).remove(processClassContext); + + final int depth = determineDepth(); + for (int i = 1; i < depth; i++) { + MethodSpec.specFor("this$dist$invoke$%d", i).param(String.class, Object.class).ret(Object.class).remove(processClassContext); + MethodSpec.specFor("this$dist$set$%d", i).param(String.class, Object.class).remove(processClassContext); + MethodSpec.specFor("this$dist$get$%d", i).param(String.class).ret(Object.class).remove(processClassContext); + } + final Method[] methods = processClassContext.getCls().getMethods(); + for (final Method method : methods) { + if (method.getName().startsWith("super$")) { + processClassContext.removeMethod(method); + } + } + } + + private int determineDepth() { + final int depth = configuration.getInteger(DEPTH_KEY, DEPTH_DEFAULT); + return depth; + } + + @Override + public void setConfiguration(final IsisConfiguration configuration) { + this.configuration = configuration; + } + +} http://git-wip-us.apache.org/repos/asf/isis/blob/255ef514/component/progmodel/groovy/metamodel/src/site/apt/index.apt ---------------------------------------------------------------------- diff --git a/component/progmodel/groovy/metamodel/src/site/apt/index.apt b/component/progmodel/groovy/metamodel/src/site/apt/index.apt new file mode 100644 index 0000000..2887427 --- /dev/null +++ b/component/progmodel/groovy/metamodel/src/site/apt/index.apt @@ -0,0 +1,28 @@ +~~ 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. + +Documentation + + The <Groovy Objects> metamodel provides the customization required for <Isis> so that it can build the metamodel from + domain objects written in Groovy. + + [] + + See the {{{../../docbkx/html/guide/isis-progmodels.html}Isis Programming Model user guide}} for more information. + +~~ See the {{{../gdocumentation}user guide}} for more information as to how this is configured. + http://git-wip-us.apache.org/repos/asf/isis/blob/255ef514/component/progmodel/groovy/metamodel/src/site/apt/jottings.apt ---------------------------------------------------------------------- diff --git a/component/progmodel/groovy/metamodel/src/site/apt/jottings.apt b/component/progmodel/groovy/metamodel/src/site/apt/jottings.apt new file mode 100644 index 0000000..c5d1200 --- /dev/null +++ b/component/progmodel/groovy/metamodel/src/site/apt/jottings.apt @@ -0,0 +1,24 @@ +~~ 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. + + + +Jottings + + This page is to capture any random jottings relating to this module prior + to being moved into formal documentation. + http://git-wip-us.apache.org/repos/asf/isis/blob/255ef514/component/progmodel/groovy/metamodel/src/site/site.xml ---------------------------------------------------------------------- diff --git a/component/progmodel/groovy/metamodel/src/site/site.xml b/component/progmodel/groovy/metamodel/src/site/site.xml new file mode 100644 index 0000000..64831c1 --- /dev/null +++ b/component/progmodel/groovy/metamodel/src/site/site.xml @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + 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. +--> +<project name="${project.name}"> + <body> + <breadcrumbs> + <item name="MetaModel" href="index.html"/> + </breadcrumbs> + + <menu name="Groovy MetaModel"> + <item name="About" href="index.html" /> + <item name="Jottings" href="jottings.html" /> + </menu> + + <menu name="Groovy Modules"> + <item name="Applib" href="../groovy-applib/index.html" /> + <item name="Metamodel" href="../groovy-metamodel/index.html" /> + </menu> + + <menu name="Maven Reports" ref="reports" /> + </body> +</project> http://git-wip-us.apache.org/repos/asf/isis/blob/255ef514/component/progmodel/groovy/pom.xml ---------------------------------------------------------------------- diff --git a/component/progmodel/groovy/pom.xml b/component/progmodel/groovy/pom.xml new file mode 100644 index 0000000..445224e --- /dev/null +++ b/component/progmodel/groovy/pom.xml @@ -0,0 +1,93 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + 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. +--> +<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/xsd/maven-4.0.0.xsd"> + + <modelVersion>4.0.0</modelVersion> + + <parent> + <groupId>org.apache.isis</groupId> + <artifactId>isis-parent</artifactId> + <version>0.3.1-SNAPSHOT</version> + <relativePath>../../../isis-parent/pom.xml</relativePath> + </parent> + + <groupId>org.apache.isis.progmodels</groupId> + <artifactId>groovy</artifactId> + + <name>Groovy ProgModel</name> + + <packaging>pom</packaging> + + <properties> + <siteBaseDir>.</siteBaseDir> + <relativeUrl/> + + <groovy.version>2.0.5</groovy.version> + </properties> + + <!-- used in Site generation for relative references. --> + <url>http://incubator.apache.org/isis/${relativeUrl}</url> + + <modules> + <module>applib</module> + <module>metamodel</module> + </modules> + + <dependencyManagement> + <dependencies> + + <!-- Groovy Support --> + <dependency> + <groupId>org.apache.isis.progmodels</groupId> + <artifactId>groovy-applib</artifactId> + <version>0.3.1-SNAPSHOT</version> + </dependency> + <dependency> + <groupId>org.apache.isis.progmodels</groupId> + <artifactId>groovy-metamodel</artifactId> + <version>0.3.1-SNAPSHOT</version> + </dependency> + + <!-- Apache Isis --> + <dependency> + <groupId>org.apache.isis</groupId> + <artifactId>applib</artifactId> + <version>0.3.1-SNAPSHOT</version> + </dependency> + <dependency> + <groupId>org.apache.isis.core</groupId> + <artifactId>isis-metamodel</artifactId> + <version>0.3.1-SNAPSHOT</version> + </dependency> + + <!-- Groovy --> + <dependency> + <groupId>org.codehaus.groovy</groupId> + <artifactId>groovy-all</artifactId> + <version>${groovy.version}</version> + <scope>compile</scope> + <optional>true</optional> + </dependency> + + </dependencies> + </dependencyManagement> + + +</project> http://git-wip-us.apache.org/repos/asf/isis/blob/255ef514/component/progmodel/groovy/src/docbkx/guide/images/ConvertToGroovy.png ---------------------------------------------------------------------- diff --git a/component/progmodel/groovy/src/docbkx/guide/images/ConvertToGroovy.png b/component/progmodel/groovy/src/docbkx/guide/images/ConvertToGroovy.png new file mode 100644 index 0000000..11c0907 Binary files /dev/null and b/component/progmodel/groovy/src/docbkx/guide/images/ConvertToGroovy.png differ http://git-wip-us.apache.org/repos/asf/isis/blob/255ef514/component/progmodel/groovy/src/docbkx/guide/images/RemoveGroovyLibraryFromClasspath.png ---------------------------------------------------------------------- diff --git a/component/progmodel/groovy/src/docbkx/guide/images/RemoveGroovyLibraryFromClasspath.png b/component/progmodel/groovy/src/docbkx/guide/images/RemoveGroovyLibraryFromClasspath.png new file mode 100644 index 0000000..37c0307 Binary files /dev/null and b/component/progmodel/groovy/src/docbkx/guide/images/RemoveGroovyLibraryFromClasspath.png differ http://git-wip-us.apache.org/repos/asf/isis/blob/255ef514/component/progmodel/groovy/src/docbkx/guide/images/m2eclipse-bunch-of-projects.png ---------------------------------------------------------------------- diff --git a/component/progmodel/groovy/src/docbkx/guide/images/m2eclipse-bunch-of-projects.png b/component/progmodel/groovy/src/docbkx/guide/images/m2eclipse-bunch-of-projects.png new file mode 100644 index 0000000..d22c320 Binary files /dev/null and b/component/progmodel/groovy/src/docbkx/guide/images/m2eclipse-bunch-of-projects.png differ http://git-wip-us.apache.org/repos/asf/isis/blob/255ef514/component/progmodel/groovy/src/docbkx/guide/images/m2eclipse-file-import.png ---------------------------------------------------------------------- diff --git a/component/progmodel/groovy/src/docbkx/guide/images/m2eclipse-file-import.png b/component/progmodel/groovy/src/docbkx/guide/images/m2eclipse-file-import.png new file mode 100644 index 0000000..ac85fca Binary files /dev/null and b/component/progmodel/groovy/src/docbkx/guide/images/m2eclipse-file-import.png differ http://git-wip-us.apache.org/repos/asf/isis/blob/255ef514/component/progmodel/groovy/src/docbkx/guide/images/m2eclipse-root-directory.png ---------------------------------------------------------------------- diff --git a/component/progmodel/groovy/src/docbkx/guide/images/m2eclipse-root-directory.png b/component/progmodel/groovy/src/docbkx/guide/images/m2eclipse-root-directory.png new file mode 100644 index 0000000..4de753a Binary files /dev/null and b/component/progmodel/groovy/src/docbkx/guide/images/m2eclipse-root-directory.png differ http://git-wip-us.apache.org/repos/asf/isis/blob/255ef514/component/progmodel/groovy/src/docbkx/guide/images/title.png ---------------------------------------------------------------------- diff --git a/component/progmodel/groovy/src/docbkx/guide/images/title.png b/component/progmodel/groovy/src/docbkx/guide/images/title.png new file mode 100644 index 0000000..0e2b779 Binary files /dev/null and b/component/progmodel/groovy/src/docbkx/guide/images/title.png differ