SciProject: Angabe von Förderkennzeichen bei Drittmittelgebern. Das Förderkennzeichen ist eine Eigenschaft der Assoziation zwischen Projekt und Drittmittelgeber. Es können somit mehrere Förderkennzeichen (pro Mittelgeber eines) angegeben werden.

Die Drittmittelgeber können jetzt außerdem sortiert werden. Die genaue Anzeige hängt wie üblich vom Theme am.


git-svn-id: https://svn.libreccm.org/ccm/trunk@2469 8810af33-2d31-482b-a856-94f89814c4df
master
jensp 2013-12-03 18:29:14 +00:00
parent f10243123b
commit 4010761c1a
17 changed files with 499 additions and 77 deletions

View File

@ -190,4 +190,5 @@ public class CategoryFilter {
}
}
}
}

View File

@ -39,7 +39,6 @@ import com.arsdigita.cms.contenttypes.AuthorshipCollection;
import com.arsdigita.cms.contenttypes.GenericPerson;
import com.arsdigita.cms.contenttypes.Publication;
import com.arsdigita.cms.dispatcher.ItemResolver;
import com.arsdigita.cms.dispatcher.Utilities;
import com.arsdigita.cms.ui.authoring.SimpleEditStep;
import com.arsdigita.dispatcher.ObjectNotFoundException;
import com.arsdigita.globalization.GlobalizedMessage;
@ -82,31 +81,31 @@ public class PublicationAuthorsTable
colModel.add(new TableColumn(
0,
PublicationGlobalizationUtil.globalize(
"publications.ui.authors.author.name").localize(),
"publications.ui.authors.author.name"),
TABLE_COL_EDIT));
colModel.add(new TableColumn(
1,
PublicationGlobalizationUtil.globalize(
"publications.ui.authors.author.isEditor").localize()));
"publications.ui.authors.author.isEditor")));
colModel.add(new TableColumn(
2,
PublicationGlobalizationUtil.globalize(
"publications.ui.authors.edit_assoc").localize(),
"publications.ui.authors.edit_assoc"),
TABLE_COL_EDIT_ASSOC));
colModel.add(new TableColumn(
3,
PublicationGlobalizationUtil.globalize(
"publications.ui.authors.author.delete").localize(),
"publications.ui.authors.author.delete"),
TABLE_COL_DEL));
colModel.add(new TableColumn(
4,
PublicationGlobalizationUtil.globalize(
"publications.ui.authors.author.up").localize(),
"publications.ui.authors.author.up"),
TABLE_COL_UP));
colModel.add(new TableColumn(
5,
PublicationGlobalizationUtil.globalize(
"publications.ui.authors.author.down").localize(),
"publications.ui.authors.author.down"),
TABLE_COL_DOWN));
setModelBuilder(

View File

@ -1,10 +1,10 @@
<?xml version="1.0"?>
<ccm:application xmlns:ccm="http://ccm.redhat.com/ccm-project"
name="ccm-sci-types-project"
prettyName="Scientific CMS Project content type"
version = "6.6.7"
release="1"
webapp="ROOT">
name="ccm-sci-types-project"
prettyName="Scientific CMS Project content type"
version = "6.6.8"
release="1"
webapp="ROOT">
<ccm:dependencies>
<ccm:requires name="ccm-core" version="6.6.3" relation="ge"/>

View File

@ -33,7 +33,9 @@ association {
to ct_sci_project_sponsor_map.sponsor_id,
join ct_sci_project_sponsor_map.project_id
to ct_sci_project_bundles.bundle_id;
Integer[0..1] sponsorOrder = ct_sci_project_sponsor_map.sponsor_order INTEGER;
Integer[0..1] sponsorOrder = ct_sci_project_sponsor_map.sponsor_order INTEGER;
String[0..1] sponsorFundingCode = ct_sci_project_sponsor_map.sponsor_funding_code VARCHAR(512);
}
query getIdsOfProjectsOfOrgaUnit {

View File

@ -1,15 +1,17 @@
create table ct_sci_project_sponsor_map (
CREATE TABLE ct_sci_project_sponsor_map (
sponsor_id INTEGER not null,
project_id INTEGER not null,
sponsor_order INTEGER,
constraint ct_sci_pro_spo_map_pro_p_y6bbk
primary key(project_id, sponsor_id)
CONSTRAINT ct_sci_pro_spo_map_pro_p_y6bbk
PRIMARY KEY(project_id, sponsor_id)
);
alter table ct_sci_project_sponsor_map add
constraint ct_sci_pro_spo_map_pro_f_8a7hv foreign key (project_id)
references ct_sci_project_bundles(bundle_id);
alter table ct_sci_project_sponsor_map add
constraint ct_sci_pro_spo_map_spo_f_7x6td foreign key (sponsor_id)
references cms_orgaunit_bundles(bundle_id);
ALTER TABLE ct_sci_project_sponsor_map
ADD CONSTRAINT ct_sci_pro_spo_map_pro_f_8a7hv
FOREIGN KEY (project_id)
REFERENCES ct_sci_project_bundles(bundle_id);
ALTER TABLE ct_sci_project_sponsor_map
ADD CONSTRAINT ct_sci_pro_spo_map_spo_f_7x6td
FOREIGN KEY (sponsor_id)
REFERENCES cms_orgaunit_bundles(bundle_id);

View File

@ -0,0 +1,2 @@
ALTER TABLE ct_sci_project_sponsor_map
ADD COLUMN sponsor_funding_code VARCHAR(512);

View File

@ -0,0 +1,7 @@
\echo 'ScientificCMS SciProject module upgrade 6.6.7 -> 6.6.8 (PostgreSQL)'
begin;
\i ../default/upgrade/6.6.7-6.6.8/add_sponsor_fundingcode.sql
end;

View File

@ -5,4 +5,7 @@
<version from="6.6.6" to="6.6.7">
<script sql="ccm-sci-types-project/upgrade/::database::-6.6.6-6.6.7.sql"/>
</version>
<version from="6.6.7" to="6.6.8">
<script sql="ccm-sci-types-project/upgrade/::database::-6.6.7-6.6.8.sql"/>
</version>
</upgrade>

View File

@ -194,6 +194,10 @@ public class SciProject extends GenericOrganizationalUnit {
getSciProjectBundle().addSponsor(sponsor);
}
public void addSponsor(final GenericOrganizationalUnit sponsor, final String fundingCode) {
getSciProjectBundle().addSponsor(sponsor, fundingCode);
}
public void removeSponsor(final GenericOrganizationalUnit sponsor) {
getSciProjectBundle().removeSponsor(sponsor);
}
@ -202,6 +206,14 @@ public class SciProject extends GenericOrganizationalUnit {
return !getSponsors().isEmpty();
}
public void swapWithPreviousSponsor(final GenericOrganizationalUnit sponsor) {
getSponsors().swapWithPrevious(sponsor);
}
public void swapWithNextSponsor(final GenericOrganizationalUnit sponsor) {
getSponsors().swapWithNext(sponsor);
}
public String getFunding() {
return (String) get(FUNDING);
}

View File

@ -24,6 +24,7 @@ public class SciProjectBundle extends GenericOrganizationalUnitBundle {
"com.arsdigita.cms.contenttypes.SciProjectBundle";
public static final String SPONSORS = "sponsors";
public static final String SPONSOR_ORDER = "sponsorOrder";
public static final String SPONSOR_FUNDING_CODE = "sponsorFundingCode";
public SciProjectBundle(final ContentItem primary) {
super(BASE_DATA_OBJECT_TYPE);
@ -68,11 +69,16 @@ public class SciProjectBundle extends GenericOrganizationalUnitBundle {
}
public void addSponsor(final GenericOrganizationalUnit sponsor) {
addSponsor(sponsor, null);
}
public void addSponsor(final GenericOrganizationalUnit sponsor, final String fundingCode) {
Assert.exists(sponsor, GenericOrganizationalUnit.class);
final DataObject link = add(SPONSORS, sponsor.getGenericOrganizationalUnitBundle());
link.set(SPONSOR_ORDER, Integer.valueOf((int) getSponsors().size()));
link.set(SPONSOR_FUNDING_CODE, fundingCode);
link.save();
}
@ -136,7 +142,7 @@ public class SciProjectBundle extends GenericOrganizationalUnitBundle {
final DataCollection sponsoredProjects = (DataCollection) sponsorBundle.get(
"sponsoredProjects");
while(sponsoredProjects.next()) {
while (sponsoredProjects.next()) {
createSponsorProjectAssoc(sponsoredProjects,
(GenericOrganizationalUnitBundle) liveItem);
}

View File

@ -4,6 +4,7 @@ import com.arsdigita.cms.ContentBundle;
import com.arsdigita.domain.DomainCollection;
import com.arsdigita.domain.DomainObjectFactory;
import com.arsdigita.persistence.DataCollection;
import com.arsdigita.persistence.DataObject;
import java.math.BigDecimal;
/**
@ -13,10 +14,16 @@ import java.math.BigDecimal;
*/
public class SciProjectSponsorCollection extends DomainCollection {
public final static String SPONSOR_ORDER = "sponsorOrder";
public final static String LINK_SPONSOR_ORDER = "link." + SPONSOR_ORDER;
public final static String SPONSOR_FUNDING_CODE = "sponsorFundingCode";
public final static String LINK_SPONSOR_FUNDING_CODE = "link." + SPONSOR_FUNDING_CODE;
public SciProjectSponsorCollection(final DataCollection dataCollection) {
super(dataCollection);
addOrder("name");
addOrder(LINK_SPONSOR_ORDER);
}
public GenericOrganizationalUnit getSponsor() {
@ -39,4 +46,120 @@ public class SciProjectSponsorCollection extends DomainCollection {
return getSponsor().getTitle();
}
public Integer getSponsorOrder() {
return (Integer) get(LINK_SPONSOR_ORDER);
}
public void setSponsorOrder(final Integer order) {
final DataObject link = (DataObject) get("link");
link.set(SPONSOR_ORDER, order);
}
public String getFundingCode() {
return (String) get(LINK_SPONSOR_FUNDING_CODE);
}
public void setFundingCode(final String fundingCode) {
final DataObject link = (DataObject) get("link");
link.set(SPONSOR_FUNDING_CODE, fundingCode);
}
public void swapWithNext(final GenericOrganizationalUnit sponsor) {
int currentPos = 0;
int currentIndex = 0;
int nextIndex = 0;
rewind();
while(next()) {
currentPos = getPosition();
currentIndex = getSponsorOrder();
if (getSponsor().equals(sponsor)) {
break;
}
}
if (currentPos == 0) {
throw new IllegalArgumentException(
"The provided organisation is not an sponsor of this project.");
}
if (this.next()) {
nextIndex = this.getSponsorOrder();
} else {
throw new IllegalArgumentException("The provided sponsor ist the last one in the "
+ "collection, so there is no next object to switch with.");
}
this.rewind();
while(getPosition() != currentPos) {
this.next();
}
setSponsorOrder(nextIndex);
next();
setSponsorOrder(currentIndex);
this.rewind();
normalizeOrder();
}
public void swapWithPrevious(final GenericOrganizationalUnit sponsor) {
int previousPos = 0;
int previousIndex = 0;
int currentPos = 0;
int currentIndex = 0;
rewind();
while(next()) {
currentPos = getPosition();
currentIndex = getSponsorOrder();
if (getSponsor().equals(sponsor)) {
break;
}
previousPos = currentPos;
previousIndex = currentIndex;
}
if (currentPos == 0) {
throw new IllegalArgumentException(
"The provided organisation is not an sponsor of this project.");
}
if (previousPos == 0) {
throw new IllegalArgumentException(
String.format(
"The provided sponsor is the first one in this "
+ "collection, so there is no previous one to switch "
+ "with."));
}
rewind();
while(getPosition() != previousPos) {
next();
}
setSponsorOrder(currentIndex);
next();
setSponsorOrder(previousIndex);
rewind();
normalizeOrder();
}
private void normalizeOrder() {
rewind();
int i = 1;
while(next()) {
setSponsorOrder(i);
i++;
}
this.rewind();
}
}

View File

@ -94,6 +94,12 @@ sciproject.ui.sponsor.add=Add sponsoring organization
sciproject.ui.steps.funding.title=Funding description
sciproject.ui.funding.edit=Edit funding description
sciproject.ui.funding.upload=Upload
sciproject.ui.sponsor\ =Sponsoring organization
sciproject.ui.sponsor=Sponsoring organization
sciproject.ui.sponsor_name=Sponsoring organization
sciproject.ui.sponsor_remove=Action
sciproject.ui.sponsor_fundingcode=Funding code
sciproject.ui.sponsor.remove=Remove
sciproject.ui.sponsor_edit_assoc=Edit
sciproject.ui.sponsor.up=Up
sciproject.ui.sponsor.down=Down
sciproject.ui.sponsor.edit_assoc=Edit

View File

@ -95,6 +95,12 @@ sciproject.ui.sponsor.add=Drittmittelgeber hinzuf\u00fcgen
sciproject.ui.steps.funding.title=Beschreibung Finanzierung
sciproject.ui.funding.edit=Beschreibung der Finanzierung bearbeiten
sciproject.ui.funding.upload=Hochladen
sciproject.ui.sponsor\ =Drittmittelgeber
sciproject.ui.sponsor=Drittmittelgeber
sciproject.ui.sponsor_name=Drittmittelgeber
sciproject.ui.sponsor_remove=Aktion
sciproject.ui.sponsor_fundingcode=F\u00f6rderkennzeichen
sciproject.ui.sponsor.remove=Entfernen
sciproject.ui.sponsor_edit_assoc=Bearbeiten
sciproject.ui.sponsor.up=Hoch
sciproject.ui.sponsor.down=Runter
sciproject.ui.sponsor.edit_assoc=Bearbeiten

View File

@ -7,6 +7,8 @@ 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.bebop.event.FormSubmissionListener;
import com.arsdigita.bebop.form.TextField;
import com.arsdigita.cms.ContentType;
import com.arsdigita.cms.ItemSelectionModel;
import com.arsdigita.cms.contenttypes.GenericOrganizationalUnit;
@ -15,6 +17,7 @@ import com.arsdigita.cms.contenttypes.SciProjectConfig;
import com.arsdigita.cms.contenttypes.SciProjectSponsorCollection;
import com.arsdigita.cms.ui.ItemSearchWidget;
import com.arsdigita.cms.ui.authoring.BasicItemForm;
import com.arsdigita.cms.ui.authoring.SimpleEditStep;
import com.arsdigita.kernel.Kernel;
/**
@ -23,29 +26,66 @@ import com.arsdigita.kernel.Kernel;
* @version $Id$
*/
public class SciProjectSponsorForm extends BasicItemForm implements FormInitListener,
FormProcessListener {
FormProcessListener,
FormSubmissionListener {
private final SimpleEditStep editStep;
private ItemSearchWidget itemSearch;
private final String ITEM_SEARCH = "setSponsor";
private final static SciProjectConfig CONFIG = SciProject.getConfig();
private TextField fundingCode;
private Label selectedSponsorLabel;
private static final String ITEM_SEARCH = "setSponsor";
private static final String FUNDING_CODE = "fundingCode";
//private static final SciProjectConfig CONFIG = SciProject.getConfig();
public SciProjectSponsorForm(final ItemSelectionModel itemModel) {
public SciProjectSponsorForm(final ItemSelectionModel itemModel,
final SimpleEditStep editStep) {
super("SciProjectSetSponsor", itemModel);
this.editStep = editStep;
addSubmissionListener(this);
}
@Override
public void addWidgets() {
add(new Label(SciProjectGlobalizationUtil.globalize("sciproject.ui.sponsor")));
itemSearch = new ItemSearchWidget(ITEM_SEARCH, ContentType.findByAssociatedObjectType(
GenericOrganizationalUnit.class.getName()));
itemSearch.setEditAfterCreate(false);
add(itemSearch);
selectedSponsorLabel = new Label("");
add(selectedSponsorLabel);
add(new Label(SciProjectGlobalizationUtil.globalize("sciproject.ui.sponsor_fundingcode")));
fundingCode = new TextField(FUNDING_CODE);
add(fundingCode);
}
@Override
public void init(final FormSectionEvent event) throws FormProcessException {
final FormData data = event.getFormData();
final PageState state = event.getPageState();
final GenericOrganizationalUnit sponsor = ((SciProjectSponsorStep) editStep).
getSelectedSponsor();
final String sponsorFundingCode = ((SciProjectSponsorStep) editStep).
getSelectedSponsorFundingCode();
if (sponsor == null) {
itemSearch.setVisible(state, true);
selectedSponsorLabel.setVisible(state, false);
} else {
data.put(ITEM_SEARCH, sponsor);
if ((sponsorFundingCode == null) || sponsorFundingCode.isEmpty()) {
fundingCode.setValue(state, null);
} else {
fundingCode.setValue(state, sponsorFundingCode);
}
itemSearch.setVisible(state, false);
selectedSponsorLabel.setLabel(sponsor.getTitle(), state);
selectedSponsorLabel.setVisible(state, true);
}
setVisible(state, true);
}
@ -56,44 +96,89 @@ public class SciProjectSponsorForm extends BasicItemForm implements FormInitList
final SciProject project = (SciProject) getItemSelectionModel().getSelectedObject(state);
if (getSaveCancelSection().getSaveButton().isSelected(state)) {
GenericOrganizationalUnit sponsor = (GenericOrganizationalUnit) data.get(ITEM_SEARCH);
sponsor = (GenericOrganizationalUnit) sponsor.getContentBundle().getInstance(project.
getLanguage());
final GenericOrganizationalUnit sponsor = ((SciProjectSponsorStep) editStep).
getSelectedSponsor();
if ((project.getSponsors() != null) && !(project.getSponsors().isEmpty())) {
final SciProjectSponsorCollection sponsors = project.getSponsors();
sponsors.next();
project.removeSponsor(sponsors.getSponsor());
sponsors.close();
String sponsorFundingCode;
if (fundingCode.getValue(state) == null) {
sponsorFundingCode = null;
} else {
sponsorFundingCode = (String) fundingCode.getValue(state);
}
project.addSponsor(sponsor);
itemSearch.publishCreatedItem(data, sponsor);
// sponsor = (GenericOrganizationalUnit) data.get(ITEM_SEARCH);
// sponsor = (GenericOrganizationalUnit) sponsor.getContentBundle().getInstance(project.
// getLanguage());
if (sponsor == null) {
final GenericOrganizationalUnit sponsorToAdd = (GenericOrganizationalUnit) data.get(
ITEM_SEARCH);
if ((sponsorFundingCode == null) || sponsorFundingCode.isEmpty()) {
project.addSponsor(sponsorToAdd);
} else {
project.addSponsor(sponsorToAdd, sponsorFundingCode);
}
itemSearch.publishCreatedItem(data, sponsor);
} else {
final SciProjectSponsorCollection sponsors = project.getSponsors();
while (sponsors.next()) {
if (sponsors.getSponsor().equals(sponsor)) {
break;
}
}
sponsors.setFundingCode(sponsorFundingCode);
((SciProjectSponsorStep) editStep).setSelectedSponsor(null);
((SciProjectSponsorStep) editStep).setSelectedSponsorFundingCode(null);
sponsors.close();
}
}
init(event);
}
@Override
public void submitted(final FormSectionEvent event) throws FormProcessException {
if (getSaveCancelSection().getCancelButton().isSelected(event.getPageState())) {
((SciProjectSponsorStep) editStep).setSelectedSponsor(null);
((SciProjectSponsorStep) editStep).setSelectedSponsorFundingCode(null);
init(event);
}
}
@Override
public void validate(final FormSectionEvent event) throws FormProcessException {
final PageState state = event.getPageState();
final FormData data = event.getFormData();
boolean editing = false; //Are we editing the association?
if (data.get(ITEM_SEARCH) == null) {
data.addError(SciProjectGlobalizationUtil.globalize(
"sciproject.ui.sponsor_no_sponsor_selected"));
if ((((SciProjectSponsorStep) editStep).getSelectedSponsor() == null)
&& (data.get(ITEM_SEARCH) == null)) {
data.addError(SciProjectGlobalizationUtil.globalize("sciproject.ui.sponsor_no_sponsor_selected"));
return;
}
final SciProject project = (SciProject) getItemSelectionModel().getSelectedItem(state);
final GenericOrganizationalUnit sponsor = (GenericOrganizationalUnit) data.get(ITEM_SEARCH);
if (!(sponsor.getContentBundle().hasInstance(project.getLanguage(),
Kernel.getConfig().languageIndependentItems()))) {
data.addError(SciProjectGlobalizationUtil.globalize(
"sciproject.ui.sponsor.no_suitable_language_variant"));
final SciProject project = (SciProject) getItemSelectionModel().getSelectedObject(state);
GenericOrganizationalUnit sponsor = (GenericOrganizationalUnit) data.get(ITEM_SEARCH);
if (sponsor == null) {
sponsor = ((SciProjectSponsorStep) editStep).getSelectedSponsor();
editing = true;
}
}
if (!editing) {
final SciProjectSponsorCollection sponsors = project.getSponsors();
sponsors.addFilter(String.format("id = %s", sponsor.getContentBundle().getID().toString()));
if (sponsors.size() > 0) {
data.addError(SciProjectGlobalizationUtil.globalize(
"sciproject.ui.sponsor.already_added"));
}
sponsors.close();
}
}
}

View File

@ -24,19 +24,29 @@ import com.arsdigita.cms.contenttypes.GenericOrganizationalUnit;
import com.arsdigita.cms.contenttypes.SciProject;
import com.arsdigita.cms.contenttypes.SciProjectSponsorCollection;
import com.arsdigita.cms.dispatcher.ItemResolver;
import com.arsdigita.cms.ui.ControlButton;
import com.arsdigita.cms.ui.authoring.SimpleEditStep;
import com.arsdigita.util.Assert;
import com.arsdigita.util.LockableImpl;
import java.math.BigDecimal;
public class SciProjectSponsorSheet extends Table {
private ItemSelectionModel itemModel;
private final String TABLE_COL_EDIT = "table_col_edit";
private final String TABLE_COL_EDIT_ASSOC = "table_col_edit_assoc";
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 final String SELECTED_PROJECT = "selected_project_sponsor_association_project";
private final String SELECTED_SPONSOR = "selected_project_sponsor_association_sponsor";
private ItemSelectionModel itemModel;
private SimpleEditStep editStep;
public SciProjectSponsorSheet(final ItemSelectionModel itemModel) {
public SciProjectSponsorSheet(final ItemSelectionModel itemModel,
final SimpleEditStep editStep) {
super();
this.itemModel = itemModel;
this.editStep = editStep;
setEmptyView(new Label(SciProjectGlobalizationUtil.globalize(
"sciproject.ui.sponsor_none")));
@ -44,18 +54,37 @@ public class SciProjectSponsorSheet extends Table {
final TableColumnModel columnModel = getColumnModel();
columnModel.add(new TableColumn(
0,
SciProjectGlobalizationUtil.globalize("sciproject.ui.sponsor_name").localize(),
SciProjectGlobalizationUtil.globalize("sciproject.ui.sponsor_name"),
TABLE_COL_EDIT));
columnModel.add(new TableColumn(
0,
SciProjectGlobalizationUtil.globalize("sciproject.ui.sponsor_remove").localize(),
1,
SciProjectGlobalizationUtil.globalize("sciproject.ui.sponsor_fundingcode")));
columnModel.add(new TableColumn(
2,
SciProjectGlobalizationUtil.globalize("sciproject.ui.sponsor_edit_assoc"),
TABLE_COL_EDIT_ASSOC));
columnModel.add(new TableColumn(
3,
SciProjectGlobalizationUtil.globalize("sciproject.ui.sponsor_remove"),
TABLE_COL_DEL));
columnModel.add(new TableColumn(
4,
SciProjectGlobalizationUtil.globalize(
"sciproject.ui.sponsor.up"),
TABLE_COL_UP));
columnModel.add(new TableColumn(
5,
SciProjectGlobalizationUtil.globalize(
"sciproject.ui.sponsor.down"),
TABLE_COL_DOWN));
setModelBuilder(new ModelBuilder(itemModel));
columnModel.get(0).setCellRenderer(new EditCellRenderer());
columnModel.get(1).setCellRenderer(new DeleteCellRenderer());
columnModel.get(2).setCellRenderer(new EditAssocCellRenderer());
columnModel.get(3).setCellRenderer(new DeleteCellRenderer());
columnModel.get(4).setCellRenderer(new UpCellRenderer());
columnModel.get(5).setCellRenderer(new DownCellRenderer());
addTableActionListener(new ActionListener());
}
@ -68,6 +97,7 @@ public class SciProjectSponsorSheet extends Table {
this.itemModel = itemModel;
}
@Override
public TableModel makeModel(final Table table, final PageState state) {
table.getRowSelectionModel().clearSelection(state);
final SciProject project = (SciProject) itemModel.getSelectedObject(state);
@ -87,10 +117,12 @@ public class SciProjectSponsorSheet extends Table {
sponsors = project.getSponsors();
}
@Override
public int getColumnCount() {
return table.getColumnModel().size();
}
@Override
public boolean nextRow() {
boolean ret;
@ -103,18 +135,25 @@ public class SciProjectSponsorSheet extends Table {
return ret;
}
@Override
public Object getElementAt(final int columnIndex) {
switch (columnIndex) {
case 0:
return sponsors.getTitle();
case 1:
return SciProjectGlobalizationUtil.globalize("sciproject.ui.sponsor.remove").
localize();
return sponsors.getFundingCode();
case 2:
return SciProjectGlobalizationUtil.globalize(
"sciproject.ui.sponsor.edit_assoc").localize();
case 3:
return SciProjectGlobalizationUtil.globalize(
"sciproject.ui.sponsor.remove").localize();
default:
return null;
}
}
@Override
public Object getKeyAt(final int columnIndex) {
return sponsors.getID();
}
@ -160,6 +199,38 @@ public class SciProjectSponsorSheet extends Table {
}
private class EditAssocCellRenderer
extends LockableImpl
implements TableCellRenderer {
@Override
public Component getComponent(final Table table,
final PageState state,
final Object value,
final boolean isSelected,
final Object key,
final int row,
final int col) {
final com.arsdigita.cms.SecurityManager securityManager = CMS.getSecurityManager(state);
final SciProject project = (SciProject) itemModel.getSelectedObject(state);
final boolean canEdit = securityManager.canAccess(
state.getRequest(),
com.arsdigita.cms.SecurityManager.EDIT_ITEM,
project);
if (canEdit) {
final ControlLink link = new ControlLink(value.toString());
return link;
} else {
final Label label = new Label(value.toString());
return label;
}
}
}
private class DeleteCellRenderer extends LockableImpl implements TableCellRenderer {
@Override
@ -190,26 +261,100 @@ public class SciProjectSponsorSheet extends Table {
}
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) {
final Label label = new Label("");
return label;
} else {
final 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) {
final SciProject project = (SciProject) itemModel.getSelectedObject(state);
final SciProjectSponsorCollection sponsors = project.getSponsors();
if ((sponsors.size() - 1) == row) {
final Label label = new Label("");
return label;
} else {
final ControlLink link = new ControlLink("down");
return link;
}
}
}
private class ActionListener implements TableActionListener {
@Override
public void cellSelected(final TableActionEvent event) {
final PageState state = event.getPageState();
final GenericOrganizationalUnit sponsor = new GenericOrganizationalUnit(new BigDecimal(
event.getRowKey().toString()));
final SciProject project = (SciProject) itemModel.getSelectedObject(state);
final SciProjectSponsorCollection sponsors = project.getSponsors();
final TableColumn column = getColumnModel().get(event.getColumn().intValue());
if (TABLE_COL_EDIT.equals(column.getHeaderKey().toString())) {
//Nothing yet
} else if (TABLE_COL_EDIT_ASSOC.equals(column.getHeaderKey().toString())) {
while (sponsors.next()) {
if (sponsors.getSponsor().equals(sponsor)) {
break;
}
}
((SciProjectSponsorStep) editStep).setSelectedSponsor(sponsor);
((SciProjectSponsorStep) editStep).setSelectedSponsorFundingCode(sponsors.
getFundingCode());
editStep.showComponent(state,
SciProjectSponsorStep.SCIPROJECT_SPONSOR_STEP);
sponsors.close();
} else if (TABLE_COL_DEL.equals(column.getHeaderKey().toString())) {
Assert.exists(sponsor, GenericOrganizationalUnit.class);
project.removeSponsor(sponsor);
} else if (TABLE_COL_UP.equals(column.getHeaderKey().toString())) {
project.swapWithPreviousSponsor(sponsor);
} else if (TABLE_COL_DOWN.equals(column.getHeaderKey().toString())) {
project.swapWithNextSponsor(sponsor);
}
}
@Override
public void headSelected(final TableActionEvent event) {
//Nothing
}

View File

@ -1,6 +1,7 @@
package com.arsdigita.cms.contenttypes.ui;
import com.arsdigita.cms.ItemSelectionModel;
import com.arsdigita.cms.contenttypes.GenericOrganizationalUnit;
import com.arsdigita.cms.ui.authoring.AuthoringKitWizard;
import com.arsdigita.cms.ui.authoring.BasicItemForm;
import com.arsdigita.cms.ui.authoring.SimpleEditStep;
@ -13,7 +14,10 @@ import com.arsdigita.cms.ui.workflow.WorkflowLockedComponentAccess;
*/
public class SciProjectSponsorStep extends SimpleEditStep {
private String SCIPROJECT_SPONSOR_STEP = "SciProjectSponsorStep";
protected final static String SCIPROJECT_SPONSOR_STEP = "SciProjectSponsorStep";
private GenericOrganizationalUnit selectedSponsor;
private String selectedSponsorFundingCode;
public SciProjectSponsorStep(final ItemSelectionModel itemModel,
final AuthoringKitWizard parent) {
@ -25,14 +29,30 @@ public class SciProjectSponsorStep extends SimpleEditStep {
final String prefix) {
super(itemModel, parent, prefix);
final BasicItemForm sponsorForm = new SciProjectSponsorForm(itemModel);
final BasicItemForm sponsorForm = new SciProjectSponsorForm(itemModel, this);
add(SCIPROJECT_SPONSOR_STEP,
(String) SciProjectGlobalizationUtil.globalize("sciproject.ui.sponsor.add").localize(),
new WorkflowLockedComponentAccess(sponsorForm, itemModel),
sponsorForm.getSaveCancelSection().getCancelButton());
final SciProjectSponsorSheet sheet = new SciProjectSponsorSheet(itemModel);
final SciProjectSponsorSheet sheet = new SciProjectSponsorSheet(itemModel, this);
setDisplayComponent(sheet);
}
protected GenericOrganizationalUnit getSelectedSponsor() {
return selectedSponsor;
}
protected void setSelectedSponsor(final GenericOrganizationalUnit selectedSponsor) {
this.selectedSponsor = selectedSponsor;
}
protected String getSelectedSponsorFundingCode() {
return selectedSponsorFundingCode;
}
protected void setSelectedSponsorFundingCode(final String selectedSponsorFundingCode) {
this.selectedSponsorFundingCode = selectedSponsorFundingCode;
}
}

View File

@ -457,6 +457,9 @@ public class SciProjectSummaryTab implements GenericOrgaUnitTab {
final Element sponsorElem = sponsorsElem.newChildElement("sponsor");
final GenericOrganizationalUnit sponsor = sponsors.getSponsor();
sponsorElem.setText(sponsor.getTitle());
if ((sponsors.getFundingCode() != null) && !sponsors.isEmpty()) {
sponsorElem.addAttribute("fundingCode", sponsors.getFundingCode());
}
}
}