Weitere Klassen für das Modul ccm-sci-types-organization.

git-svn-id: https://svn.libreccm.org/ccm/trunk@550 8810af33-2d31-482b-a856-94f89814c4df
master
jensp 2010-10-01 18:03:34 +00:00
parent ec4bc5fa78
commit 4623f9fedb
43 changed files with 3504 additions and 805 deletions

View File

@ -31,23 +31,6 @@ object type GenericOrganizationalUnit extends ContentPage {
reference key (cms_organizationalunits.organizationalunit_id); reference key (cms_organizationalunits.organizationalunit_id);
} }
// Parent <-> child relation organizationalunits to build department structures etc.
association {
GenericOrganizationalUnit[0..n] orgaunit_parent = join cms_organizationalunits.organizationalunit_id
to cms_organizationalunits_organizationalunit_map.orgaunit_children_id,
join cms_organizationalunits_organizationalunit_map.orgaunit_parent_id
to cms_organizationalunits.organizationalunit_id;
GenericOrganizationalUnit[0..n] orgaunit_children = join cms_organizationalunits.organizationalunit_id
to cms_organizationalunits_organizationalunit_map.orgaunit_parent_id,
join cms_organizationalunits_organizationalunit_map.orgaunit_children_id
to cms_organizationalunits.organizationalunit_id;
// Link attribute, allows it to customize the order which the childs will be shown.
Integer[0..1] orgaunit_children_order = cms_organizationalunits_organizationalunit_map.map_order INTEGER;
}
// Link for contact points. // Link for contact points.
association { association {

View File

@ -1,5 +1,6 @@
/* /*
* Copyright (c) 2010 Jens Pelzetter, for the Center of Social Politics of the University of Bremen * Copyright (c) 2010 Jens Pelzetter,
* for the Center of Social Politics of the University of Bremen
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License * modify it under the terms of the GNU Lesser General Public License
@ -33,7 +34,6 @@ import java.math.BigDecimal;
* An item of this content type can be linked with several other content types: * An item of this content type can be linked with several other content types:
* - Contact (0..n) * - Contact (0..n)
* - Person (0..n) * - Person (0..n)
* - GenericOrganizationalUnit (0..n) to build organizations structures.
* *
* @author Jens Pelzetter * @author Jens Pelzetter
* @version $Id$ * @version $Id$
@ -45,9 +45,6 @@ public class GenericOrganizationalUnit extends ContentPage {
public final static String CONTACTS = "contacts"; public final static String CONTACTS = "contacts";
public final static String CONTACT_TYPE = "contact_type"; public final static String CONTACT_TYPE = "contact_type";
public final static String CONTACT_ORDER = "contact_order"; public final static String CONTACT_ORDER = "contact_order";
public final static String ORGAUNIT_CHILDREN = "orgaunit_children";
public final static String ORGAUNIT_CHILDREN_ORDER =
"orgaunit_children_order";
public final static String PERSONS = "persons"; public final static String PERSONS = "persons";
public final static String ROLE = "role_name"; public final static String ROLE = "role_name";
public final static String PERSON_ORDER = "person_order"; public final static String PERSON_ORDER = "person_order";
@ -107,29 +104,6 @@ public class GenericOrganizationalUnit extends ContentPage {
return !this.getContacts().isEmpty(); return !this.getContacts().isEmpty();
} }
public GenericOrganizationalUnitChildrenCollection getOrgaUnitChildren() {
return new GenericOrganizationalUnitChildrenCollection((DataCollection) get(
ORGAUNIT_CHILDREN));
}
public void addOrgaUnitChildren(GenericOrganizationalUnit child) {
Assert.exists(child, GenericOrganizationalUnit.class);
DataObject link = add(ORGAUNIT_CHILDREN, child);
link.set(ORGAUNIT_CHILDREN_ORDER, Integer.valueOf((int) getOrgaUnitChildren().
size()));
}
public void removeOrgaUnitChildren(GenericOrganizationalUnit child) {
Assert.exists(child, GenericOrganizationalUnit.class);
remove(ORGAUNIT_CHILDREN, child);
}
public boolean hasOrgaUnitChildren() {
return !this.getOrgaUnitChildren().isEmpty();
}
public GenericOrganizationalUnitPersonCollection getPersons() { public GenericOrganizationalUnitPersonCollection getPersons() {
return new GenericOrganizationalUnitPersonCollection((DataCollection) get( return new GenericOrganizationalUnitPersonCollection((DataCollection) get(
PERSONS)); PERSONS));

View File

@ -1,187 +0,0 @@
/*
* Copyright (c) 2010 Jens Pelzetter, for the Center of Social Politics of the University of Bremen
*
* 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.contenttypes;
import com.arsdigita.domain.DomainCollection;
import com.arsdigita.persistence.DataCollection;
import com.arsdigita.persistence.DataObject;
import org.apache.log4j.Logger;
/**
* Collection class for the childs of a GenericOrganizationalUnit.
*
* @author Jens Pelzetter
*/
public class GenericOrganizationalUnitChildrenCollection
extends DomainCollection {
public static final String ORDER = "link.orgaunit_children_order";
public static final String CHILDREN_ORDER = "orgaunit_children_order";
private final static Logger s_log = Logger.getLogger(
GenericOrganizationalUnitChildrenCollection.class);
public GenericOrganizationalUnitChildrenCollection(
DataCollection dataCollection) {
super(dataCollection);
m_dataCollection.addOrder(ORDER);
}
/**
* Gets the value of the order attribute of the current association.
*
* @return Order value of the current item.
*/
public Integer getChildrenOrder() {
return (Integer) m_dataCollection.get(ORDER);
}
/**
* Sets the order attribute for the current association.
*
* @param order The new value for the order.
*/
public void setChildrenOrder(Integer order) {
DataObject link = (DataObject) this.get("link");
link.set(CHILDREN_ORDER, order);
}
/**
* Swaps the item {@code child} with the next one in the collection.
*
* @param child The child to swap with the next one.
* @throws IllegalArgumentException Thrown if the child object provided is
* not part of this collection, or if the child is the last one in the
* collection.
*/
public void swapWithNext(GenericOrganizationalUnit child) {
int currentPos = 0;
int currentIndex = 0;
int nextIndex = 0;
s_log.debug("Searching child...");
this.rewind();
while (this.next()) {
currentPos = this.getPosition();
currentIndex = this.getChildrenOrder();
s_log.debug(String.format("Position: %d(%d)/%d", currentPos,
currentIndex, this.size()));
s_log.debug(String.format("getChildrenOrder(): %d",
getChildrenOrder()));
if (this.getOrgaUnitChild().equals(child)) {
break;
}
}
if (currentPos == 0) {
throw new IllegalArgumentException(
String.format(
"The provided organizational unit is not "
+ "part of this collection."));
}
if (this.next()) {
nextIndex = this.getChildrenOrder();
} else {
throw new IllegalArgumentException(
"The provided organizational unit is the last "
+ "in the collection, so there is no next object "
+ "to swap with.");
}
this.rewind();
while (this.getPosition() != currentPos) {
this.next();
}
this.setChildrenOrder(nextIndex);
this.next();
this.setChildrenOrder(currentIndex);
this.rewind();
}
/**
* Swaps the item {@code child} with the previous one in the collection.
*
* @param child The child to swap with the previous one.
* @throws IllegalArgumentException Thrown if the child object provided is
* not part of this collection, or if the child is the first one in the
* collection.
*/
public void swapWithPrevious(GenericOrganizationalUnit child) {
int previousPos = 0;
int previousIndex = 0;
int currentPos = 0;
int currentIndex = 0;
s_log.debug("Searching child...");
this.rewind();
while (this.next()) {
currentPos = this.getPosition();
currentIndex = this.getChildrenOrder();
s_log.debug(String.format("Position: %d(%d)/%d", currentPos,
currentIndex, this.size()));
s_log.debug(String.format("getChildrenOrder(): %d",
getChildrenOrder()));
if (this.getOrgaUnitChild().equals(child)) {
break;
}
previousPos = currentPos;
previousIndex = currentIndex;
}
if (currentPos == 0) {
throw new IllegalArgumentException(
String.format(
"The provided organizational unit is not "
+ "part of this collection."));
}
if (previousPos == 0) {
throw new IllegalArgumentException(
String.format(
"The provided organizational unit is the first one in this "
+ "collection, so there is no previous one to switch "
+ "with."));
}
this.rewind();
while (this.getPosition() != previousPos) {
this.next();
}
this.setChildrenOrder(currentIndex);
this.next();
this.setChildrenOrder(previousIndex);
this.rewind();
}
/**
* Retrieves the current child.
*
* @return The GenericOrganizationalUnit at the cursors current position.
*/
public GenericOrganizationalUnit getOrgaUnitChild() {
return new GenericOrganizationalUnit(
m_dataCollection.getDataObject());
}
}

View File

@ -1,104 +0,0 @@
/*
* Copyright (c) 2010 Jens Pelzetter,
* for the Center of Social Politics of the University of Bremen
*
* 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.contenttypes.ui;
import com.arsdigita.bebop.FormData;
import com.arsdigita.bebop.FormProcessException;
import com.arsdigita.bebop.Label;
import com.arsdigita.bebop.PageState;
import com.arsdigita.bebop.SaveCancelSection;
import com.arsdigita.bebop.event.FormSectionEvent;
import com.arsdigita.cms.ContentType;
import com.arsdigita.cms.ItemSelectionModel;
import com.arsdigita.cms.contenttypes.GenericOrganizationalUnit;
import com.arsdigita.cms.contenttypes.util.ContenttypesGlobalizationUtil;
import com.arsdigita.cms.ui.ItemSearchWidget;
import com.arsdigita.cms.ui.authoring.BasicItemForm;
import org.apache.log4j.Logger;
/**
* Form for adding a child to an organization. To change the type of childs
* allowed, overwrite the {@link getChildDataObjectType()} method.
*
* @author Jens Pelzetter
*/
public class GenericOrganizationalUnitChildAddForm extends BasicItemForm {
private static final Logger s_log = Logger.getLogger(
GenericOrganizationalUnitChildAddForm.class);
private GenericOrganizationalUnitChildrenPropertiesStep m_step;
private ItemSearchWidget m_itemSearch;
private SaveCancelSection m_saveCancelSection;
private final String ITEM_SEARCH = "orgaunitChild";
private ItemSelectionModel m_itemModel;
public GenericOrganizationalUnitChildAddForm(ItemSelectionModel itemModel) {
this("ChildAddForm", itemModel);
}
public GenericOrganizationalUnitChildAddForm(String formName,
ItemSelectionModel itemModel) {
super(formName, itemModel);
}
@Override
protected void addWidgets() {
add(new Label(
(String) ContenttypesGlobalizationUtil.globalize(
"cms.contenttypes.ui.genericorgaunit.select_child").localize()));
this.m_itemSearch = new ItemSearchWidget(ITEM_SEARCH, ContentType.
findByAssociatedObjectType(
getChildDataObjectType()));
add(this.m_itemSearch);
}
@Override
public void init(FormSectionEvent fse) throws FormProcessException {
FormData data = fse.getFormData();
PageState state = fse.getPageState();
setVisible(state, true);
}
@Override
public void process(FormSectionEvent fse) throws FormProcessException {
FormData data = fse.getFormData();
PageState state = fse.getPageState();
GenericOrganizationalUnit parent = (GenericOrganizationalUnit) getItemSelectionModel().
getSelectedObject(state);
if (!(this.getSaveCancelSection().getCancelButton().isSelected(state))) {
parent.addOrgaUnitChildren((GenericOrganizationalUnit) data.get(
ITEM_SEARCH));
}
init(fse);
}
/**
*
* @return The BASE_DATA_OBJECT_TYPE of the childs allowed.
*/
protected String getChildDataObjectType() {
return GenericOrganizationalUnit.BASE_DATA_OBJECT_TYPE;
}
}

View File

@ -1,346 +0,0 @@
/*
* Copyright (c) 2010 Jens Pelzetter,
* for the Center of Social Politics of the University of Bremen
*
* 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.contenttypes.ui;
import com.arsdigita.bebop.Component;
import com.arsdigita.bebop.ControlLink;
import com.arsdigita.bebop.Label;
import com.arsdigita.bebop.PageState;
import com.arsdigita.bebop.Table;
import com.arsdigita.bebop.event.TableActionEvent;
import com.arsdigita.bebop.event.TableActionListener;
import com.arsdigita.bebop.table.TableCellRenderer;
import com.arsdigita.bebop.table.TableColumn;
import com.arsdigita.bebop.table.TableColumnModel;
import com.arsdigita.bebop.table.TableModel;
import com.arsdigita.bebop.table.TableModelBuilder;
import com.arsdigita.bebop.util.GlobalizationUtil;
import com.arsdigita.cms.ItemSelectionModel;
import com.arsdigita.cms.contenttypes.GenericOrganizationalUnit;
import com.arsdigita.cms.contenttypes.GenericOrganizationalUnitChildrenCollection;
import com.arsdigita.cms.contenttypes.util.ContenttypesGlobalizationUtil;
import com.arsdigita.cms.dispatcher.Utilities;
import com.arsdigita.util.LockableImpl;
import java.math.BigDecimal;
import org.apache.log4j.Logger;
/**
* Table for showing the childs of an organization.
*
* @author Jens Pelzetter
*/
public class GenericOrganizationalUnitChildTable extends Table implements
TableActionListener {
private final String TABLE_COL_EDIT = "table_col_edit";
private final String TABLE_COL_DEL = "table_col_del";
private final String TABLE_COL_UP = "table_col_up";
private final String TABLE_COL_DOWN = "table_col_down";
private ItemSelectionModel m_itemModel;
private static final Logger s_log =
Logger.getLogger(
GenericOrganizationalUnitChildTable.class);
public GenericOrganizationalUnitChildTable(
final ItemSelectionModel itemModel) {
super();
this.m_itemModel = itemModel;
setEmptyView(new Label(ContenttypesGlobalizationUtil.globalize(
"cms.contenttypes.ui.genericorgaunit.childs.none")));
TableColumnModel tabModel = getColumnModel();
/*tabModel.add(new TableColumn(
0,
ContenttypesGlobalizationUtil.globalize(
"cms.contenttypes.ui.genericorgaunit.child.order").localize(),
TABLE_COL_EDIT));*/
tabModel.add(new TableColumn(
0,
ContenttypesGlobalizationUtil.globalize(
"cms.contenttypes.ui.genericorgaunit.child.name").localize(),
TABLE_COL_EDIT));
tabModel.add(new TableColumn(
1,
ContenttypesGlobalizationUtil.globalize(
"cms.contenttypes.ui.genericorgaunit.child.action").localize(),
TABLE_COL_DEL));
tabModel.add(new TableColumn(
2,
ContenttypesGlobalizationUtil.globalize(
"cms.contenttypes.ui.genericorgaunit.child.up").localize(),
TABLE_COL_UP));
tabModel.add(new TableColumn(
3,
ContenttypesGlobalizationUtil.globalize(
"cms.contenttypes.ui.genericorgaunit.child.down").localize(),
TABLE_COL_DOWN));
setModelBuilder(new GenericOrganizationalUnitChildTableModelBuilder(
itemModel));
tabModel.get(0).setCellRenderer(new EditCellRenderer());
tabModel.get(1).setCellRenderer(new DeleteCellRenderer());
tabModel.get(2).setCellRenderer(new UpCellRenderer());
tabModel.get(3).setCellRenderer(new DownCellRenderer());
addTableActionListener(this);
}
private class GenericOrganizationalUnitChildTableModelBuilder extends LockableImpl
implements TableModelBuilder {
private ItemSelectionModel m_itemModel;
public GenericOrganizationalUnitChildTableModelBuilder(
ItemSelectionModel itemModel) {
m_itemModel = itemModel;
}
@Override
public TableModel makeModel(Table table, PageState state) {
table.getRowSelectionModel().clearSelection(state);
GenericOrganizationalUnit orgaunit = (GenericOrganizationalUnit) m_itemModel.
getSelectedObject(state);
return new GenericOrganizationalUnitChildTableModel(table, state,
orgaunit);
}
}
private class GenericOrganizationalUnitChildTableModel implements TableModel {
final private int MAX_DESC_LENGTH = 25;
private Table m_table;
private GenericOrganizationalUnitChildrenCollection m_childCollection;
private GenericOrganizationalUnit m_child;
private GenericOrganizationalUnitChildTableModel(Table table,
PageState state,
GenericOrganizationalUnit orgaunit) {
m_table = table;
m_childCollection = orgaunit.getOrgaUnitChildren();
}
@Override
public int getColumnCount() {
return m_table.getColumnModel().size();
}
@Override
public boolean nextRow() {
boolean ret;
if ((m_childCollection != null) && m_childCollection.next()) {
m_child = m_childCollection.getOrgaUnitChild();
ret = true;
} else {
ret = false;
}
return ret;
}
@Override
public Object getElementAt(int colIndex) {
switch (colIndex) {
/*case 0:
return m_childCollection.getChildrenOrder();*/
case 0:
return m_child.getName();
case 1:
return GlobalizationUtil.globalize("cms.ui.delete").localize();
default:
return null;
}
}
@Override
public Object getKeyAt(int colIndex) {
return m_child.getID();
}
}
private class EditCellRenderer extends LockableImpl implements
TableCellRenderer {
@Override
public Component getComponent(
Table table,
PageState state,
Object value,
boolean isSelected,
Object key,
int row,
int col) {
com.arsdigita.cms.SecurityManager securityManager = Utilities.
getSecurityManager(state);
GenericOrganizationalUnit orgaunit =
(GenericOrganizationalUnit) m_itemModel.
getSelectedObject(state);
boolean canEdit = securityManager.canAccess(
state.getRequest(),
com.arsdigita.cms.SecurityManager.EDIT_ITEM,
orgaunit);
if (canEdit) {
ControlLink link = new ControlLink(value.toString());
return link;
} else {
return new Label(value.toString());
}
}
}
private class DeleteCellRenderer extends LockableImpl implements
TableCellRenderer {
@Override
public Component getComponent(
Table table,
PageState state,
Object value,
boolean isSelected,
Object key,
int row,
int col) {
com.arsdigita.cms.SecurityManager securityManager = Utilities.
getSecurityManager(state);
GenericOrganizationalUnit orgaunit = (GenericOrganizationalUnit) m_itemModel.
getSelectedObject(state);
boolean canEdit = securityManager.canAccess(
state.getRequest(),
com.arsdigita.cms.SecurityManager.DELETE_ITEM,
orgaunit);
if (canEdit) {
ControlLink link = new ControlLink(value.toString());
link.setConfirmation((String) ContenttypesGlobalizationUtil.
globalize(
"cms.contenttypes.ui.genericorgaunit.confirm_delete").
localize());
return link;
} else {
return new Label(value.toString());
}
}
}
private class UpCellRenderer extends LockableImpl implements
TableCellRenderer {
@Override
public Component getComponent(
Table table,
PageState state,
Object value,
boolean isSelected,
Object key,
int row,
int col) {
/*com.arsdigita.cms.SecurityManager securityManager = Utilities.
getSecurityManager(state);
GenericOrganizationalUnit orgaunit = (GenericOrganizationalUnit) m_itemModel.
getSelectedObject(state);*/
/*GenericOrganizationalUnit orgaunit = (GenericOrganizationalUnit) m_itemModel.
getSelectedObject(state);
GenericOrganizationalUnitChildrenCollection children =
orgaunit.getOrgaUnitChildren();*/
s_log.debug(String.format("row = %d", row));
//s_log.debug(String.format("children.size = %d", children.size()));
if (0 == row) {
s_log.debug("row is first row in table, don't show 'up'-link...");
return new Label("");
} else {
ControlLink link = new ControlLink("up");
return link;
}
}
}
private class DownCellRenderer extends LockableImpl implements
TableCellRenderer {
@Override
public Component getComponent(
Table table,
PageState state,
Object value,
boolean isSelected,
Object key,
int row,
int col) {
/*com.arsdigita.cms.SecurityManager securityManager = Utilities.
getSecurityManager(state);
GenericOrganizationalUnit orgaunit = (GenericOrganizationalUnit) m_itemModel.
getSelectedObject(state);*/
GenericOrganizationalUnit orgaunit = (GenericOrganizationalUnit) m_itemModel.
getSelectedObject(state);
GenericOrganizationalUnitChildrenCollection children =
orgaunit.
getOrgaUnitChildren();
if ((children.size() - 1) == row) {
s_log.debug(
"Row is last row of table, don't show 'down'-link...");
return new Label("");
} else {
ControlLink link = new ControlLink("down");
return link;
}
}
}
@Override
public void cellSelected(TableActionEvent event) {
PageState state = event.getPageState();
GenericOrganizationalUnit child = new GenericOrganizationalUnit(new BigDecimal(event.
getRowKey().toString()));
GenericOrganizationalUnit parent = (GenericOrganizationalUnit) m_itemModel.
getSelectedObject(state);
GenericOrganizationalUnitChildrenCollection children =
parent.getOrgaUnitChildren();
TableColumn col = getColumnModel().get(event.getColumn().intValue());
if (col.getHeaderKey().toString().equals(TABLE_COL_EDIT)) {
} else if (col.getHeaderKey().toString().equals(TABLE_COL_DEL)) {
parent.removeOrgaUnitChildren(child);
} else if (col.getHeaderKey().equals(TABLE_COL_UP)) {
children.swapWithPrevious(child);
} else if (col.getHeaderKey().equals(TABLE_COL_DOWN)) {
children.swapWithNext(child);
}
}
@Override
public void headSelected(TableActionEvent event) {
throw new UnsupportedOperationException("Not supported yet.");
}
}

View File

@ -1,62 +0,0 @@
/*
* Copyright (c) 2010 Jens Pelzetter,
* for the Center of Social Politics of the University of Bremen
*
* 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.contenttypes.ui;
import com.arsdigita.cms.ItemSelectionModel;
import com.arsdigita.cms.contenttypes.util.ContenttypesGlobalizationUtil;
import com.arsdigita.cms.ui.authoring.AuthoringKitWizard;
import com.arsdigita.cms.ui.authoring.BasicItemForm;
import com.arsdigita.cms.ui.authoring.SimpleEditStep;
import com.arsdigita.cms.ui.workflow.WorkflowLockedComponentAccess;
/**
* Step for editing the childs of an organization (other organizations).
*
* @author Jens Pelzetter
*/
public class GenericOrganizationalUnitChildrenPropertiesStep extends SimpleEditStep {
private static String ADD_CHILD_SHEET_NAME = "addChild";
public GenericOrganizationalUnitChildrenPropertiesStep(
ItemSelectionModel itemModel,
AuthoringKitWizard parent) {
this(itemModel, parent, null);
}
public GenericOrganizationalUnitChildrenPropertiesStep(
ItemSelectionModel itemModel,
AuthoringKitWizard parent,
String prefix) {
super(itemModel, parent, prefix);
BasicItemForm addChildSheet = new GenericOrganizationalUnitChildAddForm(
itemModel);
add(ADD_CHILD_SHEET_NAME,
(String) ContenttypesGlobalizationUtil.globalize(
"cms.contenttypes.ui.genericorgaunit.add_child").localize(),
new WorkflowLockedComponentAccess(addChildSheet, itemModel),
addChildSheet.getSaveCancelSection().getCancelButton());
GenericOrganizationalUnitChildTable childrenTable =
new GenericOrganizationalUnitChildTable(itemModel);
setDisplayComponent(childrenTable);
}
}

View File

@ -109,9 +109,11 @@ public class PrivilegeDescriptor {
addChildPrivilege(ADMIN_NAME, name); addChildPrivilege(ADMIN_NAME, name);
s_log.warn(String.format("Creating privilege %s...", name)); s_log.warn(String.format("Creating privilege %s...", name));
// Constructor PrivilegeDescriptor is deprecated and should be // Constructor PrivilegeDescriptor is deprecated and should be
// replace the class method get(name) // replaced by the class method get(name),
//PrivilegeDescriptor desc = new PrivilegeDescriptor(name); // but this does not work under all circumstances. Further
PrivilegeDescriptor desc = get(name); // investigation of this issue is neccessary.
PrivilegeDescriptor desc = new PrivilegeDescriptor(name);
//PrivilegeDescriptor desc = get(name);
put(desc); put(desc);
return desc; return desc;
} }

View File

@ -184,7 +184,6 @@ public class CollectedVolumeArticlesTable
} else { } else {
Label label = new Label(value.toString()); Label label = new Label(value.toString());
return label; return label;
} }
} }
} }

