/* * Copyright (C) 2001-2004 Red Hat Inc. All Rights Reserved. * * This library 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 library 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 library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ package com.arsdigita.cms; import com.arsdigita.domain.DataObjectNotFoundException; import com.arsdigita.kernel.ACSObject; import com.arsdigita.persistence.DataAssociation; import com.arsdigita.persistence.DataObject; import com.arsdigita.persistence.DataQuery; import com.arsdigita.persistence.OID; import com.arsdigita.persistence.SessionManager; import java.math.BigDecimal; /** * An AuthoringKit contains a collection of {@link * com.arsdigita.cms.AuthoringStep authoring steps} that are used for * authoring a particular content type. * * @author Jack Chung (flattop@arsdigita.com) * @author Stanislav Freidin (sfreidin@arsdigita.com) * @version $Revision: #17 $ $Date: 2004/08/17 $ * @version $Id: AuthoringKit.java 2090 2010-04-17 08:04:14Z pboy $ */ public class AuthoringKit extends ACSObject { public static final String BASE_DATA_OBJECT_TYPE = "com.arsdigita.cms.AuthoringKit"; protected static final String CREATE_COMPONENT = "createComponent"; protected static final String CONTENT_TYPE = "contentType"; protected static final String STEPS = "authoringSteps"; private static final String LAST_STEP_QUERY = "com.arsdigita.cms.getLastAuthoringStepOrder"; private static final String LAST_STEP_ORDER = "stepOrder"; private static final String LAST_STEP_KIT_ID = "kitId"; /** * Default constructor. This creates a new authoring kit. **/ public AuthoringKit() { super(BASE_DATA_OBJECT_TYPE); } /** * Constructor. The contained DataObject is retrieved * from the persistent storage mechanism with an OID * specified by oid. * * @param oid The OID for the retrieved * DataObject. **/ public AuthoringKit(OID oid) throws DataObjectNotFoundException { super(oid); } /** * Constructor. The contained DataObject is retrieved * from the persistent storage mechanism with an OID * specified by id and * AuthoringKit.BASE_DATA_OBJECT_TYPE. * * @param id The id for the retrieved * DataObject. **/ public AuthoringKit(BigDecimal id) throws DataObjectNotFoundException { this(new OID(BASE_DATA_OBJECT_TYPE, id)); } public AuthoringKit(DataObject obj) { super(obj); } protected AuthoringKit(String type) { super(type); } /** * @return the base PDL object type for this kit. Child classes should * override this method to return the correct value */ public String getBaseDataObjectType() { return BASE_DATA_OBJECT_TYPE; } /** * Get the java classname for the component to create the content * item using this kit. */ public String getCreateComponent() { return (String) get(CREATE_COMPONENT); } /** * Set the java classname for the component to create the content * item using this kit. */ public void setCreateComponent(String component) { set(CREATE_COMPONENT, component); } /** * Get the ContentType associated with this kit. */ public ContentType getContentType() { DataObject type = (DataObject) get(CONTENT_TYPE); if (type == null) { return null; } else { return new ContentType(type); } } /** * Set the ContentType associated with this kit. */ protected void setContentType(ContentType type) { setAssociation(CONTENT_TYPE, type); } /** * @deprecated */ public AuthoringStep createStep(String label, String description, String component, BigDecimal ordering) { return createStep(label, null, description, null, component, ordering); } /** * Create a Step for this AuthoringKit. The Step created will * be saved. * @param labelKey Label Key for this step. It is used to look up * the actual value of the label located in the LabelBundle * @param labelBundle The name of the ResourceBundle where the * labelKey is located * @param descriptionKey Description Key for this step. It is used to * look up the actual value of the description * located in the DescriptionBundle * @param descriptionBundle The name of the ResourceBundle where the * descriptionKey is located * @param component The java classname of the component associated * with this kit. * @param ordering An ordering for this step in the kit. Lower number * appears in the beginning of the kit. */ public AuthoringStep createStep(String labelKey, String labelBundle, String descriptionKey, String descriptionBundle, String component, BigDecimal ordering) { AuthoringStep step = new AuthoringStep(); step.setLabelKey(labelKey); step.setLabelBundle(labelBundle); step.setDescriptionKey(descriptionKey); step.setDescriptionBundle(descriptionBundle); step.setComponent(component); //step needs to be saved in order to do the association (addStep). step.save(); addStep(step, ordering); return step; } /** * Add a Step to this AuthoringKit. If the step is already added * to the Kit, the ordering will be updated. * * @param step the step to add * @param ordering An ordering for this step in the kit. Lower number * appears in the beginning of the kit. * @return true is step is added and false if ordering is updated */ public boolean addStep(AuthoringStep step, BigDecimal ordering) { try { OID oid = new OID (AuthoringKitStepAssociation.BASE_DATA_OBJECT_TYPE); oid.set(AuthoringKitStepAssociation.KIT_ID, getID()); oid.set(AuthoringKitStepAssociation.STEP_ID, step.getID()); AuthoringKitStepAssociation assn = new AuthoringKitStepAssociation(oid); assn.setOrdering(ordering); assn.save(); return false; } catch (DataObjectNotFoundException e) { //this association does not exist, so add it AuthoringKitStepAssociation assn = new AuthoringKitStepAssociation(); assn.setKit(this); assn.setStep(step); assn.setOrdering(ordering); assn.save(); return true; } } /** * Create a new Step for this AuthoringKit, and add it to the kit. * The new Step will automatically be saved. * * @param label Label for this step. * @param description Description for this step. * @param component The java classname of the component associated * with this kit. * @return the new authoring step * @see #addStep(AuthoringStep, BigDecimal) */ public AuthoringStep createStep( String label, String description, String component ) { BigDecimal order = new BigDecimal(getLastOrdering().intValue() + 1); return createStep(label, description, component, order); } /** * Get the ordering of a step for this kit * @return the ordering, or null if the step is not associated to this * kit */ public BigDecimal getOrdering(AuthoringStep step) { try { OID oid = new OID (AuthoringKitStepAssociation.BASE_DATA_OBJECT_TYPE); oid.set(AuthoringKitStepAssociation.KIT_ID, getID()); oid.set(AuthoringKitStepAssociation.STEP_ID, step.getID()); AuthoringKitStepAssociation assn = new AuthoringKitStepAssociation(oid); return assn.getOrdering(); } catch (DataObjectNotFoundException e) { return null; } } /** * Get the ordering of the last step in the authoring kit. If the * kit contains no steps, return 0. */ public BigDecimal getLastOrdering() { DataQuery q = SessionManager.getSession().retrieveQuery(LAST_STEP_QUERY); q.setParameter(LAST_STEP_KIT_ID, getID()); q.next(); BigDecimal i = (BigDecimal)q.get(LAST_STEP_ORDER); q.close(); return i; } /** * Remove a step from this kit. * @return true is the step is removed, false otherwise. */ public boolean removeStep(AuthoringStep step) { try { OID oid = new OID (AuthoringKitStepAssociation.BASE_DATA_OBJECT_TYPE); oid.set(AuthoringKitStepAssociation.KIT_ID, getID()); oid.set(AuthoringKitStepAssociation.STEP_ID, step.getID()); AuthoringKitStepAssociation assn = new AuthoringKitStepAssociation(oid); assn.delete(); return true; } catch (DataObjectNotFoundException e) { //this association does not exist return false; } } /** * Get the steps for this kit sorted by the ordering */ public AuthoringStepCollection getSteps() { DataAssociation da = (DataAssociation) get(STEPS); AuthoringStepCollection steps = new AuthoringStepCollection(da.cursor()); steps.setOrder("link.ordering"); return steps; } }