public Component clone(String suffix, boolean fakeParent) { Component clone; if (fakeParent && this.parent != null) clone = new Component( this.id + suffix, this.type, new Component(this.parent.getId(), ComponentType.PANEL)); else if (this.parent != null) clone = new Component(this.id + suffix, this.type, this.parent); else clone = new Component(this.id + suffix, this.type); clone.attributes = attributes.clone(clone.getId()); clone.setAttributeId(ComponentState.NORMAL, clone.getId() + "NORMAL"); clone.setAttributeId(ComponentState.HOVER, clone.getId() + "HOVER"); clone.setAttributeId(ComponentState.CLICK, clone.getId() + "CLICK"); for (Component copy : directChildren) clone(copy, clone, suffix); return clone; }
/** * Returns a pair consisting of a MarshalledObject and attributes to be bound with the stub. * * @param obj The non-null object to store. * @param inAttrs The possible null attributes to store with object. * @return A non-null Result consisting of the MarshalledObject and attributes. */ private static DirStateFactory.Result jrmpObject(Object obj, Attributes inAttrs) throws NamingException { try { Object mobj = new MarshalledObject(obj); Attributes outAttrs = null; Attribute cname = null; Attribute tnames = null; Attribute objectClass = null; if (inAttrs != null) { // Get existing objectclass attribute objectClass = (Attribute) inAttrs.get("objectClass"); if (objectClass == null && !inAttrs.isCaseIgnored()) { // %%% workaround objectClass = (Attribute) inAttrs.get("objectclass"); } // No objectclasses supplied, use "top" to start if (objectClass == null) { objectClass = new BasicAttribute("objectClass", "top"); } else { objectClass = (Attribute) objectClass.clone(); } cname = inAttrs.get(CLASSNAME_ATTRID); tnames = inAttrs.get(CLASSNAMES_ATTRID); outAttrs = (Attributes) inAttrs.clone(); } else { outAttrs = new BasicAttributes(true); objectClass = new BasicAttribute("objectClass", "top"); } if (cname == null) { outAttrs.put(CLASSNAME_ATTRID, obj.getClass().getName()); } if (tnames == null) { Attribute tAttr = LdapCtxFactory.createTypeNameAttr(obj.getClass()); if (tAttr != null) { outAttrs.put(tAttr); } } boolean structural = (objectClass.size() == 0 || (objectClass.size() == 1 && objectClass.contains("top"))); if (structural) { objectClass.add(STRUCTURAL_OCID); } objectClass.add(MARSHALLED_OCID); outAttrs.put(objectClass); return new DirStateFactory.Result(mobj, outAttrs); } catch (java.io.IOException e) { NamingException ne = new NamingException("Cannot create MarshallObject for " + obj); ne.setRootCause(e); throw ne; } }