View File

@ -3,7 +3,6 @@ package com.arsdigita.cms.contenttypes.ui;
import com.arsdigita.bebop.Component; import com.arsdigita.bebop.Component;
import com.arsdigita.bebop.Label; import com.arsdigita.bebop.Label;
import com.arsdigita.cms.ItemSelectionModel; import com.arsdigita.cms.ItemSelectionModel;
import com.arsdigita.cms.contenttypes.Monograph;
import com.arsdigita.cms.ui.authoring.AuthoringKitWizard; import com.arsdigita.cms.ui.authoring.AuthoringKitWizard;
import com.arsdigita.cms.ui.authoring.BasicPageForm; import com.arsdigita.cms.ui.authoring.BasicPageForm;
import com.arsdigita.cms.ui.authoring.SimpleEditStep; import com.arsdigita.cms.ui.authoring.SimpleEditStep;

View File

@ -4,7 +4,34 @@ import com.arsdigita.kernel.ACSObject;
import com.arsdigita.cms.*; import com.arsdigita.cms.*;
object type SciDepartment extends GenericOrganizationalUnit { object type SciDepartment extends GenericOrganizationalUnit {
String[0..1] description = ct_scidepartments.description; String[0..1] departmentDescription = ct_scidepartments.description;
reference key ( ct_scidepartments.organization_id ); reference key ( ct_scidepartments.department_id );
}
association {
SciDepartment[0..1] department = join ct_scidepartments.department_id
to ct_scidepartments_subdepartments_map.department_id,
join ct_scidepartments_subdepartments_map.subdepartment_id
to ct_scidepartments.department_id;
SciDepartment[0..n] subDepartments = join ct_scidepartments.department_id
to ct_scidepartments_subdepartments_map.subdepartment_id,
join ct_scidepartments_subdepartments_map.department_id
to ct_scidepartments.department_id;
Integer[0..1] subDepartmentOrder = ct_scidepartments_subdepartments_map.subdepartments_order INTEGER;
}
association {
SciDepartment[0..1] department = join ct_scidepartments.department_id
to ct_scidepartments_projects_map.department_id,
join ct_scidepartments_projects_map.project_id,
to ct_sciprojects.project_id;
SciProject[0..n] projects = join ct_sciprojects.project_id
to ct_scidepartments_projects_map.project_id,
join ct_scidepartments_projects_map.department_id
to ct_scidepartments.department_id;
Integer[0..1] projectOrder = ct_scidepartments_projects_map.projectorder INTEGER;
} }

View File

@ -4,7 +4,37 @@ import com.arsdigita.kernel.ACSObject;
import com.arsdigita.cms.*; import com.arsdigita.cms.*;
object type SciOrganization extends GenericOrganizationalUnit { object type SciOrganization extends GenericOrganizationalUnit {
String[0..1] description = ct_sciorganizations.description; String[0..1] organizationDescription = ct_sciorganizations.description;
reference key ( ct_sciorganizations.organization_id ); reference key ( ct_sciorganizations.organization_id );
} }
association {
SciOrganization[0..1] organization = join ct_sciorganizations.organization_id
to ct_sciorganizations_departments_map.organization_id,
join ct_sciorganizations_departments_map.department_id
to ct_scidepartments.department_id;
SciDepartment[0..n] departments = join ct_scidepartments.department_id
to ct_sciorganizations_departments_map.department_id,
join ct_sciorganizations_departments_map.organization_id
to ct_sciorganizations.organization_id;
Integer[0..1] departmentOrder = ct_sciorganizations_departments_map.department_order INTEGER;
}
association {
SciOrganization[0..1] organization = join ct_sciorganizations.organization_id
to ct_sciorganizations_projects_map.organization_id,
join ct_sciorganizations_projects_map.project_id
to ct_sciprojects.project_id;
SciProject[0..n] projects = join ct_sciprojects.project_id
to ct_sciorganizations_projects_map.project_id,
join ct_sciorganizations_projects_map.organization_id
to ct_sciorganizations.organization_id;
Integer[0..1] projectOrder = ct_sciorganizations_projects_map.project_order INTEGER;
}

View File

@ -7,8 +7,23 @@ object type SciProject extends GenericOrganizationalUnit {
Date[0..1] projectbegin = ct_sciprojects.projectbegin DATE; Date[0..1] projectbegin = ct_sciprojects.projectbegin DATE;
Date[0..1] projectend = ct_sciprojects.projectend DATE; Date[0..1] projectend = ct_sciprojects.projectend DATE;
String[0..1] description = ct_sciprojects.description VARCHAR(4096); String[0..1] projectDescription = ct_sciprojects.description VARCHAR(4096);
String[0..1] funding = ct_sciprojects.funding VARCHAR(2048); String[0..1] funding = ct_sciprojects.funding VARCHAR(2048);
reference key ( ct_sciprojects.organization_id ); reference key ( ct_sciprojects.project_id );
}
association {
SciProject[0..1] project = join ct_sciprojects.project_id
to ct_sciprojects_subprojects_map.project_id,
join ct_sciprojects_subprojects_map.subproject_id
to ct_sciprojects.project_id;
SciProject[0..n] subProjects = join ct_sciprojects.project_id
to ct_sciprojects_subprojects_map.subproject_id,
join ct_sciprojects_subprojects_map.project_id
to ct_sciprojects.project_id;
Integer[0..1] subProjectOrder = ct_sciprojects_subprojects_map.subprojectorder INTEGER;
} }

View File

@ -1,8 +1,10 @@
package com.arsdigita.cms.contenttypes; package com.arsdigita.cms.contenttypes;
import com.arsdigita.domain.DataObjectNotFoundException; import com.arsdigita.domain.DataObjectNotFoundException;
import com.arsdigita.persistence.DataCollection;
import com.arsdigita.persistence.DataObject; import com.arsdigita.persistence.DataObject;
import com.arsdigita.persistence.OID; import com.arsdigita.persistence.OID;
import com.arsdigita.util.Assert;
import java.math.BigDecimal; import java.math.BigDecimal;
/** /**
@ -11,7 +13,11 @@ import java.math.BigDecimal;
*/ */
public class SciDepartment extends GenericOrganizationalUnit { public class SciDepartment extends GenericOrganizationalUnit {
public static final String DESCRIPTION = "description"; public static final String DEPARTMENT_DESCRIPTION = "departmentDescription";
public static final String SUBDEPARTMENTS = "subDepartments";
public static final String SUBDEPARTMENT_ORDER = "subDepartmentOrder";
public static final String PROJECTS = "projects";
public static final String PROJECT_ORDER = "projectOrder";
public static final String BASE_DATA_OBJECT_TYPE = public static final String BASE_DATA_OBJECT_TYPE =
"com.arsdigita.cms.contenttypes.SciDepartment"; "com.arsdigita.cms.contenttypes.SciDepartment";
@ -35,11 +41,59 @@ public class SciDepartment extends GenericOrganizationalUnit {
super(type); super(type);
} }
public String getDescription() { public String getDepartmentDescription() {
return (String) get(DESCRIPTION); return (String) get(DEPARTMENT_DESCRIPTION);
} }
public void setDescription(String description) { public void setDepartmentDescription(String description) {
set(DESCRIPTION, description); set(DEPARTMENT_DESCRIPTION, description);
}
public SciDepartmentSubDepartmentsCollection getSubDepartments() {
return new SciDepartmentSubDepartmentsCollection(
(DataCollection) get(SUBDEPARTMENTS));
}
public void addSubDepartment(SciDepartment subDepartment) {
Assert.exists(subDepartment, SciDepartment.class);
DataObject link = add(SUBDEPARTMENTS, subDepartment);
link.set(SUBDEPARTMENT_ORDER, Integer.valueOf((int) getSubDepartments().
size()));
}
public void removeSubDepartment(SciDepartment subDepartment) {
Assert.exists(subDepartment, SciDepartment.class);
remove(SUBDEPARTMENTS, subDepartment);
}
public boolean hasSubDepartments() {
return !this.getSubDepartments().isEmpty();
}
public SciDepartmentProjectsCollection getProjects() {
return new SciDepartmentProjectsCollection(
(DataCollection) get(PROJECTS));
}
public void addProject(SciProject project) {
Assert.exists(project, SciProject.class);
DataObject link = add(PROJECTS, project);
link.set(PROJECT_ORDER,
Integer.valueOf((int) getProjects().size()));
}
public void removeProject(SciProject project) {
Assert.exists(project, SciProject.class);
remove(PROJECTS, project);
}
public boolean hasProjects() {
return !this.getProjects().isEmpty();
} }
} }

