libreccm-legacy/ccm-cms/src/com/arsdigita/cms/AuthoringKit.java

295 lines
10 KiB
Java
Executable File

/*
* 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 <code>DataObject</code> is retrieved
* from the persistent storage mechanism with an <code>OID</code>
* specified by <i>oid</i>.
*
* @param oid The <code>OID</code> for the retrieved
* <code>DataObject</code>.
**/
public AuthoringKit(OID oid) throws DataObjectNotFoundException {
super(oid);
}
/**
* Constructor. The contained <code>DataObject</code> is retrieved
* from the persistent storage mechanism with an <code>OID</code>
* specified by <i>id</i> and
* <code>AuthoringKit.BASE_DATA_OBJECT_TYPE</code>.
*
* @param id The <code>id</code> for the retrieved
* <code>DataObject</code>.
**/
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;
}
}