Return-Path: Delivered-To: apmail-xml-cocoon-cvs-archive@xml.apache.org Received: (qmail 95789 invoked by uid 500); 23 May 2003 09:42:52 -0000 Mailing-List: contact cocoon-cvs-help@xml.apache.org; run by ezmlm Precedence: bulk Reply-To: cocoon-dev@xml.apache.org list-help: list-unsubscribe: list-post: Delivered-To: mailing list cocoon-cvs@xml.apache.org Received: (qmail 95778 invoked by uid 500); 23 May 2003 09:42:52 -0000 Delivered-To: apmail-cocoon-2.1-cvs@apache.org Received: (qmail 95774 invoked from network); 23 May 2003 09:42:52 -0000 Received: from icarus.apache.org (208.185.179.13) by daedalus.apache.org with SMTP; 23 May 2003 09:42:52 -0000 Received: (qmail 28712 invoked by uid 1260); 23 May 2003 09:42:51 -0000 Date: 23 May 2003 09:42:51 -0000 Message-ID: <20030523094251.28711.qmail@icarus.apache.org> From: cziegeler@apache.org To: cocoon-2.1-cvs@apache.org Subject: cvs commit: cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/profile/impl SimpleProfileManager.java X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N cziegeler 2003/05/23 02:42:50 Modified: src/blocks/portal/java/org/apache/cocoon/portal/profile ProfileManager.java src/blocks/portal/java/org/apache/cocoon/portal/profile/impl SimpleProfileManager.java Log: Adding profile saving Revision Changes Path 1.3 +3 -1 cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/profile/ProfileManager.java Index: ProfileManager.java =================================================================== RCS file: /home/cvs/cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/profile/ProfileManager.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- ProfileManager.java 22 May 2003 12:32:47 -0000 1.2 +++ ProfileManager.java 23 May 2003 09:42:50 -0000 1.3 @@ -71,4 +71,6 @@ CopletInstanceData getCopletInstanceData(String copletID); + void saveUserProfiles(); + } 1.8 +90 -20 cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/profile/impl/SimpleProfileManager.java Index: SimpleProfileManager.java =================================================================== RCS file: /home/cvs/cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/profile/impl/SimpleProfileManager.java,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- SimpleProfileManager.java 22 May 2003 15:19:42 -0000 1.7 +++ SimpleProfileManager.java 23 May 2003 09:42:50 -0000 1.8 @@ -147,7 +147,7 @@ // load coplet base data map.put("profile", "copletbasedata"); map.put("objectmap", null); - Object[] result = this.getProfile(keyMap, map, portalPrefix+"/CopletBaseData", null); + Object[] result = this.getProfile(keyMap, map, portalPrefix+"/CopletBaseData", null, null); if (result[0] == null) { throw new SourceNotFoundException("Could not find coplet base data profile."); } @@ -157,7 +157,7 @@ // load coplet data map.put("profile", "copletdata"); map.put("objectmap", copletBaseDataManager.getCopletBaseData()); - result = this.getDeltaProfile(keyMap, map, portalPrefix+"/CopletData", service, lastLoaded); + result = this.getDeltaProfile(keyMap, map, portalPrefix+"/CopletData", service, copletFactory, lastLoaded); if (result[0] == null) { throw new SourceNotFoundException("Could not find coplet data profile."); } @@ -173,7 +173,7 @@ // load coplet instance data map.put("profile", "copletinstancedata"); map.put("objectmap", copletDataManager.getCopletData()); - result = this.getOrCreateProfile(keyMap, map, portalPrefix+"/CopletInstanceData", service); + result = this.getOrCreateProfile(keyMap, map, portalPrefix+"/CopletInstanceData", service, copletFactory); CopletInstanceDataManager copletInstanceDataManager = (CopletInstanceDataManager)result[0]; boolean loaded = ((Boolean)result[1]).booleanValue(); if (lastLoaded && !loaded) { @@ -190,7 +190,7 @@ // load layout map.put("profile", "layout"); map.put("objectmap", ((CopletInstanceDataManager)result[0]).getCopletInstanceData()); - result = this.getOrCreateProfile(keyMap, map, portalPrefix+"/Layout", service); + result = this.getOrCreateProfile(keyMap, map, portalPrefix+"/Layout", service, factory); layout = (Layout)result[0]; loaded = ((Boolean)result[1]).booleanValue(); if (lastLoaded && !loaded) { @@ -210,12 +210,50 @@ } } + public void saveUserProfiles() { + MapSourceAdapter adapter = null; + PortalService service = null; + try { + adapter = (MapSourceAdapter) this.manager.lookup(MapSourceAdapter.ROLE); + service = (PortalService) this.manager.lookup(PortalService.ROLE); + + String portalPrefix = SimpleProfileManager.class.getName()+"/"+service.getPortalName(); + + HashMap map = new HashMap(); + map.put("portalname", service.getPortalName()); + map.put("type", "user"); + + // TODO Change to KeyManager usage + UserHandler handler = RequestState.getState().getHandler(); + HashMap key = new HashMap(); + key.put("user", handler.getUserId()); + key.put("role", handler.getContext().getContextInfo().get("role")); + key.put("config", RequestState.getState().getApplicationConfiguration().getConfiguration("portal")); + + // save coplet instance data + map.put("profile", "copletinstancedata"); + Object profile = ((Object[])service.getAttribute(portalPrefix+"/CopletInstanceData"))[0]; + adapter.saveProfile(key, map, profile); + + // save coplet instance data + map.put("profile", "layout"); + profile = ((Object[])service.getAttribute(portalPrefix+"/Layout"))[0]; + adapter.saveProfile(key, map, profile); + } catch (Exception e) { + // TODO + throw new CascadingRuntimeException("Arg", e); + } finally { + this.manager.release(adapter); + this.manager.release(service); + } + } + /** * Gets a profile and applies possible user and role deltas to it. * @return result[0] is the profile, result[1] is a Boolean, * which signals whether the profile has been loaded or reused. */ - private Object[] getDeltaProfile(Object key, Map map, String location, PortalService service, boolean forcedLoad) + private Object[] getDeltaProfile(Object key, Map map, String location, PortalService service, Object factory, boolean forcedLoad) throws Exception { Object[] result; @@ -240,19 +278,19 @@ } else { // load global profile map.put("type", "global"); - Object global = this.getProfile(key, map, location, globalValidity, null, forcedLoad)[0]; - DeltaApplicableReferencesAdjustable object = (DeltaApplicableReferencesAdjustable)this.loadProfile(key, map, location, (SourceValidity)globalValidity[1], service); + Object global = this.getProfile(key, map, location, globalValidity, null, factory, forcedLoad)[0]; + DeltaApplicableReferencesAdjustable object = (DeltaApplicableReferencesAdjustable)this.loadProfile(key, map, location, (SourceValidity)globalValidity[1], service, factory); result = new Object[] {object, Boolean.TRUE}; // load role delta map.put("type", "role"); - result = this.getProfile(key, map, location+"-role-"+keyMap.get("role"), roleValidity, null, forcedLoad); + result = this.getProfile(key, map, location+"-role-"+keyMap.get("role"), roleValidity, null, factory, forcedLoad); if (((Boolean)result[1]).booleanValue()) object.applyDelta(result[0]); // load user delta map.put("type", "user"); - result = this.getProfile(key, map, location+"-user", userValidity, service, forcedLoad); + result = this.getProfile(key, map, location+"-user", userValidity, service, factory, forcedLoad); if (((Boolean)result[1]).booleanValue()) object.applyDelta(result[0]); @@ -270,7 +308,7 @@ * @return result[0] is the profile, result[1] is a Boolean, * which signals whether the profile has been loaded or reused. */ - private Object[] getOrCreateProfile(Object key, Map map, String location, PortalService service) + private Object[] getOrCreateProfile(Object key, Map map, String location, PortalService service, Object factory) throws Exception { Object[] result; @@ -279,17 +317,17 @@ // load user profile map.put("type", "user"); - result = this.getProfile(key, map, location, service); + result = this.getProfile(key, map, location, service, factory); if (result[0] == null) { // load role profile map.put("type", "role"); - result = this.getProfile(key, map, location+"-role-"+keyMap.get("role"), null); + result = this.getProfile(key, map, location+"-role-"+keyMap.get("role"), service, factory); if (result[0] == null) { // load global profile map.put("type", "global"); - result = this.getProfile(key, map, location, null); + result = this.getProfile(key, map, location+"-global", service, factory); if (result[0] == null) { throw new SourceNotFoundException("Could not find global or role profile to create user profile."); @@ -327,7 +365,7 @@ * @return result[0] is the profile, result[1] is a Boolean, * which signals whether the profile has been loaded or reused. */ - private Object[] getProfile(Object key, Map map, String location, PortalService service) + private Object[] getProfile(Object key, Map map, String location, PortalService service, Object factory) throws Exception { MapSourceAdapter adapter = null; try { @@ -351,6 +389,8 @@ // load profile SourceValidity newValidity = (SourceValidity)validity[1]; Object object = adapter.loadProfile(key, map); + if (object != null) + this.prepareObject(object, factory); if (newValidity != null) { objects = new Object[] { object, newValidity }; this.setAttribute(location, objects, service); @@ -367,11 +407,11 @@ * @return result[0] is the profile, result[1] is a Boolean, * which signals whether the profile has been loaded or reused. */ - private Object[] getProfile(Object key, Map map, String location, Object[] validity, PortalService service, boolean forcedLoad) + private Object[] getProfile(Object key, Map map, String location, Object[] validity, PortalService service, Object factory, boolean forcedLoad) throws Exception { if (forcedLoad) { try { - return new Object[] {this.loadProfile(key, map, location, (SourceValidity)validity[1], service), Boolean.TRUE}; + return new Object[] {this.loadProfile(key, map, location, (SourceValidity)validity[1], service, factory), Boolean.TRUE}; } catch (SourceNotFoundException e) { return new Object[] {null, Boolean.FALSE}; } @@ -393,6 +433,8 @@ // load profile SourceValidity newValidity = (SourceValidity)validity[1]; Object object = adapter.loadProfile(key, map); + if (object != null) + this.prepareObject(object, factory); if (newValidity != null) { objects = new Object[] { object, newValidity }; this.setAttribute(location, objects, service); @@ -408,7 +450,7 @@ /** * Loads a profile and reuses the specified validity for storing if it is not null. */ - private Object loadProfile(Object key, Map map, String location, SourceValidity newValidity, PortalService service) + private Object loadProfile(Object key, Map map, String location, SourceValidity newValidity, PortalService service, Object factory) throws Exception { MapSourceAdapter adapter = null; try { @@ -417,6 +459,8 @@ if (newValidity == null) newValidity = adapter.getValidity(key, map); Object object = adapter.loadProfile(key, map); + if (object != null) + this.prepareObject(object, factory); if (newValidity != null) { Object[] objects = new Object[] { object, newValidity }; this.setAttribute(location, objects, service); @@ -480,6 +524,32 @@ } /** + * Prepares the object by using the specified factory. + */ + private void prepareObject(Object object, Object factory) + throws ProcessingException { + if (factory != null) { + if (object instanceof Layout) { + ((LayoutFactory)factory).prepareLayout((Layout)object); + } else if (object instanceof CopletDataManager) { + CopletFactory copletFactory = (CopletFactory)factory; + Iterator iterator = ((CopletDataManager)object).getCopletData().values().iterator(); + while (iterator.hasNext()) { + CopletData cd = (CopletData)iterator.next(); + copletFactory.prepare(cd); + } + } else if (object instanceof CopletInstanceDataManager) { + CopletFactory copletFactory = (CopletFactory)factory; + Iterator iterator = ((CopletInstanceDataManager)object).getCopletInstanceData().values().iterator(); + while (iterator.hasNext()) { + CopletInstanceData cid = (CopletInstanceData)iterator.next(); + copletFactory.prepare(cid); + } + } + } + } + + /** * If service is null the value is stored in this.attributes otherwise it is stored via the service. */ private void setAttribute(String key, Object value, PortalService service) { @@ -508,7 +578,7 @@ service = (PortalService) this.manager.lookup(PortalService.ROLE); attribute = SimpleProfileManager.class.getName()+"/"+service.getPortalName()+"/CopletInstanceData"; - CopletInstanceDataManager copletInstanceDataManager = (CopletInstanceDataManager)((Object[])this.attributes.get(attribute))[0]; + CopletInstanceDataManager copletInstanceDataManager = (CopletInstanceDataManager)((Object[])service.getAttribute(attribute))[0]; return copletInstanceDataManager.getCopletInstanceData(copletID); } catch (ComponentException e) { @@ -549,4 +619,4 @@ } } -} \ No newline at end of file +}