View File

@ -0,0 +1,154 @@
/*
* Copyright (c) 2010 Jens Pelzetter,
* for the Center of Social Politics of the University of Bremen
*
* 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.contenttypes;
import com.arsdigita.domain.DomainCollection;
import com.arsdigita.persistence.DataCollection;
import com.arsdigita.persistence.DataObject;
import org.apache.log4j.Logger;
/**
*
* @author Jens Pelzetter
*/
public class SciDepartmentProjectsCollection extends DomainCollection {
public String ORDER = "projectOrder";
public String LINKORDER = "link.projectOrder";
private static final Logger s_log =
Logger.getLogger(SciDepartmentProjectsCollection.class);
public SciDepartmentProjectsCollection(DataCollection dataCollection) {
super(dataCollection);
m_dataCollection.addOrder(LINKORDER);
}
public Integer getProjectOrder() {
return (Integer) m_dataCollection.get(LINKORDER);
}
public void setProjectOrder(Integer order) {
DataObject link = (DataObject) this.get("link");
link.set(ORDER, order);
}
public void swapWithNext(SciProject project) {
int currentPosition = 0;
int currentIndex = 0;
int nextIndex = 0;
s_log.debug("Searching project...");
this.rewind();
while (this.next()) {
currentPosition = this.getPosition();
currentIndex = this.getProjectOrder();
s_log.debug(String.format("Position: %d(%d)/%d", currentPosition,
currentIndex, this.size()));
s_log.debug(String.format("getProjectOrder(): %d",
getProjectOrder()));
if (this.getProject().equals(project)) {
break;
}
}
if (currentPosition == 0) {
throw new IllegalArgumentException(
String.format(
"The provided project is not "
+ "part of this collection."));
}
if (this.next()) {
nextIndex = this.getProjectOrder();
} else {
throw new IllegalArgumentException(
"The provided project is the last "
+ "in the collection, so there is no next object "
+ "to swap with.");
}
this.rewind();
while (this.getPosition() != currentPosition) {
this.next();
}
this.setProjectOrder(nextIndex);
this.next();
this.setProjectOrder(currentIndex);
this.rewind();
}
public void swapWithPrevious(SciProject project) {
int previousPosition = 0;
int previousIndex = 0;
int currentPosition = 0;
int currentIndex = 0;
s_log.debug("Searching project...");
this.rewind();
while (this.next()) {
currentPosition = this.getPosition();
currentIndex = this.getProjectOrder();
s_log.debug(String.format("Position: %d(%d)/%d", currentPosition,
currentIndex, this.size()));
s_log.debug(String.format("getProjectOrder(): %d",
getProjectOrder()));
if (this.getProject().equals(project)) {
break;
}
previousPosition = currentPosition;
previousIndex = currentIndex;
}
if (currentPosition == 0) {
throw new IllegalArgumentException(
String.format(
"The provided project is not "
+ "part of this collection."));
}
if (previousPosition == 0) {
throw new IllegalArgumentException(
String.format(
"The provided project is the first one in this "
+ "collection, so there is no previous one to switch "
+ "with."));
}
this.rewind();
while (this.getPosition() != previousPosition) {
this.next();
}
this.setProjectOrder(currentIndex);
this.next();
this.setProjectOrder(previousIndex);
this.rewind();
}
public SciProject getProject() {
return new SciProject(m_dataCollection.getDataObject());
}
}

View File

@ -0,0 +1,153 @@
/*
* Copyright (c) 2010 Jens Pelzetter,
* for the Center of Social Politics of the University of Bremen
*
* 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.contenttypes;
import com.arsdigita.domain.DomainCollection;
import com.arsdigita.persistence.DataCollection;
import com.arsdigita.persistence.DataObject;
import org.apache.log4j.Logger;
/**
*
* @author Jens Pelzetter
*/
public class SciDepartmentSubDepartmentsCollection extends DomainCollection {
public String ORDER = "subDepartmentOrder";
public String LINKORDER = "link.subDepartmentOrder";
private static final Logger s_log =
Logger.getLogger(SciDepartmentSubDepartmentsCollection.class);
public SciDepartmentSubDepartmentsCollection(DataCollection dataCollection) {
super(dataCollection);
m_dataCollection.addOrder(LINKORDER);
}
public Integer getSubDepartmentOrder() {
return (Integer) m_dataCollection.get(LINKORDER);
}
public void setSubDepartmentOrder(Integer order) {
DataObject link = (DataObject) this.get("link");
link.set(ORDER, order);
}
public void swapWithNext(SciDepartment department) {
int currentPosition = 0;
int currentIndex = 0;
int nextIndex = 0;
s_log.debug("Searching department...");
this.rewind();
while (this.next()) {
currentPosition = this.getPosition();
currentIndex = this.getSubDepartmentOrder();
s_log.debug(String.format("Position: %d(%d)/%d", currentPosition,
currentIndex, this.size()));
s_log.debug(String.format("getDepartmentOrder(): %d",
getSubDepartmentOrder()));
if (this.getSubDepartment().equals(department)) {
break;
}
}
if (currentPosition == 0) {
throw new IllegalArgumentException(
String.format(
"The provided department is not "
+ "part of this collection."));
}
if (this.next()) {
nextIndex = this.getSubDepartmentOrder();
} else {
throw new IllegalArgumentException(
"The provided department is the last "
+ "in the collection, so there is no next object "
+ "to swap with.");
}
this.rewind();
while (this.getPosition() != currentPosition) {
this.next();
}
this.setSubDepartmentOrder(nextIndex);
this.next();
this.setSubDepartmentOrder(currentIndex);
this.rewind();
}
public void swapWithPrevious(SciDepartment department) {
int previousPosition = 0;
int previousIndex = 0;
int currentPosition = 0;
int currentIndex = 0;
s_log.debug("Searching department...");
this.rewind();
while (this.next()) {
currentPosition = this.getPosition();
currentIndex = this.getSubDepartmentOrder();
s_log.debug(String.format("Position: %d(%d)/%d", currentPosition,
currentIndex, this.size()));
s_log.debug(String.format("getDepartmentOrder(): %d",
getSubDepartmentOrder()));
if (this.getSubDepartment().equals(department)) {
break;
}
previousPosition = currentPosition;
previousIndex = currentIndex;
}
if (currentPosition == 0) {
throw new IllegalArgumentException(
String.format(
"The provided department is not "
+ "part of this collection."));
}
if (previousPosition == 0) {
throw new IllegalArgumentException(
String.format(
"The provided department is the first one in this "
+ "collection, so there is no previous one to switch "
+ "with."));
}
this.rewind();
while (this.getPosition() != previousPosition) {
this.next();
}
this.setSubDepartmentOrder(currentIndex);
this.next();
this.setSubDepartmentOrder(previousIndex);
this.rewind();
}
public SciDepartment getSubDepartment() {
return new SciDepartment(m_dataCollection.getDataObject());
}
}

View File

