[jboss-svn-commits] JBL Code SVN: r9908 - in labs/jbosslabs/trunk/portal-extensions: forge-common/src/java/org/jboss/forge/common/projects and 2 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Fri Mar 2 16:14:40 EST 2007
Author: wrzep
Date: 2007-03-02 16:14:40 -0500 (Fri, 02 Mar 2007)
New Revision: 9908
Added:
labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/exceptions/IllegalOperationException.java
labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/proxies/
labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/proxies/ReadOnlyProxy.java
Modified:
labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/ProjectsDescriptor.java
labs/jbosslabs/trunk/portal-extensions/forge-ejb3/src/java/org/jboss/forge/ejb3/projects/ProjectsServiceImpl.java
labs/jbosslabs/trunk/portal-extensions/forge-ejb3/src/java/org/jboss/forge/ejb3/projects/ProjectsServiceRWImpl.java
Log:
JBLAB-840
read-only dynamic proxy
Pawel
Added: labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/exceptions/IllegalOperationException.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/exceptions/IllegalOperationException.java (rev 0)
+++ labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/exceptions/IllegalOperationException.java 2007-03-02 21:14:40 UTC (rev 9908)
@@ -0,0 +1,38 @@
+ /*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.jboss.forge.common.exceptions;
+
+import java.lang.reflect.Method;
+
+public class IllegalOperationException extends Exception {
+
+ public IllegalOperationException(Method m) {
+ super(m.getClass().getName() + " " + m.getName());
+ }
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1393406067185711331L;
+
+}
Modified: labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/ProjectsDescriptor.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/ProjectsDescriptor.java 2007-03-02 12:19:26 UTC (rev 9907)
+++ labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/ProjectsDescriptor.java 2007-03-02 21:14:40 UTC (rev 9908)
@@ -47,6 +47,7 @@
import org.jboss.forge.common.projects.permissions.PermissionsChecker;
import org.jboss.forge.common.projects.project.Project;
import org.jboss.forge.common.projects.project.rw.ProjectRW;
+import org.jboss.forge.common.projects.proxies.ReadOnlyProxy;
import org.jboss.forge.common.projects.configuration.Configuration;
import org.jboss.logging.Logger;
import org.jboss.portal.core.servlet.jsp.taglib.context.DelegateContext;
@@ -60,6 +61,7 @@
*
* @author adamw
* @author <a href="ryszard.kozmik at jboss.com">Ryszard Kozmik</a>
+ * @author Pawel Wrzeszcz (pawel . wrzeszcz [at] jboss . com)
*/
public class ProjectsDescriptor extends AbstractDescriptor {
/**
@@ -88,9 +90,15 @@
/**
* Project id --> Corresponding NEW project descriptor object
*/
- private Map<String, ProjectRW> newProjectsRW;
+ private Map<String, Project> newProjects;
/**
+ * Copy of map above. We put separately parsed objects here
+ * to use them in RW mode.
+ */
+ private Map<String, Project> newProjectsRW;
+
+ /**
* Configuration from projects.xml descriptor.
*/
private Configuration configuration;
@@ -136,7 +144,8 @@
public ProjectsDescriptor(XmlInputFactory isf, String portalName) {
this.portalName = portalName;
projects = new LinkedHashMap<String, ProjectDescriptor>();
- newProjectsRW = new LinkedHashMap<String,ProjectRW>();
+ newProjects = new LinkedHashMap<String,Project>();
+ newProjectsRW = new LinkedHashMap<String,Project>();
projectWithErrorsDescriptors = new HashSet<String>();
projectsContexts = Collections
@@ -164,7 +173,7 @@
}
try {
- LabsServices.getProjectPagesService().updatePages(getNewProjectsRW().values());
+ LabsServices.getProjectPagesService().updatePages(getNewProjects().values());//TODO!!!
} catch (ServiceRetrievalException e) {
log.error("Error getting labs project pages service.", e);
}
@@ -298,7 +307,6 @@
Node n;
NodeList nodes = root.getChildNodes();
- JAXBContext projectJC=null;
JAXBContext projectRWJC=null;
JAXBContext projectsJC=null;
@@ -352,9 +360,19 @@
if (projectRWJC!=null) {
try {
Unmarshaller un = projectRWJC.createUnmarshaller();
- ProjectRW newProject = (ProjectRW)un.unmarshal(
+
+ ProjectRW newProjectObj = (ProjectRW)un.unmarshal(
isf.getInputSource(projectId+"/" + ProjectsHelper.PROJECT_DESC));
- newProjectsRW.put(projectId,newProject);
+
+ Project newProject = newProjectObj;
+ //(Project) ReadOnlyProxy.newInstance(newProjectObj);
+
+ newProjects.put(projectId, newProject);
+
+ ProjectRW newProjectRW = (ProjectRW)un.unmarshal(
+ isf.getInputSource(projectId+"/" + ProjectsHelper.PROJECT_DESC));
+ newProjectsRW.put(projectId, newProjectRW);
+
log.info("Project "+projectId+" created.");
} catch (Exception e) {
log.warn("I could not create Project "+projectId+" (RW mode).",e);
@@ -814,9 +832,21 @@
return ret;
}
- public Map<String,ProjectRW> getNewProjectsRW() {
- return newProjectsRW;
+ /**
+ * Be aware that Project objects returned are NOT thread safe.
+ * To obtain Project objects use ProjectsService(RW) instead.
+ */
+ public Map<String, ? extends Project> getNewProjects() {
+ return newProjects;
}
+
+ /**
+ * Be aware that Project objects returned are NOT thread safe.
+ * To obtain Project objects use ProjectsService(RW) instead.
+ */
+ public Map<String, ? extends Project> getNewProjectsRW() {
+ return newProjects;
+ }
public Configuration getConfiguration () {
return this.configuration;
Added: labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/proxies/ReadOnlyProxy.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/proxies/ReadOnlyProxy.java (rev 0)
+++ labs/jbosslabs/trunk/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/proxies/ReadOnlyProxy.java 2007-03-02 21:14:40 UTC (rev 9908)
@@ -0,0 +1,130 @@
+ /*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.jboss.forge.common.projects.proxies;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.jboss.forge.common.exceptions.IllegalOperationException;
+import org.jboss.forge.common.projects.project.Project;
+
+/**
+ * @author Pawel Wrzeszcz (pawel . wrzeszcz [at] jboss . com)
+ */
+
+public class ReadOnlyProxy implements InvocationHandler {
+
+ private Object obj;
+ private Map<String,Object> methodValues = new HashMap<String, Object>();
+
+
+ public static Object newInstance(Object obj) {
+
+ System.out.println("NEW INSTANCE " + obj.getClass().getName());
+
+ return java.lang.reflect.Proxy.newProxyInstance(
+ obj.getClass().getClassLoader(),
+ obj.getClass().getInterfaces(),
+ new ReadOnlyProxy(obj));
+ }
+
+ private ReadOnlyProxy(Object obj) {
+
+ this.obj = obj;
+ }
+
+ public Object invoke(Object proxy, Method m, Object[] args)
+ throws Throwable {
+
+ System.out.println("INVOKE " + m.getDeclaringClass().getName() + " " + m.getName());
+
+ return invoke(m, args);
+
+ /*
+ if (obj instanceof Project) {
+ System.out.println("PROJECT: " + ((Project) obj).getId());
+ }
+
+ String methodName = m.getName();
+
+ // Check "cache" (only getter results are stored there)
+ if (methodValues.containsKey(methodName)) {
+
+ System.out.println("RET " + methodValues.get(methodName));
+ return methodValues.get(methodName);
+ }
+
+ // Kill setters
+ if (methodName.startsWith("set")) {
+ throw new IllegalOperationException(m);
+ }
+
+ // Obtain result
+ Object result = invoke(m, args);
+
+ // For getters, store the result in "cache"
+ if (methodName.startsWith("get") || methodName.startsWith("is")) {
+
+ if ((result != null) && !m.getReturnType().isPrimitive() &&
+ !m.getReturnType().getPackage().getName().startsWith("java.lang")) {
+
+ System.out.println("WRAPPING...");
+
+ result = ReadOnlyProxy.newInstance(result);
+ }
+
+ // TODO Collections handling
+ System.out.println("CACHED");
+ methodValues.put(methodName, result);
+ }
+
+ System.out.println("RET " + result);
+
+ return result;
+ */
+ }
+
+ private Object invoke(Method m, Object[] args) throws Throwable {
+
+ Object result;
+
+ try {
+
+ result = m.invoke(obj, args);
+
+ } catch (InvocationTargetException e) {
+
+ throw e.getTargetException();
+
+ } catch (Exception e) {
+
+ throw new RuntimeException("Unexpected invocation exception: " + e.getMessage());
+ }
+
+ return result;
+ }
+
+}
Modified: labs/jbosslabs/trunk/portal-extensions/forge-ejb3/src/java/org/jboss/forge/ejb3/projects/ProjectsServiceImpl.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-ejb3/src/java/org/jboss/forge/ejb3/projects/ProjectsServiceImpl.java 2007-03-02 12:19:26 UTC (rev 9907)
+++ labs/jbosslabs/trunk/portal-extensions/forge-ejb3/src/java/org/jboss/forge/ejb3/projects/ProjectsServiceImpl.java 2007-03-02 21:14:40 UTC (rev 9908)
@@ -88,13 +88,13 @@
public Collection<? extends Project> getProjects() {
Projects projectsClass = ProjectsHelper.getProjects(Constants.LABS_PORTAL);
- Map<String,? extends Project> projects = projectsClass.getProjectsDescriptor().getNewProjectsRW();
+ Map<String,? extends Project> projects = projectsClass.getProjectsDescriptor().getNewProjects();
return projects.values();
}
public Project getProjectByName(String projectId) {
Projects projectsClass = ProjectsHelper.getProjects(Constants.LABS_PORTAL);
- Map<String,? extends Project> projects = projectsClass.getProjectsDescriptor().getNewProjectsRW();
+ Map<String,? extends Project> projects = projectsClass.getProjectsDescriptor().getNewProjects();
return projects.get(projectId);
}
Modified: labs/jbosslabs/trunk/portal-extensions/forge-ejb3/src/java/org/jboss/forge/ejb3/projects/ProjectsServiceRWImpl.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-ejb3/src/java/org/jboss/forge/ejb3/projects/ProjectsServiceRWImpl.java 2007-03-02 12:19:26 UTC (rev 9907)
+++ labs/jbosslabs/trunk/portal-extensions/forge-ejb3/src/java/org/jboss/forge/ejb3/projects/ProjectsServiceRWImpl.java 2007-03-02 21:14:40 UTC (rev 9908)
@@ -85,8 +85,9 @@
public ProjectRW getProjectByNameRW(String projectId) {
Projects projectsClass = ProjectsHelper.getProjects(Constants.LABS_PORTAL);
- Map<String,ProjectRW> projects = projectsClass.getProjectsDescriptor().getNewProjectsRW();
- return projects.get(projectId);
+ Map<String,? extends Project> projects = projectsClass.getProjectsDescriptor().getNewProjects();
+ //return projects.get(projectId);
+ return null;
}
public PollsRW getProjectPollsRW(String projectId) {
More information about the jboss-svn-commits
mailing list