@ -1,8 +1,10 @@
package com.arsdigita.cms.contenttypes; package com.arsdigita.cms.contenttypes;
import com.arsdigita.domain.DataObjectNotFoundException; import com.arsdigita.domain.DataObjectNotFoundException;
import com.arsdigita.persistence.DataCollection;
import com.arsdigita.persistence.DataObject; import com.arsdigita.persistence.DataObject;
import com.arsdigita.persistence.OID; import com.arsdigita.persistence.OID;
import com.arsdigita.util.Assert;
import java.math.BigDecimal; import java.math.BigDecimal;
/** /**
@ -11,9 +13,14 @@ import java.math.BigDecimal;
*/ */
public class SciOrganization extends GenericOrganizationalUnit { public class SciOrganization extends GenericOrganizationalUnit {
public static final String DESCRIPTION = "description"; public static final String ORGANIZATION_DESCRIPTION =
"organizationDescription";
public static final String DEPARTMENTS = "departments";
public static final String DEPARTMENT_ORDER = "departmentOrder";
public static final String PROJECTS ="projects";
public static final String PROJECT_ORDER = "projectOrder";
public static final String BASE_DATA_OBJECT_TYPE = public static final String BASE_DATA_OBJECT_TYPE =
"com.arsdigita.cms.contenttypes.SciOrganization"; "com.arsdigita.cms.contenttypes.SciOrganization";
public SciOrganization() { public SciOrganization() {
this(BASE_DATA_OBJECT_TYPE); this(BASE_DATA_OBJECT_TYPE);
@ -35,11 +42,58 @@ public class SciOrganization extends GenericOrganizationalUnit {
super(type); super(type);
} }
public String getDescription() { public String getOrganizationDescription() {
return (String) get(DESCRIPTION); return (String) get(ORGANIZATION_DESCRIPTION);
} }
public void setDescription(String description) { public void setOrganizationDescription(String description) {
set(DESCRIPTION, description); set(ORGANIZATION_DESCRIPTION, description);
}
public SciOrganizationDepartmentsCollection getDepartments() {
return new SciOrganizationDepartmentsCollection(
(DataCollection) get(DEPARTMENTS));
}
public void addDepartment(SciDepartment department) {
Assert.exists(department, SciDepartment.class);
DataObject link = add(DEPARTMENTS, department);
link.set(DEPARTMENT_ORDER,
Integer.valueOf((int) getDepartments().size()));
}
public void removeDepartment(SciDepartment department) {
Assert.exists(department, SciDepartment.class);
remove(DEPARTMENTS, department);
}
public boolean hasDepartments() {
return !this.getDepartments().isEmpty();
}
public SciOrganizationProjectsCollection getProjects() {
return new SciOrganizationProjectsCollection(
(DataCollection) get(PROJECTS));
}
public void addProject(SciProject project) {
Assert.exists(project, SciProject.class);
DataObject link = add(PROJECTS, project);
link.set(PROJECT_ORDER, Integer.valueOf((int) getProjects().size()));
}
public void removeProject(SciProject project) {
Assert.exists(project, SciProject.class);
remove(PROJECTS, project);
}
public boolean hasProjects() {
return !this.getProjects().isEmpty();
} }
} }

View File

@ -0,0 +1,153 @@
/*
* Copyright (c) 2010 Jens Pelzetter,
* for the Center of Social Politics of the University of Bremen
*
* 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.contenttypes;
import com.arsdigita.domain.DomainCollection;
import com.arsdigita.persistence.DataCollection;
import com.arsdigita.persistence.DataObject;
import org.apache.log4j.Logger;
/**
*
* @author Jens Pelzetter
*/
public class SciOrganizationDepartmentsCollection extends DomainCollection {
public String ORDER = "departmentOrder";
public String LINKORDER = "link.departmentOrder";
private static final Logger s_log =
Logger.getLogger(SciOrganizationDepartmentsCollection.class);
public SciOrganizationDepartmentsCollection(DataCollection dataCollection) {
super(dataCollection);
m_dataCollection.addOrder(LINKORDER);
}
public Integer getDepartmentOrder() {
return (Integer) m_dataCollection.get(LINKORDER);
}
public void setDepartmentOrder(Integer order) {
DataObject link = (DataObject) this.get("link");
link.set(ORDER, order);
}
public void swapWithNext(SciDepartment department) {
int currentPosition = 0;
int currentIndex = 0;
int nextIndex = 0;
s_log.debug("Searching department...");
this.rewind();
while (this.next()) {
currentPosition = this.getPosition();
currentIndex = this.getDepartmentOrder();
s_log.debug(String.format("Position: %d(%d)/%d", currentPosition,
currentIndex, this.size()));
s_log.debug(String.format("getDepartmentOrder(): %d",
getDepartmentOrder()));
if (this.getDepartment().equals(department)) {
break;
}
}
if (currentPosition == 0) {
throw new IllegalArgumentException(
String.format(
"The provided department is not "
+ "part of this collection."));
}
if (this.next()) {
nextIndex = this.getDepartmentOrder();
} else {
throw new IllegalArgumentException(
"The provided department is the last "
+ "in the collection, so there is no next object "
+ "to swap with.");
}
this.rewind();
while (this.getPosition() != currentPosition) {
this.next();
}
this.setDepartmentOrder(nextIndex);
this.next();
this.setDepartmentOrder(currentIndex);
this.rewind();
}
public void swapWithPrevious(SciDepartment department) {
int previousPosition = 0;
int previousIndex = 0;
int currentPosition = 0;
int currentIndex = 0;
s_log.debug("Searching department...");
this.rewind();
while (this.next()) {
currentPosition = this.getPosition();
currentIndex = this.getDepartmentOrder();
s_log.debug(String.format("Position: %d(%d)/%d", currentPosition,
currentIndex, this.size()));
s_log.debug(String.format("getDepartmentOrder(): %d",
getDepartmentOrder()));
if (this.getDepartment().equals(department)) {
break;
}
previousPosition = currentPosition;
previousIndex = currentIndex;
}
if (currentPosition == 0) {
throw new IllegalArgumentException(
String.format(
"The provided department is not "
+ "part of this collection."));
}
if (previousPosition == 0) {
throw new IllegalArgumentException(
String.format(
"The provided department is the first one in this "
+ "collection, so there is no previous one to switch "
+ "with."));
}
this.rewind();
while (this.getPosition() != previousPosition) {
this.next();
}
this.setDepartmentOrder(currentIndex);
this.next();
this.setDepartmentOrder(previousIndex);
this.rewind();
}
public SciDepartment getDepartment() {
return new SciDepartment(m_dataCollection.getDataObject());
}
}

View File

@ -0,0 +1,154 @@
/*
* Copyright (c) 2010 Jens Pelzetter,
* for the Center of Social Politics of the University of Bremen
*
* 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.contenttypes;
import com.arsdigita.domain.DomainCollection;
import com.arsdigita.persistence.DataCollection;
import com.arsdigita.persistence.DataObject;
import org.apache.log4j.Logger;
/**
*
* @author Jens Pelzetter
*/
public class SciOrganizationProjectsCollection extends DomainCollection {
public String ORDER = "projectOrder";
public String LINKORDER = "link.projectOrder";
private static final Logger s_log =
Logger.getLogger(SciOrganizationProjectsCollection.class);
public SciOrganizationProjectsCollection(DataCollection dataCollection) {
super(dataCollection);
m_dataCollection.addOrder(LINKORDER);
}
public Integer getProjectOrder() {
return (Integer) m_dataCollection.get(LINKORDER);
}
public void setProjectOrder(Integer order) {
DataObject link = (DataObject) this.get("link");
link.set(ORDER, order);
}
public void swapWithNext(SciProject project) {
int currentPosition = 0;
int currentIndex = 0;
int nextIndex = 0;
s_log.debug("Searching project...");
this.rewind();
while (this.next()) {
currentPosition = this.getPosition();
currentIndex = this.getProjectOrder();
s_log.debug(String.format("Position: %d(%d)/%d", currentPosition,
currentIndex, this.size()));
s_log.debug(String.format("getProjectOrder(): %d",
getProjectOrder()));
if (this.getProject().equals(project)) {
break;
}
}
if (currentPosition == 0) {
throw new IllegalArgumentException(
String.format(
"The provided project is not "
+ "part of this collection."));
}
if (this.next()) {
nextIndex = this.getProjectOrder();
} else {
throw new IllegalArgumentException(
"The provided project is the last "
+ "in the collection, so there is no next object "
+ "to swap with.");
}
this.rewind();
while (this.getPosition() != currentPosition) {
this.next();
}
this.setProjectOrder(nextIndex);
this.next();
this.setProjectOrder(currentIndex);
this.rewind();
}
public void swapWithPrevious(SciProject project) {
int previousPosition = 0;
int previousIndex = 0;
int currentPosition = 0;
int currentIndex = 0;
s_log.debug("Searching project...");
this.rewind();
while (this.next()) {
currentPosition = this.getPosition();
currentIndex = this.getProjectOrder();
s_log.debug(String.format("Position: %d(%d)/%d", currentPosition,
currentIndex, this.size()));
s_log.debug(String.format("getProjectOrder(): %d",
getProjectOrder()));
if (this.getProject().equals(project)) {
break;
}
previousPosition = currentPosition;
previousIndex = currentIndex;
}
if (currentPosition == 0) {
throw new IllegalArgumentException(
String.format(
"The provided project is not "
+ "part of this collection."));
}
if (previousPosition == 0) {
throw new IllegalArgumentException(
String.format(
"The provided project is the first one in this "
+ "collection, so there is no previous one to switch "
+ "with."));
}
this.rewind();
while (this.getPosition() != previousPosition) {
this.next();
}
this.setProjectOrder(currentIndex);
this.next();
this.setProjectOrder(previousIndex);
this.rewind();
}
public SciProject getProject() {
return new SciProject(m_dataCollection.getDataObject());
}
}

View File

@ -1,8 +1,29 @@
/*
* Copyright (c) 2010 Jens Pelzetter,
* for the Center of Social Politics of the University of Bremen
*
* 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.contenttypes; package com.arsdigita.cms.contenttypes;
import com.arsdigita.domain.DataObjectNotFoundException; import com.arsdigita.domain.DataObjectNotFoundException;
import com.arsdigita.persistence.DataCollection;
import com.arsdigita.persistence.DataObject; import com.arsdigita.persistence.DataObject;
import com.arsdigita.persistence.OID; import com.arsdigita.persistence.OID;
import com.arsdigita.util.Assert;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Date; import java.util.Date;
@ -10,20 +31,22 @@ import java.util.Date;
* *
* @author Jens Pelzetter * @author Jens Pelzetter
*/ */
public class SciProject extends GenericOrganizationalUnit{ public class SciProject extends GenericOrganizationalUnit {
public static final String BEGIN = "projectbegin"; public static final String BEGIN = "projectbegin";
public static final String END = "projectend"; public static final String END = "projectend";
public static final String DESCRIPTION = "description"; public static final String PROJECT_DESCRIPTION = "projectDescription";
public static final String FUNDING = "funding"; public static final String FUNDING = "funding";
public static final String SUBPROJECTS = "subProjects";
public static final String SUBPROJECT_ORDER = "subProjectOrder";
public static final String BASE_DATA_OBJECT_TYPE = public static final String BASE_DATA_OBJECT_TYPE =
"com.arsdigita.cms.contenttypes.SciProject"; "com.arsdigita.cms.contenttypes.SciProject";
public SciProject() { public SciProject() {
super(BASE_DATA_OBJECT_TYPE); super(BASE_DATA_OBJECT_TYPE);
} }
public SciProject(BigDecimal id ) throws DataObjectNotFoundException{ public SciProject(BigDecimal id) throws DataObjectNotFoundException {
this(new OID(BASE_DATA_OBJECT_TYPE, id)); this(new OID(BASE_DATA_OBJECT_TYPE, id));
} }
@ -55,12 +78,12 @@ public class SciProject extends GenericOrganizationalUnit{
set(END, end); set(END, end);
} }
public String getDescription() { public String getProjectDescription() {
return (String) get(DESCRIPTION); return (String) get(PROJECT_DESCRIPTION);
} }
public void setDescription(String description) { public void setProjectDescription(String description) {
set(DESCRIPTION, description); set(PROJECT_DESCRIPTION, description);
} }
public String getFunding() { public String getFunding() {
@ -71,4 +94,27 @@ public class SciProject extends GenericOrganizationalUnit{
set(FUNDING, funding); set(FUNDING, funding);
} }
public SciProjectSubProjectsCollection getSubProjects() {
return new SciProjectSubProjectsCollection(
(DataCollection) get(SUBPROJECTS));
}
public void addSubProject(SciProject project) {
Assert.exists((project), SciProject.class);
DataObject link = add(SUBPROJECTS, project);
link.set(SUBPROJECT_ORDER,
Integer.valueOf((int) getSubProjects().size()));
}
public void removeSubProject(SciProject project) {
Assert.exists((project), SciProject.class);
remove(SUBPROJECTS, project);
}
public boolean hasSubProjects() {
return !this.getSearchSummary().isEmpty();
}
} }

View File

@ -1,8 +1,3 @@
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.arsdigita.cms.contenttypes; package com.arsdigita.cms.contenttypes;
/** /**

View File

@ -0,0 +1,154 @@
/*
* Copyright (c) 2010 Jens Pelzetter,
* for the Center of Social Politics of the University of Bremen
*
* 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.contenttypes;
import com.arsdigita.domain.DomainCollection;
import com.arsdigita.persistence.DataCollection;
import com.arsdigita.persistence.DataObject;
import org.apache.log4j.Logger;
/**
*
* @author Jens Pelzetter
*/
public class SciProjectSubProjectsCollection extends DomainCollection {
public String ORDER = "subProjectOrder";
public String LINKORDER = "link.subProjectOrder";
private static final Logger s_log =
Logger.getLogger(
SciProjectSubProjectsCollection.class);
public SciProjectSubProjectsCollection(DataCollection dataCollection) {
super(dataCollection);
m_dataCollection.addOrder(LINKORDER);
}
public Integer getSubProjectOrder() {
return (Integer) m_dataCollection.get(LINKORDER);
}
public void setSubProjectOrder(Integer order) {
DataObject link = (DataObject) this.get("link");
link.set(ORDER, order);
}
public void swapWithNext(SciSubProject subproject) {
int currentPosition = 0;
int currentIndex = 0;
int nextIndex = 0;
s_log.debug("Searching subproject...");
this.rewind();
while (this.next()) {
currentPosition = this.getPosition();
currentIndex = this.getSubProjectOrder();
s_log.debug(String.format("Position: %d(%d)/%d", currentPosition,
currentIndex, this.size()));
s_log.debug(String.format("getSubProjectOrder(): %d",
getSubProjectOrder()));
if (this.getSubProject().equals(subproject)) {
break;
}
}
if (currentPosition == 0) {
throw new IllegalArgumentException(
String.format(
"The provided subproject is not "
+ "part of this collection."));
}
if (this.next()) {
nextIndex = this.getSubProjectOrder();
} else {
throw new IllegalArgumentException(
"The provided subproject is the last "
+ "in the collection, so there is no next object "
+ "to swap with.");
}
this.rewind();
while (this.getPosition() != currentPosition) {
this.next();
}
this.setSubProjectOrder(nextIndex);
this.next();
this.setSubProjectOrder(currentIndex);
this.rewind();
}
public void swapWithPrevious(SciSubProject subproject) {
int previousPosition = 0;
int previousIndex = 0;
int currentPosition = 0;
int currentIndex = 0;
s_log.debug("Searching subproject...");
this.rewind();
while (this.next()) {
currentPosition = this.getPosition();
currentIndex = this.getSubProjectOrder();
s_log.debug(String.format("Position: %d(%d)/%d", currentPosition,
currentIndex, this.size()));
s_log.debug(String.format("getSubProjectOrder(): %d",
getSubProjectOrder()));
if (this.getSubProject().equals(subproject)) {
break;
}
previousPosition = currentPosition;
previousIndex = currentIndex;
}
if (currentPosition == 0) {
throw new IllegalArgumentException(
String.format(
"The provided subproject is not "
+ "part of this collection."));
}
if (previousPosition == 0) {
throw new IllegalArgumentException(
String.format(
"The provided subproject is the first one in this "
+ "collection, so there is no previous one to switch "
+ "with."));
}
this.rewind();
while (this.getPosition() != previousPosition) {
this.next();
}
this.setSubProjectOrder(currentIndex);
this.next();
this.setSubProjectOrder(previousIndex);
this.rewind();
}
public SciSubProject getSubProject() {
return new SciProject(m_dataCollection.getDataObject());
}
}

View File

@ -0,0 +1,67 @@
package com.arsdigita.cms.contenttypes.ui;
import com.arsdigita.bebop.FormData;
import com.arsdigita.bebop.FormProcessException;
import com.arsdigita.bebop.Label;
import com.arsdigita.bebop.PageState;
import com.arsdigita.bebop.event.FormInitListener;
import com.arsdigita.bebop.event.FormProcessListener;
import com.arsdigita.bebop.event.FormSectionEvent;
import com.arsdigita.cms.ContentType;
import com.arsdigita.cms.ItemSelectionModel;
import com.arsdigita.cms.contenttypes.SciDepartment;
import com.arsdigita.cms.contenttypes.SciProject;
import com.arsdigita.cms.ui.ItemSearchWidget;
import com.arsdigita.cms.ui.authoring.BasicItemForm;
/**
*
* @author Jens Pelzetter
*/
public class SciDepartmentProjectAddForm
extends BasicItemForm
implements FormProcessListener,
FormInitListener {
private ItemSearchWidget m_itemSearch;
private final String ITEM_SEARCH = "projects";
public SciDepartmentProjectAddForm(ItemSelectionModel itemModel) {
super("ProjectsAddForm", itemModel);
}
@Override
protected void addWidgets() {
add(new Label((String) SciOrganizationGlobalizationUtil.globalize(
"sciorganization.ui.department.select_project").localize()));
m_itemSearch = new ItemSearchWidget(
ITEM_SEARCH,
ContentType.findByAssociatedObjectType(
SciProject.class.getName()));
add(m_itemSearch);
}
@Override
public void init(FormSectionEvent fse) throws FormProcessException {
PageState state = fse.getPageState();
setVisible(state, true);
}
@Override
public void process(FormSectionEvent fse) throws FormProcessException {
FormData data = fse.getFormData();
PageState state = fse.getPageState();
SciDepartment department = (SciDepartment) getItemSelectionModel().
getSelectedObject(state);
if (!(this.getSaveCancelSection().getCancelButton().
isSelected(state))) {
department.addProject((SciProject) data.get(ITEM_SEARCH));
}
init(fse);
}
}

View File

@ -0,0 +1,41 @@
package com.arsdigita.cms.contenttypes.ui;
import com.arsdigita.cms.ItemSelectionModel;
import com.arsdigita.cms.ui.authoring.AuthoringKitWizard;
import com.arsdigita.cms.ui.authoring.BasicItemForm;
import com.arsdigita.cms.ui.authoring.SimpleEditStep;
import com.arsdigita.cms.ui.workflow.WorkflowLockedComponentAccess;
/**
*
* @author Jens Pelzetter
*/
public class SciDepartmentProjectsStep extends SimpleEditStep {
private String ADD_PROJECT_SHEET_NAME = "addProject";
public SciDepartmentProjectsStep(ItemSelectionModel itemModel,
AuthoringKitWizard parent) {
this(itemModel, parent, null);
}
public SciDepartmentProjectsStep(ItemSelectionModel itemModel,
AuthoringKitWizard parent,
String prefix) {
super(itemModel, parent, prefix);
BasicItemForm addProjectSheet =
new SciDepartmentProjectAddForm(itemModel);
add(ADD_PROJECT_SHEET_NAME,
(String) SciOrganizationGlobalizationUtil.globalize(
"sciorganization.ui.department.add_project").localize(),
new WorkflowLockedComponentAccess(addProjectSheet, itemModel),
addProjectSheet.getSaveCancelSection().getCancelButton());
SciDepartmentProjectsTable projectsTable =
new SciDepartmentProjectsTable(
itemModel);
setDisplayComponent(projectsTable);
}
}

View File

@ -0,0 +1,315 @@
package com.arsdigita.cms.contenttypes.ui;
import java.math.BigDecimal;
import com.arsdigita.bebop.Component;
import com.arsdigita.bebop.ControlLink;
import com.arsdigita.bebop.Label;
import com.arsdigita.bebop.PageState;
import com.arsdigita.bebop.Table;
import com.arsdigita.bebop.event.TableActionEvent;
import com.arsdigita.bebop.event.TableActionListener;
import com.arsdigita.bebop.table.TableCellRenderer;
import com.arsdigita.bebop.table.TableColumn;
import com.arsdigita.bebop.table.TableColumnModel;
import com.arsdigita.bebop.table.TableModel;
import com.arsdigita.bebop.table.TableModelBuilder;
import com.arsdigita.cms.ItemSelectionModel;
import com.arsdigita.cms.SecurityManager;
import com.arsdigita.cms.contenttypes.SciDepartment;
import com.arsdigita.cms.contenttypes.SciDepartmentProjectsCollection;
import com.arsdigita.cms.contenttypes.SciProject;
import com.arsdigita.cms.dispatcher.Utilities;
import com.arsdigita.util.LockableImpl;
/**
*
* @author Jens Pelzetter
*/
public class SciDepartmentProjectsTable
extends Table
implements TableActionListener {
private final String TABLE_COL_EDIT = "table_col_edit";
private final String TABLE_COL_DEL = "table_col_del";
private final String TABLE_COL_UP = "table_col_up";
private final String TABLE_COL_DOWN = "table_col_down";
private ItemSelectionModel m_itemModel;
public SciDepartmentProjectsTable(ItemSelectionModel itemModel) {
super();
m_itemModel = itemModel;
setEmptyView(
new Label(SciOrganizationGlobalizationUtil.globalize(
"sciorganization.ui.department.projects.none")));
TableColumnModel colModel = getColumnModel();
colModel.add(new TableColumn(
0,
SciOrganizationGlobalizationUtil.globalize(
"sciorganization.ui.department.project").localize(),
TABLE_COL_EDIT));
colModel.add(new TableColumn(
1,
SciOrganizationGlobalizationUtil.globalize(
"sciorganization.ui.department.project.remove").localize(),
TABLE_COL_DEL));
colModel.add(new TableColumn(
2,
SciOrganizationGlobalizationUtil.globalize(
"sciorganization.ui.department.project.up").localize(),
TABLE_COL_UP));
colModel.add(new TableColumn(
3,
SciOrganizationGlobalizationUtil.globalize(
"sciorganization.ui.department.project.down").localize(),
TABLE_COL_DOWN));
setModelBuilder(
new SciDepartmentProjectsTableModelBuilder(itemModel));
colModel.get(0).setCellRenderer(new EditCellRenderer());
colModel.get(1).setCellRenderer(new DeleteCellRenderer());
colModel.get(2).setCellRenderer(new UpCellRenderer());
colModel.get(3).setCellRenderer(new DownCellRenderer());
addTableActionListener(this);
}
private class SciDepartmentProjectsTableModelBuilder
extends LockableImpl
implements TableModelBuilder {
private ItemSelectionModel m_itemModel;
public SciDepartmentProjectsTableModelBuilder(
ItemSelectionModel itemModel) {
m_itemModel = itemModel;
}
@Override
public TableModel makeModel(Table table, PageState state) {
table.getRowSelectionModel().clearSelection(state);
SciDepartment department = (SciDepartment) m_itemModel.
getSelectedObject(state);
return new SciDepartmentProjectsTableModel(table,
state,
department);
}
}
private class SciDepartmentProjectsTableModel
implements TableModel {
private Table m_table;
private SciDepartmentProjectsCollection m_projects;
private SciProject m_project;
public SciDepartmentProjectsTableModel(Table table,
PageState state,
SciDepartment department) {
m_table = table;
m_projects = department.getProjects();
}
@Override
public int getColumnCount() {
return m_table.getColumnModel().size();
}
@Override
public boolean nextRow() {
boolean ret;
if ((m_projects != null) && m_projects.next()) {
m_project = m_projects.getProject();
ret = true;
} else {
ret = false;
}
return ret;
}
@Override
public Object getElementAt(int columnIndex) {
switch (columnIndex) {
case 0:
return m_project.getTitle();
case 1:
return SciOrganizationGlobalizationUtil.globalize(
"sciorganization.ui.department.project.remove").
localize();
case 2:
return SciOrganizationGlobalizationUtil.globalize(
"sciorganization.ui.department.project.up").
localize();
case 3:
return SciOrganizationGlobalizationUtil.globalize(
"sciorganization.ui.department.project.down").
localize();
default:
return null;
}
}
@Override
public Object getKeyAt(int columnIndex) {
return m_project.getID();
}
}
private class EditCellRenderer
extends LockableImpl
implements TableCellRenderer {
@Override
public Component getComponent(Table table,
PageState state,
Object value,
boolean isSelected,
Object key,
int row,
int col) {
SecurityManager securityManager =
Utilities.getSecurityManager(state);
SciDepartment department = (SciDepartment) m_itemModel.
getSelectedObject(state);
boolean canEdit = securityManager.canAccess(
state.getRequest(),
SecurityManager.EDIT_ITEM,
department);
if (canEdit) {
ControlLink link = new ControlLink(value.toString());
return link;
} else {
Label label = new Label(value.toString());
return label;
}
}
}
private class DeleteCellRenderer
extends LockableImpl
implements TableCellRenderer {
@Override
public Component getComponent(Table table,
PageState state,
Object value,
boolean isSelected,
Object key,
int row,
int col) {
SecurityManager securityManager =
Utilities.getSecurityManager(state);
SciDepartment department = (SciDepartment) m_itemModel.
getSelectedObject(state);
boolean canEdit = securityManager.canAccess(
state.getRequest(),
SecurityManager.DELETE_ITEM,
department);
if (canEdit) {
ControlLink link = new ControlLink(value.toString());
link.setConfirmation((String) SciOrganizationGlobalizationUtil.
globalize(
"sciorganization.ui.department.project."
+ ".confirm_remove").
localize());
return link;
} else {
Label label = new Label(value.toString());
return label;
}
}
}
private class UpCellRenderer
extends LockableImpl
implements TableCellRenderer {
@Override
public Component getComponent(
Table table,
PageState state,
Object value,
boolean isSelected,
Object key,
int row,
int col) {
if (0 == row) {
Label label = new Label("");
return label;
} else {
ControlLink link = new ControlLink(
(String) SciOrganizationGlobalizationUtil.globalize(
"sciorganization.ui.department.project.up").
localize());
return link;
}
}
}
private class DownCellRenderer
extends LockableImpl
implements TableCellRenderer {
@Override
public Component getComponent(
Table table,
PageState state,
Object value,
boolean isSelected,
Object key,
int row,
int col) {
if (0 == row) {
Label label = new Label("");
return label;
} else {
ControlLink link = new ControlLink(
(String) SciOrganizationGlobalizationUtil.globalize(
"sciorganization.ui.department.project.down").
localize());
return link;
}
}
}
@Override
public void cellSelected(TableActionEvent event) {
PageState state = event.getPageState();
SciProject project = new SciProject(
new BigDecimal(event.getRowKey().toString()));
SciDepartment department =
(SciDepartment) m_itemModel.getSelectedObject(state);
SciDepartmentProjectsCollection projects =
department.getProjects();
TableColumn column = getColumnModel().get(event.getColumn().intValue());
if (column.getHeaderKey().toString().equals(TABLE_COL_EDIT)) {
} else if (column.getHeaderKey().toString().equals(TABLE_COL_DEL)) {
department.removeProject(project);
} else if (column.getHeaderKey().toString().equals(TABLE_COL_UP)) {
projects.swapWithPrevious(project);
} else if (column.getHeaderKey().toString().equals(TABLE_COL_DOWN)) {
projects.swapWithNext(project);
}
}
@Override
public void headSelected(TableActionEvent event) {
//Nothing to do.
}
}

View File

@ -0,0 +1,61 @@
package com.arsdigita.cms.contenttypes.ui;
import com.arsdigita.bebop.Label;
import com.arsdigita.cms.ItemSelectionModel;
import com.arsdigita.cms.ui.authoring.AuthoringKitWizard;
import com.arsdigita.cms.ui.authoring.BasicPageForm;
import com.arsdigita.cms.ui.authoring.SimpleEditStep;
import com.arsdigita.cms.ui.workflow.WorkflowLockedComponentAccess;
/**
*
* @author Jens Pelzetter
*/
public class SciDepartmentPropertiesStep
extends GenericOrganizationalUnitPropertiesStep {
public SciDepartmentPropertiesStep(ItemSelectionModel itemModel,
AuthoringKitWizard parent) {
super(itemModel, parent);
}
@Override
protected void addBasicProperties(ItemSelectionModel itemModel,
AuthoringKitWizard parent) {
SimpleEditStep basicProperties = new SimpleEditStep(itemModel,
parent,
EDIT_SHEET_NAME);
BasicPageForm editBasicSheet =
new SciDepartmentPropertyForm(itemModel, this);
basicProperties.add(EDIT_SHEET_NAME,
(String) SciOrganizationGlobalizationUtil.globalize(
"sciorganization.ui.department.edit_basic_properties").
localize(),
new WorkflowLockedComponentAccess(editBasicSheet,
itemModel),
editBasicSheet.getSaveCancelSection().
getCancelButton());
basicProperties.setDisplayComponent(
getGenericOrganizationalUnitPropertySheet(itemModel));
getSegmentedPanel().addSegment(
new Label((String) SciOrganizationGlobalizationUtil.globalize(
"sciorganization.ui.department.basic_properties").localize()),
basicProperties);
}
@Override
protected void addSteps(ItemSelectionModel itemModel,
AuthoringKitWizard parent) {
super.addSteps(itemModel, parent);
addStep(new SciDepartmentSubDepartmentsStep(itemModel, parent),
"sciorganization.ui.department.subdepartments");
addStep(new SciDepartmentProjectsStep(itemModel, parent),
"sciorganization.ui.department.projects");
}
}

View File

@ -0,0 +1,82 @@
package com.arsdigita.cms.contenttypes.ui;
import com.arsdigita.bebop.FormData;
import com.arsdigita.bebop.FormProcessException;
import com.arsdigita.bebop.Label;
import com.arsdigita.bebop.event.FormInitListener;
import com.arsdigita.bebop.event.FormProcessListener;
import com.arsdigita.bebop.event.FormSectionEvent;
import com.arsdigita.bebop.form.TextArea;
import com.arsdigita.bebop.parameters.ParameterModel;
import com.arsdigita.bebop.parameters.StringParameter;
import com.arsdigita.cms.ItemSelectionModel;
import com.arsdigita.cms.contenttypes.SciDepartment;
/**
*
* @author Jens Pelzetter
*/
public class SciDepartmentPropertyForm
extends GenericOrganizationalUnitPropertyForm
implements FormProcessListener,
FormInitListener {
public static final String ID = "SciDepartmentEdit";
public SciDepartmentPropertyForm(ItemSelectionModel itemModel) {
this(itemModel, null);
}
public SciDepartmentPropertyForm(ItemSelectionModel itemModel,
SciDepartmentPropertiesStep step) {
super(itemModel, step);
addSubmissionListener(this);
}
@Override
public void addWidgets() {
super.addWidgets();
Label descLabel = new Label(SciOrganizationGlobalizationUtil.globalize(
"sciorganizations.ui.department.description"));
add(descLabel);
ParameterModel descParam = new StringParameter(
SciDepartment.DEPARTMENT_DESCRIPTION);
TextArea desc = new TextArea(descParam);
desc.setCols(60);
desc.setRows(18);
add(desc);
}
@Override
public void init(FormSectionEvent fse) throws FormProcessException {
super.init(fse);
FormData data = fse.getFormData();
SciDepartment department = (SciDepartment) super.initBasicWidgets(fse);
data.put(SciDepartment.DEPARTMENT_DESCRIPTION,
department.getDepartmentDescription());
}
@Override
public void process(FormSectionEvent fse) throws FormProcessException {
super.process(fse);
FormData data = fse.getFormData();
SciDepartment department =
(SciDepartment) super.processBasicWidgets(fse);
if ((department != null) && getSaveCancelSection().getSaveButton().
isSelected(fse.getPageState())) {
department.setDepartmentDescription(
(String) data.get(SciDepartment.DEPARTMENT_DESCRIPTION));
department.save();
init(fse);
}
}
}

View File

@ -0,0 +1,65 @@
package com.arsdigita.cms.contenttypes.ui;
import com.arsdigita.bebop.FormData;
import com.arsdigita.bebop.FormProcessException;
import com.arsdigita.bebop.Label;
import com.arsdigita.bebop.PageState;
import com.arsdigita.bebop.event.FormInitListener;
import com.arsdigita.bebop.event.FormProcessListener;
import com.arsdigita.bebop.event.FormSectionEvent;
import com.arsdigita.cms.ContentType;
import com.arsdigita.cms.ItemSelectionModel;
import com.arsdigita.cms.contenttypes.SciDepartment;
import com.arsdigita.cms.ui.ItemSearchWidget;
import com.arsdigita.cms.ui.authoring.BasicItemForm;
/**
*
* @author Jens Pelzetter
*/
public class SciDepartmentSubDepartmentAddForm
extends BasicItemForm
implements FormProcessListener,
FormInitListener {
private ItemSearchWidget m_itemSearch;
private final String ITEM_SEARCH = "subdepartments";
public SciDepartmentSubDepartmentAddForm(ItemSelectionModel itemModel) {
super("SubDepartmentsAddForm", itemModel);
}
@Override
protected void addWidgets() {
add(new Label(SciOrganizationGlobalizationUtil.globalize(
"sciorganization.ui.department.select_subdepartment")));
m_itemSearch = new ItemSearchWidget(
ITEM_SEARCH,
ContentType.findByAssociatedObjectType(SciDepartment.class.
getName()));
add(m_itemSearch);
}
@Override
public void init(FormSectionEvent fse) throws FormProcessException {
PageState state = fse.getPageState();
setVisible(state, true);
}
@Override
public void process(FormSectionEvent fse) throws FormProcessException {
FormData data = fse.getFormData();
PageState state = fse.getPageState();
SciDepartment department = (SciDepartment) getItemSelectionModel().
getSelectedObject(state);
if (!(this.getSaveCancelSection().getCancelButton().
isSelected(state))) {
department.addSubDepartment((SciDepartment) data.get(ITEM_SEARCH));
}
init(fse);
}
}

View File

@ -0,0 +1,40 @@
package com.arsdigita.cms.contenttypes.ui;
import com.arsdigita.cms.ItemSelectionModel;
import com.arsdigita.cms.ui.authoring.AuthoringKitWizard;
import com.arsdigita.cms.ui.authoring.BasicItemForm;
import com.arsdigita.cms.ui.authoring.SimpleEditStep;
import com.arsdigita.cms.ui.workflow.WorkflowLockedComponentAccess;
/**
*
* @author Jens Pelzetter
*/
public class SciDepartmentSubDepartmentsStep extends SimpleEditStep {
private String ADD_SUBDEPARTMENT_SHEET_NAME = "addSubDepartment";
public SciDepartmentSubDepartmentsStep(ItemSelectionModel itemModel,
AuthoringKitWizard parent) {
this(itemModel, parent, null);
}
public SciDepartmentSubDepartmentsStep(ItemSelectionModel itemModel,
AuthoringKitWizard parent,
String prefix) {
super(itemModel, parent, prefix);
BasicItemForm addSubDepartmentSheet =
new SciDepartmentSubDepartmentAddForm(itemModel);
add(ADD_SUBDEPARTMENT_SHEET_NAME,
(String) SciOrganizationGlobalizationUtil.globalize(
"sciorganization.ui.organization.add_subdepartment").localize(),
new WorkflowLockedComponentAccess(addSubDepartmentSheet, itemModel),
addSubDepartmentSheet.getSaveCancelSection().getCancelButton());
SciDepartmentSubDepartmentsTable subdepartmentTable =
new SciDepartmentSubDepartmentsTable(
itemModel);
setDisplayComponent(subdepartmentTable);
}
}

View File

@ -0,0 +1,313 @@
package com.arsdigita.cms.contenttypes.ui;
import com.arsdigita.bebop.Component;
import com.arsdigita.bebop.ControlLink;
import com.arsdigita.bebop.Label;
import com.arsdigita.bebop.PageState;
import com.arsdigita.bebop.Table;
import com.arsdigita.bebop.event.TableActionEvent;
import com.arsdigita.bebop.event.TableActionListener;
import com.arsdigita.bebop.table.TableCellRenderer;
import com.arsdigita.bebop.table.TableColumn;
import com.arsdigita.bebop.table.TableColumnModel;
import com.arsdigita.bebop.table.TableModel;
import com.arsdigita.bebop.table.TableModelBuilder;
import com.arsdigita.cms.ItemSelectionModel;
import com.arsdigita.cms.SecurityManager;
import com.arsdigita.cms.contenttypes.SciDepartment;
import com.arsdigita.cms.contenttypes.SciDepartmentSubDepartmentsCollection;
import com.arsdigita.cms.dispatcher.Utilities;
import com.arsdigita.util.LockableImpl;
import java.math.BigDecimal;
/**
*
* @author Jens Pelzetter
*/
public class SciDepartmentSubDepartmentsTable
extends Table
implements TableActionListener {
private final String TABLE_COL_EDIT = "table_col_edit";
private final String TABLE_COL_DEL = "table_col_del";
private final String TABLE_COL_UP = "table_col_up";
private final String TABLE_COL_DOWN = "table_col_down";
private ItemSelectionModel m_itemModel;
public SciDepartmentSubDepartmentsTable(ItemSelectionModel itemModel) {
super();
m_itemModel = itemModel;
setEmptyView(
new Label(SciOrganizationGlobalizationUtil.globalize(
"sciorganization.ui.department.subdepartments.none")));
TableColumnModel colModel = getColumnModel();
colModel.add(new TableColumn(
0,
SciOrganizationGlobalizationUtil.globalize(
"sciorganization.ui.department.subdepartment").localize(),
TABLE_COL_EDIT));
colModel.add(new TableColumn(
1,
SciOrganizationGlobalizationUtil.globalize(
"sciorganization.ui.department.subdepartment.remove").localize(),
TABLE_COL_DEL));
colModel.add(new TableColumn(
2,
SciOrganizationGlobalizationUtil.globalize(
"sciorganization.ui.department.subdepartment.up").localize(),
TABLE_COL_UP));
colModel.add(new TableColumn(
3,
SciOrganizationGlobalizationUtil.globalize(
"sciorganization.ui.department.subdepartment.down").localize(),
TABLE_COL_DOWN));
setModelBuilder(
new SciDepartmentSubDepartmentsTableModelBuilder(itemModel));
colModel.get(0).setCellRenderer(new EditCellRenderer());
colModel.get(1).setCellRenderer(new DeleteCellRenderer());
colModel.get(2).setCellRenderer(new UpCellRenderer());
colModel.get(3).setCellRenderer(new DownCellRenderer());
addTableActionListener(this);
}
private class SciDepartmentSubDepartmentsTableModelBuilder
extends LockableImpl
implements TableModelBuilder {
private ItemSelectionModel m_itemModel;
public SciDepartmentSubDepartmentsTableModelBuilder(
ItemSelectionModel itemModel) {
m_itemModel = itemModel;
}
@Override
public TableModel makeModel(Table table, PageState state) {
table.getRowSelectionModel().clearSelection(state);
SciDepartment department = (SciDepartment) m_itemModel.
getSelectedObject(state);
return new SciDepartmentSubDepartmentsTableModel(table,
state,
department);
}
}
private class SciDepartmentSubDepartmentsTableModel
implements TableModel {
private Table m_table;
private SciDepartmentSubDepartmentsCollection m_subdepartments;
private SciDepartment m_subdepartment;
private SciDepartmentSubDepartmentsTableModel(Table table,
PageState state,
SciDepartment department) {
m_table = table;
m_subdepartments = department.getSubDepartments();
}
@Override
public int getColumnCount() {
return m_table.getColumnModel().size();
}
@Override
public boolean nextRow() {
boolean ret;
if ((m_subdepartments != null) && m_subdepartments.next()) {
m_subdepartment = m_subdepartments.getSubDepartment();
ret = true;
} else {
ret = false;
}
return ret;
}
@Override
public Object getElementAt(int columnIndex) {
switch (columnIndex) {
case 0:
return m_subdepartment.getTitle();
case 1:
return SciOrganizationGlobalizationUtil.globalize(
"sciorganization.ui.department.subdepartment.remove").
localize();
case 2:
return SciOrganizationGlobalizationUtil.globalize(
"sciorganization.ui.department.subdepartment.up").
localize();
case 3:
return SciOrganizationGlobalizationUtil.globalize(
"sciorganization.ui.department.subdepartment.down").
localize();
default:
return null;
}
}
@Override
public Object getKeyAt(int columnIndex) {
return m_subdepartment.getID();
}
}
private class EditCellRenderer
extends LockableImpl
implements TableCellRenderer {
@Override
public Component getComponent(Table table,
PageState state,
Object value,
boolean isSelected,
Object key,
int row,
int col) {
SecurityManager securityManager =
Utilities.getSecurityManager(state);
SciDepartment department = (SciDepartment) m_itemModel.
getSelectedObject(state);
boolean canEdit = securityManager.canAccess(
state.getRequest(),
SecurityManager.EDIT_ITEM,
department);
if (canEdit) {
ControlLink link = new ControlLink(value.toString());
return link;
} else {
Label label = new Label(value.toString());
return label;
}
}
}
private class DeleteCellRenderer
extends LockableImpl
implements TableCellRenderer {
@Override
public Component getComponent(Table table,
PageState state,
Object value,
boolean isSelected,
Object key,
int row,
int col) {
SecurityManager securityManager =
Utilities.getSecurityManager(state);
SciDepartment department = (SciDepartment) m_itemModel.
getSelectedObject(state);
boolean canEdit = securityManager.canAccess(
state.getRequest(),
SecurityManager.DELETE_ITEM,
department);
if (canEdit) {
ControlLink link = new ControlLink(value.toString());
link.setConfirmation((String) SciOrganizationGlobalizationUtil.
globalize(
"sciorganization.ui.department.subdepartment."
+ ".confirm_remove").
localize());
return link;
} else {
Label label = new Label(value.toString());
return label;
}
}
}
private class UpCellRenderer
extends LockableImpl
implements TableCellRenderer {
@Override
public Component getComponent(
Table table,
PageState state,
Object value,
boolean isSelected,
Object key,
int row,
int col) {
if (0 == row) {
Label label = new Label("");
return label;
} else {
ControlLink link = new ControlLink(
(String) SciOrganizationGlobalizationUtil.globalize(
"sciorganization.ui.department.subdepartment.up").
localize());
return link;
}
}
}
private class DownCellRenderer
extends LockableImpl
implements TableCellRenderer {
@Override
public Component getComponent(
Table table,
PageState state,
Object value,
boolean isSelected,
Object key,
int row,
int col) {
if (0 == row) {
Label label = new Label("");
return label;
} else {
ControlLink link = new ControlLink(
(String) SciOrganizationGlobalizationUtil.globalize(
"sciorganization.ui.department.subdepartment.down").
localize());
return link;
}
}
}
@Override
public void cellSelected(TableActionEvent event) {
PageState state = event.getPageState();
SciDepartment subdepartment = new SciDepartment(
new BigDecimal(event.getRowKey().toString()));
SciDepartment department =
(SciDepartment) m_itemModel.getSelectedObject(state);
SciDepartmentSubDepartmentsCollection subdepartments =
department.getSubDepartments();
TableColumn column = getColumnModel().get(event.getColumn().intValue());
if (column.getHeaderKey().toString().equals(TABLE_COL_EDIT)) {
} else if (column.getHeaderKey().toString().equals(TABLE_COL_DEL)) {
department.removeSubDepartment(department);
} else if (column.getHeaderKey().toString().equals(TABLE_COL_UP)) {
subdepartments.swapWithPrevious(department);
} else if (column.getHeaderKey().toString().equals(TABLE_COL_DOWN)) {
subdepartments.swapWithNext(department);
}
}
@Override
public void headSelected(TableActionEvent event) {
//Nothing to do.
}
}

View File

@ -0,0 +1,65 @@
package com.arsdigita.cms.contenttypes.ui;
import com.arsdigita.bebop.FormData;
import com.arsdigita.bebop.FormProcessException;
import com.arsdigita.bebop.Label;
import com.arsdigita.bebop.PageState;
import com.arsdigita.bebop.event.FormInitListener;
import com.arsdigita.bebop.event.FormProcessListener;
import com.arsdigita.bebop.event.FormSectionEvent;
import com.arsdigita.cms.ContentType;
import com.arsdigita.cms.ItemSelectionModel;
import com.arsdigita.cms.contenttypes.SciDepartment;
import com.arsdigita.cms.contenttypes.SciOrganization;
import com.arsdigita.cms.ui.ItemSearchWidget;
import com.arsdigita.cms.ui.authoring.BasicItemForm;
/**
*
* @author Jens Pelzetter
*/
public class SciOrganizationDepartmentAddForm
extends BasicItemForm
implements FormProcessListener,
FormInitListener {
private ItemSearchWidget m_itemSearch;
private final String ITEM_SEARCH = "departments";
public SciOrganizationDepartmentAddForm(ItemSelectionModel itemModel) {
super("DepartmentsAddForm", itemModel);
}
@Override
protected void addWidgets() {
add(new Label((String) SciOrganizationGlobalizationUtil.globalize(
"sciorganization.ui.organization.select_department").localize()));
m_itemSearch = new ItemSearchWidget(
ITEM_SEARCH,
ContentType.findByAssociatedObjectType(
SciDepartment.class.getName()));
add(m_itemSearch);
}
@Override
public void init(FormSectionEvent fse) throws FormProcessException {
PageState state = fse.getPageState();
setVisible(state, true);
}
@Override
public void process(FormSectionEvent fse) throws FormProcessException {
FormData data = fse.getFormData();
PageState state = fse.getPageState();
SciOrganization orga = (SciOrganization) getItemSelectionModel().
getSelectedObject(state);
if (!(this.getSaveCancelSection().getCancelButton().
isSelected(state))) {
orga.addDepartment((SciDepartment) data.get(ITEM_SEARCH));
}
init(fse);
}
}

View File

@ -0,0 +1,40 @@
package com.arsdigita.cms.contenttypes.ui;
import com.arsdigita.cms.ItemSelectionModel;
import com.arsdigita.cms.ui.authoring.AuthoringKitWizard;
import com.arsdigita.cms.ui.authoring.BasicItemForm;
import com.arsdigita.cms.ui.authoring.SimpleEditStep;
import com.arsdigita.cms.ui.workflow.WorkflowLockedComponentAccess;
/**
*
* @author Jens Pelzetter
*/
public class SciOrganizationDepartmentsStep extends SimpleEditStep {
private String ADD_DEPARTMENT_SHEET_NAME = "addDepartment";
public SciOrganizationDepartmentsStep(ItemSelectionModel itemModel,
AuthoringKitWizard parent) {
this(itemModel, parent, null);
}
public SciOrganizationDepartmentsStep(ItemSelectionModel itemModel,
AuthoringKitWizard parent,
String prefix) {
super(itemModel, parent, prefix);
BasicItemForm addDepartmentSheet =
new SciOrganizationDepartmentAddForm(itemModel);
add(ADD_DEPARTMENT_SHEET_NAME,
(String) SciOrganizationGlobalizationUtil.globalize(
"sciorganization.ui.organization.add_department").localize(),
new WorkflowLockedComponentAccess(addDepartmentSheet, itemModel),
addDepartmentSheet.getSaveCancelSection().getCancelButton());
SciOrganizationDepartmentsTable departmentTable =
new SciOrganizationDepartmentsTable(
itemModel);
setDisplayComponent(departmentTable);
}
}

View File

@ -0,0 +1,314 @@
package com.arsdigita.cms.contenttypes.ui;
import com.arsdigita.bebop.Component;
import com.arsdigita.bebop.ControlLink;
import com.arsdigita.bebop.Label;
import com.arsdigita.bebop.PageState;
import com.arsdigita.bebop.Table;
import com.arsdigita.bebop.event.TableActionEvent;
import com.arsdigita.bebop.event.TableActionListener;
import com.arsdigita.bebop.table.TableCellRenderer;
import com.arsdigita.bebop.table.TableColumn;
import com.arsdigita.bebop.table.TableColumnModel;
import com.arsdigita.bebop.table.TableModel;
import com.arsdigita.bebop.table.TableModelBuilder;
import com.arsdigita.cms.ItemSelectionModel;
import com.arsdigita.cms.SecurityManager;
import com.arsdigita.cms.contenttypes.SciDepartment;
import com.arsdigita.cms.contenttypes.SciOrganization;
import com.arsdigita.cms.contenttypes.SciOrganizationDepartmentsCollection;
import com.arsdigita.cms.dispatcher.Utilities;
import com.arsdigita.util.LockableImpl;
import java.math.BigDecimal;
/**
*
* @author Jens Pelzetter
*/
public class SciOrganizationDepartmentsTable
extends Table
implements TableActionListener {
private final String TABLE_COL_EDIT = "table_col_edit";
private final String TABLE_COL_DEL = "table_col_del";
private final String TABLE_COL_UP = "table_col_up";
private final String TABLE_COL_DOWN = "table_col_down";
private ItemSelectionModel m_itemModel;
public SciOrganizationDepartmentsTable(ItemSelectionModel itemModel) {
super();
m_itemModel = itemModel;
setEmptyView(
new Label(SciOrganizationGlobalizationUtil.globalize(
"sciorganization.ui.organization.departments.none")));
TableColumnModel colModel = getColumnModel();
colModel.add(new TableColumn(
0,
SciOrganizationGlobalizationUtil.globalize(
"sciorganization.ui.organization.department").localize(),
TABLE_COL_EDIT));
colModel.add(new TableColumn(
1,
SciOrganizationGlobalizationUtil.globalize(
"sciorganization.ui.organization.department.remove").localize(),
TABLE_COL_DEL));
colModel.add(new TableColumn(
2,
SciOrganizationGlobalizationUtil.globalize(
"sciorganization.ui.organization.department.up").localize(),
TABLE_COL_UP));
colModel.add(new TableColumn(
3,
SciOrganizationGlobalizationUtil.globalize(
"sciorganization.ui.organization.department.down").localize(),
TABLE_COL_DOWN));
setModelBuilder(
new SciOrganizationDepartmentsTableModelBuilder(itemModel));
colModel.get(0).setCellRenderer(new EditCellRenderer());
colModel.get(1).setCellRenderer(new DeleteCellRenderer());
colModel.get(2).setCellRenderer(new UpCellRenderer());
colModel.get(3).setCellRenderer(new DownCellRenderer());
addTableActionListener(this);
}
private class SciOrganizationDepartmentsTableModelBuilder
extends LockableImpl
implements TableModelBuilder {
private ItemSelectionModel m_itemModel;
public SciOrganizationDepartmentsTableModelBuilder(
ItemSelectionModel itemModel) {
m_itemModel = itemModel;
}
@Override
public TableModel makeModel(Table table, PageState state) {
table.getRowSelectionModel().clearSelection(state);
SciOrganization orga = (SciOrganization) m_itemModel.
getSelectedObject(state);
return new SciOrganizationDepartmentsTableModel(table,
state,
orga);
}
}
private class SciOrganizationDepartmentsTableModel
implements TableModel {
private Table m_table;
private SciOrganizationDepartmentsCollection m_departments;
private SciDepartment m_department;
private SciOrganizationDepartmentsTableModel(Table table,
PageState state,
SciOrganization orga) {
m_table = table;
m_departments = orga.getDepartments();
}
@Override
public int getColumnCount() {
return m_table.getColumnModel().size();
}
@Override
public boolean nextRow() {
boolean ret;
if ((m_departments != null) && m_departments.next()) {
m_department = m_departments.getDepartment();
ret = true;
} else {
ret = false;
}
return ret;
}
@Override
public Object getElementAt(int columnIndex) {
switch (columnIndex) {
case 0:
return m_department.getTitle();
case 1:
return SciOrganizationGlobalizationUtil.globalize(
"sciorganization.ui.organization.department.remove").
localize();
case 2:
return SciOrganizationGlobalizationUtil.globalize(
"sciorganization.ui.organization.department.up").
localize();
case 3:
return SciOrganizationGlobalizationUtil.globalize(
"sciorganization.ui.organization.department.down").
localize();
default:
return null;
}
}
@Override
public Object getKeyAt(int columnIndex) {
return m_department.getID();
}
}
private class EditCellRenderer
extends LockableImpl
implements TableCellRenderer {
@Override
public Component getComponent(Table table,
PageState state,
Object value,
boolean isSelected,
Object key,
int row,
int col) {
SecurityManager securityManager =
Utilities.getSecurityManager(state);
SciOrganization orga = (SciOrganization) m_itemModel.
getSelectedObject(state);
boolean canEdit = securityManager.canAccess(
state.getRequest(),
SecurityManager.EDIT_ITEM,
orga);
if (canEdit) {
ControlLink link = new ControlLink(value.toString());
return link;
} else {
Label label = new Label(value.toString());
return label;
}
}
}
private class DeleteCellRenderer
extends LockableImpl
implements TableCellRenderer {
@Override
public Component getComponent(Table table,
PageState state,
Object value,
boolean isSelected,
Object key,
int row,
int col) {
SecurityManager securityManager =
Utilities.getSecurityManager(state);
SciOrganization orga = (SciOrganization) m_itemModel.
getSelectedObject(state);
boolean canEdit = securityManager.canAccess(
state.getRequest(),
SecurityManager.DELETE_ITEM,
orga);
if (canEdit) {
ControlLink link = new ControlLink(value.toString());
link.setConfirmation((String) SciOrganizationGlobalizationUtil.
globalize(
"sciorganization.ui.organization.department."
+ ".confirm_remove").
localize());
return link;
} else {
Label label = new Label(value.toString());
return label;
}
}
}
private class UpCellRenderer
extends LockableImpl
implements TableCellRenderer {
@Override
public Component getComponent(
Table table,
PageState state,
Object value,
boolean isSelected,
Object key,
int row,
int col) {
if (0 == row) {
Label label = new Label("");
return label;
} else {
ControlLink link = new ControlLink(
(String) SciOrganizationGlobalizationUtil.globalize(
"sciorganization.ui.organization.department.up").
localize());
return link;
}
}
}
private class DownCellRenderer
extends LockableImpl
implements TableCellRenderer {
@Override
public Component getComponent(
Table table,
PageState state,
Object value,
boolean isSelected,
Object key,
int row,
int col) {
if (0 == row) {
Label label = new Label("");
return label;
} else {
ControlLink link = new ControlLink(
(String) SciOrganizationGlobalizationUtil.globalize(
"sciorganization.ui.organization.department.down").
localize());
return link;
}
}
}
@Override
public void cellSelected(TableActionEvent event) {
PageState state = event.getPageState();
SciDepartment department = new SciDepartment(
new BigDecimal(event.getRowKey().toString()));
SciOrganization orga =
(SciOrganization) m_itemModel.getSelectedObject(state);
SciOrganizationDepartmentsCollection departments =
orga.getDepartments();
TableColumn column = getColumnModel().get(event.getColumn().intValue());
if (column.getHeaderKey().toString().equals(TABLE_COL_EDIT)) {
} else if (column.getHeaderKey().toString().equals(TABLE_COL_DEL)) {
orga.removeDepartment(department);
} else if (column.getHeaderKey().toString().equals(TABLE_COL_UP)) {
departments.swapWithPrevious(department);
} else if (column.getHeaderKey().toString().equals(TABLE_COL_DOWN)) {
departments.swapWithNext(department);
}
}
@Override
public void headSelected(TableActionEvent event) {
//Nothing to do.
}
}

View File

@ -0,0 +1,21 @@
package com.arsdigita.cms.contenttypes.ui;
import com.arsdigita.globalization.GlobalizedMessage;
/**
*
* @author Jens Pelzetter
*/
public class SciOrganizationGlobalizationUtil {
public static final String BUNDLE_NAME = "com.arsdigita.cms.contenttypes.ui.OrganizationResources";
public static GlobalizedMessage globalize(String key) {
return new GlobalizedMessage(key, BUNDLE_NAME);
}
public static GlobalizedMessage globalize(String key, Object[] args) {
return new GlobalizedMessage(key, BUNDLE_NAME, args);
}
}

View File

@ -0,0 +1,65 @@
package com.arsdigita.cms.contenttypes.ui;
import com.arsdigita.bebop.FormData;
import com.arsdigita.bebop.FormProcessException;
import com.arsdigita.bebop.Label;
import com.arsdigita.bebop.PageState;
import com.arsdigita.bebop.event.FormInitListener;
import com.arsdigita.bebop.event.FormProcessListener;
import com.arsdigita.bebop.event.FormSectionEvent;
import com.arsdigita.cms.ContentType;
import com.arsdigita.cms.ItemSelectionModel;
import com.arsdigita.cms.contenttypes.SciOrganization;
import com.arsdigita.cms.contenttypes.SciProject;
import com.arsdigita.cms.ui.ItemSearchWidget;
import com.arsdigita.cms.ui.authoring.BasicItemForm;
/**
*
* @author Jens Pelzetter
*/
public class SciOrganizationProjectAddForm
extends BasicItemForm
implements FormProcessListener,
FormInitListener {
private ItemSearchWidget m_itemSearch;
private final String ITEM_SEARCH = "projects";
public SciOrganizationProjectAddForm(ItemSelectionModel itemModel) {
super("ProjectsAddForm", itemModel);
}
@Override
protected void addWidgets() {
add(new Label((String) SciOrganizationGlobalizationUtil.globalize(
"sciorganization.ui.organization.select_project").localize()));
m_itemSearch = new ItemSearchWidget(
ITEM_SEARCH,
ContentType.findByAssociatedObjectType(
SciProject.class.getName()));
add(m_itemSearch);
}
@Override
public void init(FormSectionEvent fse) throws FormProcessException {
PageState state = fse.getPageState();
setVisible(state, true);
}
@Override
public void process(FormSectionEvent fse) throws FormProcessException {
FormData data = fse.getFormData();
PageState state = fse.getPageState();
SciOrganization orga = (SciOrganization) getItemSelectionModel().
getSelectedObject(state);
if (!(this.getSaveCancelSection().getCancelButton().
isSelected(state))) {
orga.addProject((SciProject) data.get(ITEM_SEARCH));
}
init(fse);
}
}

View File

@ -0,0 +1,40 @@
package com.arsdigita.cms.contenttypes.ui;
import com.arsdigita.cms.ItemSelectionModel;
import com.arsdigita.cms.ui.authoring.AuthoringKitWizard;
import com.arsdigita.cms.ui.authoring.BasicItemForm;
import com.arsdigita.cms.ui.authoring.SimpleEditStep;
import com.arsdigita.cms.ui.workflow.WorkflowLockedComponentAccess;
/**
*
* @author Jens Pelzetter
*/
public class SciOrganizationProjectsStep extends SimpleEditStep {
private String ADD_PROJECT_SHEET_NAME = "addProject";
public SciOrganizationProjectsStep(ItemSelectionModel itemModel,
AuthoringKitWizard parent) {
this(itemModel, parent, null);
}
public SciOrganizationProjectsStep(ItemSelectionModel itemModel,
AuthoringKitWizard parent,
String prefix) {
super(itemModel, parent, prefix);
BasicItemForm addProjectSheet =
new SciOrganizationProjectAddForm(itemModel);
add(ADD_PROJECT_SHEET_NAME,
(String) SciOrganizationGlobalizationUtil.globalize(
"sciorganization.ui.organization.add_project").localize(),
new WorkflowLockedComponentAccess(addProjectSheet, itemModel),
addProjectSheet.getSaveCancelSection().getCancelButton());
SciOrganizationProjectsTable projectsTable =
new SciOrganizationProjectsTable(
itemModel);
setDisplayComponent(projectsTable);
}
}

View File

@ -0,0 +1,315 @@
package com.arsdigita.cms.contenttypes.ui;
import java.math.BigDecimal;
import com.arsdigita.bebop.Component;
import com.arsdigita.bebop.ControlLink;
import com.arsdigita.bebop.Label;
import com.arsdigita.bebop.PageState;
import com.arsdigita.bebop.Table;
import com.arsdigita.bebop.event.TableActionEvent;
import com.arsdigita.bebop.event.TableActionListener;
import com.arsdigita.bebop.table.TableCellRenderer;
import com.arsdigita.bebop.table.TableColumn;
import com.arsdigita.bebop.table.TableColumnModel;
import com.arsdigita.bebop.table.TableModel;
import com.arsdigita.bebop.table.TableModelBuilder;
import com.arsdigita.cms.ItemSelectionModel;
import com.arsdigita.cms.SecurityManager;
import com.arsdigita.cms.contenttypes.SciOrganization;
import com.arsdigita.cms.contenttypes.SciOrganizationProjectsCollection;
import com.arsdigita.cms.contenttypes.SciProject;
import com.arsdigita.cms.dispatcher.Utilities;
import com.arsdigita.util.LockableImpl;
/**
*
* @author Jens Pelzetter
*/
public class SciOrganizationProjectsTable
extends Table
implements TableActionListener {
private final String TABLE_COL_EDIT = "table_col_edit";
private final String TABLE_COL_DEL = "table_col_del";
private final String TABLE_COL_UP = "table_col_up";
private final String TABLE_COL_DOWN = "table_col_down";
private ItemSelectionModel m_itemModel;
public SciOrganizationProjectsTable(ItemSelectionModel itemModel) {
super();
m_itemModel = itemModel;
setEmptyView(
new Label(SciOrganizationGlobalizationUtil.globalize(
"sciorganization.ui.organization.projects.none")));
TableColumnModel colModel = getColumnModel();
colModel.add(new TableColumn(
0,
SciOrganizationGlobalizationUtil.globalize(
"sciorganization.ui.organization.project").localize(),
TABLE_COL_EDIT));
colModel.add(new TableColumn(
1,
SciOrganizationGlobalizationUtil.globalize(
"sciorganization.ui.organization.project.remove").localize(),
TABLE_COL_DEL));
colModel.add(new TableColumn(
2,
SciOrganizationGlobalizationUtil.globalize(
"sciorganization.ui.organization.project.up").localize(),
TABLE_COL_UP));
colModel.add(new TableColumn(
3,
SciOrganizationGlobalizationUtil.globalize(
"sciorganization.ui.organization.project.down").localize(),
TABLE_COL_DOWN));
setModelBuilder(
new SciOrganizationProjectsTableModelBuilder(itemModel));
colModel.get(0).setCellRenderer(new EditCellRenderer());
colModel.get(1).setCellRenderer(new DeleteCellRenderer());
colModel.get(2).setCellRenderer(new UpCellRenderer());
colModel.get(3).setCellRenderer(new DownCellRenderer());
addTableActionListener(this);
}
private class SciOrganizationProjectsTableModelBuilder
extends LockableImpl
implements TableModelBuilder {
private ItemSelectionModel m_itemModel;
public SciOrganizationProjectsTableModelBuilder(
ItemSelectionModel itemModel) {
m_itemModel = itemModel;
}
@Override
public TableModel makeModel(Table table, PageState state) {
table.getRowSelectionModel().clearSelection(state);
SciOrganization orga = (SciOrganization) m_itemModel.
getSelectedObject(state);
return new SciOrganizationProjectsTableModel(table,
state,
orga);
}
}
private class SciOrganizationProjectsTableModel
implements TableModel {
private Table m_table;
private SciOrganizationProjectsCollection m_projects;
private SciProject m_project;
public SciOrganizationProjectsTableModel(Table table,
PageState state,
SciOrganization orga) {
m_table = table;
m_projects = orga.getProjects();
}
@Override
public int getColumnCount() {
return m_table.getColumnModel().size();
}
@Override
public boolean nextRow() {
boolean ret;
if ((m_projects != null) && m_projects.next()) {
m_project = m_projects.getProject();
ret = true;
} else {
ret = false;
}
return ret;
}
@Override
public Object getElementAt(int columnIndex) {
switch (columnIndex) {
case 0:
return m_project.getTitle();
case 1:
return SciOrganizationGlobalizationUtil.globalize(
"sciorganization.ui.organization.project.remove").
localize();
case 2:
return SciOrganizationGlobalizationUtil.globalize(
"sciorganization.ui.organization.project.up").
localize();
case 3:
return SciOrganizationGlobalizationUtil.globalize(
"sciorganization.ui.organization.project.down").
localize();
default:
return null;
}
}
@Override
public Object getKeyAt(int columnIndex) {
return m_project.getID();
}
}
private class EditCellRenderer
extends LockableImpl
implements TableCellRenderer {
@Override
public Component getComponent(Table table,
PageState state,
Object value,
boolean isSelected,
Object key,
int row,
int col) {
SecurityManager securityManager =
Utilities.getSecurityManager(state);
SciOrganization orga = (SciOrganization) m_itemModel.
getSelectedObject(state);
boolean canEdit = securityManager.canAccess(
state.getRequest(),
SecurityManager.EDIT_ITEM,
orga);
if (canEdit) {
ControlLink link = new ControlLink(value.toString());
return link;
} else {
Label label = new Label(value.toString());
return label;
}
}
}
private class DeleteCellRenderer
extends LockableImpl
implements TableCellRenderer {
@Override
public Component getComponent(Table table,
PageState state,
Object value,
boolean isSelected,
Object key,
int row,
int col) {
SecurityManager securityManager =
Utilities.getSecurityManager(state);
SciOrganization orga = (SciOrganization) m_itemModel.
getSelectedObject(state);
boolean canEdit = securityManager.canAccess(
state.getRequest(),
SecurityManager.DELETE_ITEM,
orga);
if (canEdit) {
ControlLink link = new ControlLink(value.toString());
link.setConfirmation((String) SciOrganizationGlobalizationUtil.
globalize(
"sciorganization.ui.organization.project."
+ ".confirm_remove").
localize());
return link;
} else {
Label label = new Label(value.toString());
return label;
}
}
}
private class UpCellRenderer
extends LockableImpl
implements TableCellRenderer {
@Override
public Component getComponent(
Table table,
PageState state,
Object value,
boolean isSelected,
Object key,
int row,
int col) {
if (0 == row) {
Label label = new Label("");
return label;
} else {
ControlLink link = new ControlLink(
(String) SciOrganizationGlobalizationUtil.globalize(
"sciorganization.ui.organization.project.up").
localize());
return link;
}
}
}
private class DownCellRenderer
extends LockableImpl
implements TableCellRenderer {
@Override
public Component getComponent(
Table table,
PageState state,
Object value,
boolean isSelected,
Object key,
int row,
int col) {
if (0 == row) {
Label label = new Label("");
return label;
} else {
ControlLink link = new ControlLink(
(String) SciOrganizationGlobalizationUtil.globalize(
"sciorganization.ui.organization.project.down").
localize());
return link;
}
}
}
@Override
public void cellSelected(TableActionEvent event) {
PageState state = event.getPageState();
SciProject project = new SciProject(
new BigDecimal(event.getRowKey().toString()));
SciOrganization orga =
(SciOrganization) m_itemModel.getSelectedObject(state);
SciOrganizationProjectsCollection projects =
orga.getProjects();
TableColumn column = getColumnModel().get(event.getColumn().intValue());
if (column.getHeaderKey().toString().equals(TABLE_COL_EDIT)) {
} else if (column.getHeaderKey().toString().equals(TABLE_COL_DEL)) {
orga.removeProject(project);
} else if (column.getHeaderKey().toString().equals(TABLE_COL_UP)) {
projects.swapWithPrevious(project);
} else if (column.getHeaderKey().toString().equals(TABLE_COL_DOWN)) {
projects.swapWithNext(project);
}
}
@Override
public void headSelected(TableActionEvent event) {
//Nothing to do.
}
}

View File

@ -0,0 +1,61 @@
package com.arsdigita.cms.contenttypes.ui;
import com.arsdigita.bebop.Label;
import com.arsdigita.cms.ItemSelectionModel;
import com.arsdigita.cms.ui.authoring.AuthoringKitWizard;
import com.arsdigita.cms.ui.authoring.BasicPageForm;
import com.arsdigita.cms.ui.authoring.SimpleEditStep;
import com.arsdigita.cms.ui.workflow.WorkflowLockedComponentAccess;
/**
*
* @author Jens Pelzetter
*/
public class SciOrganizationPropertiesStep
extends GenericOrganizationalUnitPropertiesStep {
public SciOrganizationPropertiesStep(ItemSelectionModel itemModel,
AuthoringKitWizard parent) {
super(itemModel, parent);
}
@Override
protected void addBasicProperties(ItemSelectionModel itemModel,
AuthoringKitWizard parent) {
SimpleEditStep basicProperties = new SimpleEditStep(itemModel,
parent,
EDIT_SHEET_NAME);
BasicPageForm editBasicSheet =
new SciOrganizationPropertyForm(itemModel, this);
basicProperties.add(EDIT_SHEET_NAME,
(String) SciOrganizationGlobalizationUtil.globalize(
"sciorganization.ui.organization.edit_basic_sheet").localize(),
new WorkflowLockedComponentAccess(editBasicSheet,
itemModel),
editBasicSheet.getSaveCancelSection().
getCancelButton());
basicProperties.setDisplayComponent(
getGenericOrganizationalUnitPropertySheet(itemModel));
getSegmentedPanel().addSegment(
new Label((String) SciOrganizationGlobalizationUtil.globalize(
"sciorganization.ui.organization.basic_properties").
localize()),
basicProperties);
}
@Override
protected void addSteps(ItemSelectionModel itemModel,
AuthoringKitWizard parent) {
super.addSteps(itemModel, parent);
addStep(new SciOrganizationDepartmentsStep(itemModel, parent),
"sciorganization.ui.organization.departments");
addStep(new SciOrganizationProjectsStep(itemModel, parent),
"sciorganization.ui.organization.projects");
}
}

View File

@ -0,0 +1,79 @@
package com.arsdigita.cms.contenttypes.ui;
import com.arsdigita.bebop.FormData;
import com.arsdigita.bebop.FormProcessException;
import com.arsdigita.bebop.Label;
import com.arsdigita.bebop.event.FormInitListener;
import com.arsdigita.bebop.event.FormProcessListener;
import com.arsdigita.bebop.event.FormSectionEvent;
import com.arsdigita.bebop.form.TextArea;
import com.arsdigita.bebop.parameters.ParameterModel;
import com.arsdigita.bebop.parameters.StringParameter;
import com.arsdigita.cms.ItemSelectionModel;
import com.arsdigita.cms.contenttypes.SciOrganization;
/**
*
* @author Jens Pelzetter
*/
public class SciOrganizationPropertyForm
extends GenericOrganizationalUnitPropertyForm
implements FormProcessListener,
FormInitListener {
public static final String ID = "SciOrganizationEdit";
public SciOrganizationPropertyForm(ItemSelectionModel itemModel) {
this(itemModel, null);
}
public SciOrganizationPropertyForm(ItemSelectionModel itemModel,
SciOrganizationPropertiesStep step) {
super(itemModel, step);
addSubmissionListener(this);
}
@Override
protected void addWidgets() {
super.addWidgets();
Label descLabel = new Label(SciOrganizationGlobalizationUtil.globalize(
"sciorganizations.ui.organization.description"));
add(descLabel);
ParameterModel descParam = new StringParameter(
SciOrganization.ORGANIZATION_DESCRIPTION);
TextArea desc = new TextArea(descParam);
desc.setCols(60);
desc.setRows(18);
add(desc);
}
@Override
public void init(FormSectionEvent fse) throws FormProcessException {
super.init(fse);
FormData data = fse.getFormData();
SciOrganization orga = (SciOrganization) super.initBasicWidgets(fse);
data.put(SciOrganization.ORGANIZATION_DESCRIPTION,
orga.getOrganizationDescription());
}
@Override
public void process(FormSectionEvent fse) throws FormProcessException {
super.process(fse);
FormData data = fse.getFormData();
SciOrganization organization = (SciOrganization) super.processBasicWidgets(fse);
if ((organization != null) && getSaveCancelSection().getSaveButton().
isSelected(fse.getPageState())) {
organization.setDescription((String) data.get(
SciOrganization.ORGANIZATION_DESCRIPTION));
organization.save();
init(fse);
}
}
}

View File

@ -4,8 +4,12 @@
*/ */
package com.arsdigita.cms.contenttypes.ui; package com.arsdigita.cms.contenttypes.ui;
import com.arsdigita.bebop.Label;
import com.arsdigita.cms.ItemSelectionModel; import com.arsdigita.cms.ItemSelectionModel;
import com.arsdigita.cms.ui.authoring.AuthoringKitWizard; import com.arsdigita.cms.ui.authoring.AuthoringKitWizard;
import com.arsdigita.cms.ui.authoring.BasicPageForm;
import com.arsdigita.cms.ui.authoring.SimpleEditStep;
import com.arsdigita.cms.ui.workflow.WorkflowLockedComponentAccess;
/** /**
* *
@ -15,21 +19,53 @@ public class SciProjectPropertiesStep
extends GenericOrganizationalUnitPropertiesStep { extends GenericOrganizationalUnitPropertiesStep {
public SciProjectPropertiesStep(ItemSelectionModel itemModel, public SciProjectPropertiesStep(ItemSelectionModel itemModel,
AuthoringKitWizard parent) { AuthoringKitWizard parent) {
super(itemModel, parent); super(itemModel, parent);
} }
@Override
protected void addBasicProperties(ItemSelectionModel itemModel,
AuthoringKitWizard parent) {
SimpleEditStep basicProperties = new SimpleEditStep(itemModel,
parent,
EDIT_SHEET_NAME);
BasicPageForm editBasicSheet =
new SciProjectPropertyForm(itemModel, this);
basicProperties.add(EDIT_SHEET_NAME,
(String) SciOrganizationGlobalizationUtil.globalize(
"sciorganization.ui.project.edit_basic_sheet").localize(),
new WorkflowLockedComponentAccess(editBasicSheet,
itemModel),
editBasicSheet.getSaveCancelSection().
getCancelButton());
basicProperties.setDisplayComponent(
getGenericOrganizationalUnitPropertySheet(itemModel));
getSegmentedPanel().addSegment(
new Label((String) SciOrganizationGlobalizationUtil.globalize(
"sciorganization.ui.project.basic_properties").
localize()),
basicProperties);
}
@Override @Override
protected void addSteps(ItemSelectionModel itemModel, protected void addSteps(ItemSelectionModel itemModel,
AuthoringKitWizard parent) { AuthoringKitWizard parent) {
addStep(new GenericOrganizationalUnitContactPropertiesStep(itemModel, /*addStep(new GenericOrganizationalUnitContactPropertiesStep(itemModel,
parent), parent),
"cms.contenttypes.ui.orgaunit.contact"); "cms.contenttypes.ui.orgaunit.contact");
addStep(new SciProjectSubprojectPropertiesStep(itemModel,
parent),
"cms.contenttypes.ui.project.subprojects");
addStep(new GenericOrganizationalUnitPersonPropertiesStep(itemModel, addStep(new GenericOrganizationalUnitPersonPropertiesStep(itemModel,
parent), parent),
"cms.contenttypes.ui.orgaunit.persons"); "cms.contenttypes.ui.orgaunit.persons");*/
super.addSteps(itemModel, parent);
addStep(new SciProjectSubprojectsStep(itemModel,
parent),
"cms.contenttypes.ui.project.subprojects");
} }
} }

View File

@ -0,0 +1,78 @@
package com.arsdigita.cms.contenttypes.ui;
import com.arsdigita.bebop.FormData;
import com.arsdigita.bebop.FormProcessException;
import com.arsdigita.bebop.Label;
import com.arsdigita.bebop.event.FormInitListener;
import com.arsdigita.bebop.event.FormProcessListener;
import com.arsdigita.bebop.event.FormSectionEvent;
import com.arsdigita.bebop.event.FormSubmissionListener;
import com.arsdigita.bebop.form.TextArea;
import com.arsdigita.bebop.parameters.ParameterModel;
import com.arsdigita.bebop.parameters.StringParameter;
import com.arsdigita.cms.ItemSelectionModel;
import com.arsdigita.cms.contenttypes.SciProject;
/**
*
* @author Jens Pelzetter
*/
public class SciProjectPropertyForm
extends GenericOrganizationalUnitPropertyForm
implements FormProcessListener,
FormInitListener,
FormSubmissionListener {
public static final String ID = "SciProjectEdit";
public SciProjectPropertyForm(ItemSelectionModel itemModel) {
this(itemModel, null);
}
public SciProjectPropertyForm(ItemSelectionModel itemModel,
SciProjectPropertiesStep step) {
super(itemModel, step);
addSubmissionListener(this);
}
@Override
protected void addWidgets() {
super.addWidgets();
Label descLabel = new Label(SciOrganizationGlobalizationUtil.globalize(
"sciorganizations.ui.project.description"));
add(descLabel);
ParameterModel descParam = new StringParameter(SciProject.PROJECT_DESCRIPTION);
TextArea desc = new TextArea(descParam);
desc.setCols(60);
desc.setRows(18);
add(desc);
}
@Override
public void init(FormSectionEvent fse) throws FormProcessException {
super.init(fse);
FormData data = fse.getFormData();
SciProject project = (SciProject) super.initBasicWidgets(fse);
data.put(SciProject.PROJECT_DESCRIPTION, project.getDescription());
}
@Override
public void process(FormSectionEvent fse) throws FormProcessException {
super.process(fse);
FormData data = fse.getFormData();
SciProject project = (SciProject) super.processBasicWidgets(fse);
if ((project != null) && getSaveCancelSection().getSaveButton().
isSelected(fse.getPageState())) {
project.setDescription((String) data.get(SciProject.PROJECT_DESCRIPTION));
project.save();
init(fse);
}
}
}

View File

@ -0,0 +1,314 @@
package com.arsdigita.cms.contenttypes.ui;
import java.math.BigDecimal;
import com.arsdigita.bebop.Component;
import com.arsdigita.bebop.ControlLink;
import com.arsdigita.bebop.Label;
import com.arsdigita.bebop.PageState;
import com.arsdigita.bebop.Table;
import com.arsdigita.bebop.event.TableActionEvent;
import com.arsdigita.bebop.event.TableActionListener;
import com.arsdigita.bebop.table.TableCellRenderer;
import com.arsdigita.bebop.table.TableColumn;
import com.arsdigita.bebop.table.TableColumnModel;
import com.arsdigita.bebop.table.TableModel;
import com.arsdigita.bebop.table.TableModelBuilder;
import com.arsdigita.cms.ItemSelectionModel;
import com.arsdigita.cms.SecurityManager;
import com.arsdigita.cms.contenttypes.SciProject;
import com.arsdigita.cms.contenttypes.SciProjectSubProjectsCollection;
import com.arsdigita.cms.dispatcher.Utilities;
import com.arsdigita.util.LockableImpl;
/**
*
* @author Jens Pelzetter
*/
public class SciProjectSubProjectsTable
extends Table
implements TableActionListener {
private final String TABLE_COL_EDIT = "table_col_edit";
private final String TABLE_COL_DEL = "table_col_del";
private final String TABLE_COL_UP = "table_col_up";
private final String TABLE_COL_DOWN = "table_col_down";
private ItemSelectionModel m_itemModel;
public SciProjectSubProjectsTable(ItemSelectionModel itemModel) {
super();
m_itemModel = itemModel;
setEmptyView(
new Label(SciOrganizationGlobalizationUtil.globalize(
"sciorganization.ui.project.subprojects.none")));
TableColumnModel colModel = getColumnModel();
colModel.add(new TableColumn(
0,
SciOrganizationGlobalizationUtil.globalize(
"sciorganization.ui.project.subproject").localize(),
TABLE_COL_EDIT));
colModel.add(new TableColumn(
1,
SciOrganizationGlobalizationUtil.globalize(
"sciorganization.ui.project.subproject.remove").localize(),
TABLE_COL_DEL));
colModel.add(new TableColumn(
2,
SciOrganizationGlobalizationUtil.globalize(
"sciorganization.ui.project.subproject.up").localize(),
TABLE_COL_UP));
colModel.add(new TableColumn(
3,
SciOrganizationGlobalizationUtil.globalize(
"sciorganization.ui.project.subproject.down").localize(),
TABLE_COL_DOWN));
setModelBuilder(
new SciProjectSubProjectsTableModelBuilder(itemModel));
colModel.get(0).setCellRenderer(new EditCellRenderer());
colModel.get(1).setCellRenderer(new DeleteCellRenderer());
colModel.get(2).setCellRenderer(new UpCellRenderer());
colModel.get(3).setCellRenderer(new DownCellRenderer());
addTableActionListener(this);
}
private class SciProjectSubProjectsTableModelBuilder
extends LockableImpl
implements TableModelBuilder {
private ItemSelectionModel m_itemModel;
public SciProjectSubProjectsTableModelBuilder(
ItemSelectionModel itemModel) {
m_itemModel = itemModel;
}
@Override
public TableModel makeModel(Table table, PageState state) {
table.getRowSelectionModel().clearSelection(state);
SciProject project = (SciProject) m_itemModel.getSelectedObject(
state);
return new SciProjectSubProjectsTableModel(table,
state,
project);
}
}
private class SciProjectSubProjectsTableModel
implements TableModel {
private Table m_table;
private SciProjectSubProjectsCollection m_subprojects;
private SciProject m_subproject;
public SciProjectSubProjectsTableModel(Table table,
PageState state,
SciProject project) {
m_table = table;
m_subprojects = project.getSubProjects();
}
@Override
public int getColumnCount() {
return m_table.getColumnModel().size();
}
@Override
public boolean nextRow() {
boolean ret;
if ((m_subprojects != null) && m_subprojects.next()) {
m_subproject = m_subprojects.getSubProject();
ret = true;
} else {
ret = false;
}
return ret;
}
@Override
public Object getElementAt(int columnIndex) {
switch (columnIndex) {
case 0:
return m_subproject.getTitle();
case 1:
return SciOrganizationGlobalizationUtil.globalize(
"sciorganization.ui.project.subproject.remove").
localize();
case 2:
return SciOrganizationGlobalizationUtil.globalize(
"sciorganization.ui.project.subproject.up").
localize();
case 3:
return SciOrganizationGlobalizationUtil.globalize(
"sciorganization.ui.project.subproject.down").
localize();
default:
return null;
}
}
@Override
public Object getKeyAt(int columnIndex) {
return m_subproject.getID();
}
}
private class EditCellRenderer
extends LockableImpl
implements TableCellRenderer {
@Override
public Component getComponent(Table table,
PageState state,
Object value,
boolean isSelected,
Object key,
int row,
int col) {
SecurityManager securityManager =
Utilities.getSecurityManager(state);
SciProject project = (SciProject) m_itemModel.getSelectedObject(
state);
boolean canEdit = securityManager.canAccess(
state.getRequest(),
SecurityManager.EDIT_ITEM,
project);
if (canEdit) {
ControlLink link = new ControlLink(value.toString());
return link;
} else {
Label label = new Label(value.toString());
return label;
}
}
}
private class DeleteCellRenderer
extends LockableImpl
implements TableCellRenderer {
@Override
public Component getComponent(Table table,
PageState state,
Object value,
boolean isSelected,
Object key,
int row,
int col) {
SecurityManager securityManager =
Utilities.getSecurityManager(state);
SciProject project = (SciProject) m_itemModel.getSelectedObject(
state);
boolean canEdit = securityManager.canAccess(
state.getRequest(),
SecurityManager.DELETE_ITEM,
project);
if (canEdit) {
ControlLink link = new ControlLink(value.toString());
link.setConfirmation((String) SciOrganizationGlobalizationUtil.
globalize(
"sciorganization.ui.project.subproject."
+ ".confirm_remove").
localize());
return link;
} else {
Label label = new Label(value.toString());
return label;
}
}
}
private class UpCellRenderer
extends LockableImpl
implements TableCellRenderer {
@Override
public Component getComponent(
Table table,
PageState state,
Object value,
boolean isSelected,
Object key,
int row,
int col) {
if (0 == row) {
Label label = new Label("");
return label;
} else {
ControlLink link = new ControlLink(
(String) SciOrganizationGlobalizationUtil.globalize(
"sciorganization.ui.project.subproject.up").
localize());
return link;
}
}
}
private class DownCellRenderer
extends LockableImpl
implements TableCellRenderer {
@Override
public Component getComponent(
Table table,
PageState state,
Object value,
boolean isSelected,
Object key,
int row,
int col) {
if (0 == row) {
Label label = new Label("");
return label;
} else {
ControlLink link = new ControlLink(
(String) SciOrganizationGlobalizationUtil.globalize(
"sciorganization.ui.project.subproject.down").
localize());
return link;
}
}
}
@Override
public void cellSelected(TableActionEvent event) {
PageState state = event.getPageState();
SciProject subProject = new SciProject(
new BigDecimal(event.getRowKey().toString()));
SciProject project =
(SciProject) m_itemModel.getSelectedObject(state);
SciProjectSubProjectsCollection subprojects =
project.getSubProjects();
TableColumn column = getColumnModel().get(event.getColumn().intValue());
if (column.getHeaderKey().toString().equals(TABLE_COL_EDIT)) {
} else if (column.getHeaderKey().toString().equals(TABLE_COL_DEL)) {
project.removeSubProject(subProject);
} else if (column.getHeaderKey().toString().equals(TABLE_COL_UP)) {
subprojects.swapWithPrevious(subProject);
} else if (column.getHeaderKey().toString().equals(TABLE_COL_DOWN)) {
subprojects.swapWithNext(subProject);
}
}
@Override
public void headSelected(TableActionEvent event) {
//Nothing to do.
}
}

View File

@ -1,21 +1,64 @@
package com.arsdigita.cms.contenttypes.ui; package com.arsdigita.cms.contenttypes.ui;
import com.arsdigita.bebop.FormData;
import com.arsdigita.bebop.FormProcessException;
import com.arsdigita.bebop.Label;
import com.arsdigita.bebop.PageState;
import com.arsdigita.bebop.event.FormInitListener;
import com.arsdigita.bebop.event.FormProcessListener;
import com.arsdigita.bebop.event.FormSectionEvent;
import com.arsdigita.cms.ContentType;
import com.arsdigita.cms.ItemSelectionModel; import com.arsdigita.cms.ItemSelectionModel;
import com.arsdigita.cms.contenttypes.SciProject; import com.arsdigita.cms.contenttypes.SciProject;
import com.arsdigita.cms.ui.ItemSearchWidget;
import com.arsdigita.cms.ui.authoring.BasicItemForm;
/** /**
* *
* @author Jens Pelzetter * @author Jens Pelzetter
*/ */
public class SciProjectSubprojectAddForm public class SciProjectSubprojectAddForm
extends GenericOrganizationalUnitChildAddForm { extends BasicItemForm
implements FormProcessListener,
FormInitListener {
private ItemSearchWidget m_itemSearch;
private final String ITEM_SEARCH = "projects";
public SciProjectSubprojectAddForm(ItemSelectionModel itemModel) { public SciProjectSubprojectAddForm(ItemSelectionModel itemModel) {
super("SubprojectAddForm", itemModel); super("SubprojectAddForm", itemModel);
} }
@Override @Override
protected String getChildDataObjectType() { protected void addWidgets() {
return SciProject.BASE_DATA_OBJECT_TYPE; add(new Label((String) SciOrganizationGlobalizationUtil.globalize(
"sciorganization.ui.project.select_subproject").localize()));
m_itemSearch = new ItemSearchWidget(
ITEM_SEARCH,
ContentType.findByAssociatedObjectType(
SciProject.class.getName()));
add(m_itemSearch);
}
@Override
public void init(FormSectionEvent fse) throws FormProcessException {
PageState state = fse.getPageState();
setVisible(state, true);
}
@Override
public void process(FormSectionEvent fse) throws FormProcessException {
FormData data = fse.getFormData();
PageState state = fse.getPageState();
SciProject project = (SciProject) getItemSelectionModel().
getSelectedObject(state);
if (!(this.getSaveCancelSection().getCancelButton().
isSelected(state))) {
project.addSubProject((SciProject) data.get(ITEM_SEARCH));
}
init(fse);
} }
} }

View File

@ -1,7 +1,3 @@
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.arsdigita.cms.contenttypes.ui; package com.arsdigita.cms.contenttypes.ui;
import com.arsdigita.cms.ItemSelectionModel; import com.arsdigita.cms.ItemSelectionModel;
@ -16,32 +12,33 @@ import org.apache.log4j.Logger;
* *
* @author Jens Pelzetter * @author Jens Pelzetter
*/ */
public class SciProjectSubprojectPropertiesStep extends SimpleEditStep { public class SciProjectSubprojectsStep extends SimpleEditStep {
private final static Logger s_log = Logger.getLogger( private final static Logger s_log = Logger.getLogger(
SciProjectSubprojectPropertiesStep.class); SciProjectSubprojectsStep.class);
private String ADD_CHILD_SHEET_NAME = "addChild"; private String ADD_CHILD_SHEET_NAME = "addChild";
public SciProjectSubprojectPropertiesStep(ItemSelectionModel itemModel, public SciProjectSubprojectsStep(ItemSelectionModel itemModel,
AuthoringKitWizard parent) { AuthoringKitWizard parent) {
this(itemModel, parent, null); this(itemModel, parent, null);
} }
public SciProjectSubprojectPropertiesStep( public SciProjectSubprojectsStep(
ItemSelectionModel itemModel, ItemSelectionModel itemModel,
AuthoringKitWizard parent, AuthoringKitWizard parent,
String prefix) { String prefix) {
super(itemModel, parent, prefix); super(itemModel, parent, prefix);
BasicItemForm addChildSheet = new SciProjectSubprojectAddForm(itemModel); BasicItemForm addSubProjectSheet =
new SciProjectSubprojectAddForm(itemModel);
add(ADD_CHILD_SHEET_NAME, add(ADD_CHILD_SHEET_NAME,
(String) ContenttypesGlobalizationUtil.globalize( (String) ContenttypesGlobalizationUtil.globalize(
"cms.contenttypes.ui.genericorgaunit.add_child").localize(), "cms.contenttypes.ui.genericorgaunit.add_child").localize(),
new WorkflowLockedComponentAccess(addChildSheet, itemModel), new WorkflowLockedComponentAccess(addSubProjectSheet, itemModel),
addChildSheet.getSaveCancelSection().getCancelButton()); addSubProjectSheet.getSaveCancelSection().getCancelButton());
GenericOrganizationalUnitChildTable childrenTable = new GenericOrganizationalUnitChildTable( SciProjectSubProjectsTable subProjectsTable = new SciProjectSubProjectsTable(
itemModel); itemModel);
setDisplayComponent(childrenTable); setDisplayComponent(subProjectsTable);
} }
} }