(activityModel, "ampActivityGroup")));
+ name.getTextContainer().add(new AmpUniqueComponentTitleValidator(new PropertyModel<>(activityModel, "ampActivityGroup")));
add(name);
- AmpTextAreaFieldPanel description = new AmpTextAreaFieldPanel("description", new PropertyModel(componentModel, "description"), COMPONENT_DESCRIPTION, false, false, false);
+ AmpTextAreaFieldPanel description = new AmpTextAreaFieldPanel("description", new PropertyModel<>(componentModel, "description"), COMPONENT_DESCRIPTION, false, false, false);
add(description);
+ AmpCategorySelectFieldPanel componentStatus = new AmpCategorySelectFieldPanel(
+ "componentStatus", CategoryConstants.COMPONENT_STATUS_KEY,
+ new PropertyModel<>(componentModel, "componentStatus"),
+ COMPONENT_STATUS, //fmname
+ false, false, false, null, false);
+// componentStatus.getChoiceContainer().add(new AjaxFormComponentUpdatingBehavior("onchange") {
+// @Override
+// protected void onUpdate(AjaxRequestTarget target) {
+// String selectedValue = componentModel.getObject().getComponentStatus().getValue();
+// logger.info("Selected Status: "+selectedValue);
+// if ("rejected".equalsIgnoreCase(selectedValue)) {
+// target.appendJavaScript("$('#" + rejectReason.getMarkupId() + "').show();");
+// } else {
+// target.appendJavaScript("$('#" + rejectReason.getMarkupId() + "').hide();");
+// }
+//
+//
+// }
+// });
+ componentStatus.getChoiceContainer().setRequired(true);
+ componentStatus.getChoiceContainer().add(new AttributeModifier("style", "width: 100px;"));
+ add(componentStatus);
+
}
}
diff --git a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/tables/AmpComponentsFundingFormTableFeature.html b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/tables/AmpComponentsFundingFormTableFeature.html
index 23a4af6f6f5..9b85632f6b6 100644
--- a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/tables/AmpComponentsFundingFormTableFeature.html
+++ b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/tables/AmpComponentsFundingFormTableFeature.html
@@ -5,10 +5,14 @@
|
|
diff --git a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/tables/AmpComponentsFundingFormTableFeature.java b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/tables/AmpComponentsFundingFormTableFeature.java
index f7d422cc332..37f7b3ca900 100644
--- a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/tables/AmpComponentsFundingFormTableFeature.java
+++ b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/tables/AmpComponentsFundingFormTableFeature.java
@@ -5,32 +5,41 @@
package org.dgfoundation.amp.onepager.components.features.tables;
import org.apache.wicket.AttributeModifier;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
+import org.apache.wicket.event.Broadcast;
import org.apache.wicket.model.AbstractReadOnlyModel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.PropertyModel;
+import org.dgfoundation.amp.onepager.OnePagerConst;
import org.dgfoundation.amp.onepager.components.AmpFundingAmountComponent;
import org.dgfoundation.amp.onepager.components.ListEditor;
import org.dgfoundation.amp.onepager.components.ListEditorRemoveButton;
-import org.dgfoundation.amp.onepager.components.fields.AmpCategorySelectFieldPanel;
-import org.dgfoundation.amp.onepager.components.fields.AmpSelectFieldPanel;
-import org.dgfoundation.amp.onepager.components.fields.AmpTextFieldPanel;
+import org.dgfoundation.amp.onepager.components.fields.*;
+import org.dgfoundation.amp.onepager.events.ContactChangedEvent;
import org.dgfoundation.amp.onepager.events.FundingOrgListUpdateEvent;
import org.dgfoundation.amp.onepager.events.UpdateEventBehavior;
import org.dgfoundation.amp.onepager.models.AbstractMixedSetModel;
import org.dgfoundation.amp.onepager.models.AmpRelatedOrgsModel;
-import org.digijava.module.aim.dbentity.AmpActivityVersion;
-import org.digijava.module.aim.dbentity.AmpComponent;
-import org.digijava.module.aim.dbentity.AmpComponentFunding;
-import org.digijava.module.aim.dbentity.AmpOrganisation;
+import org.digijava.kernel.cache.AbstractCache;
+import org.digijava.kernel.cache.ehcache.EhCacheWrapper;
+import org.digijava.kernel.persistence.PersistenceManager;
+import org.digijava.kernel.user.User;
+import org.digijava.module.aim.dbentity.*;
+import org.digijava.module.aim.util.TeamUtil;
import org.digijava.module.categorymanager.dbentity.AmpCategoryValue;
import org.digijava.module.categorymanager.util.CategoryConstants;
+import org.digijava.module.trubudget.dbentity.AmpComponentFundingTruWF;
+import org.digijava.module.trubudget.model.workflowitem.WorkflowItemDetailsModel;
+import org.digijava.module.trubudget.util.ProjectUtil;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
+import java.net.URISyntaxException;
+import java.util.*;
import static org.digijava.module.aim.annotations.interchange.ActivityFieldsConstants.*;
+import static org.digijava.module.aim.auth.AmpPostLoginAction.doActualTruBudgetLogin;
+import static org.digijava.module.um.util.DbUtil.getGlobalSettingsBySection;
+import static org.digijava.module.um.util.DbUtil.getSettingValue;
/**
* @author aartimon@dginternational.org
@@ -62,10 +71,42 @@ public boolean condition(AmpComponentFunding item) {
@Override
protected void onPopulateItem(org.dgfoundation.amp.onepager.components.ListItem item) {
IModel model = item.getModel();
+// if (model.getObject().getComponentFundingDocuments() == null)
+// model.getObject().getComponentFundingDocuments();
+ if (getSession().getMetaData(OnePagerConst.COMPONENT_FUNDING_NEW_ITEMS)== null)
+ getSession().setMetaData(OnePagerConst.COMPONENT_FUNDING_NEW_ITEMS,new HashMap<>());
+ if (getSession().getMetaData(OnePagerConst.COMPONENT_FUNDING_DELETED_ITEMS) == null)
+ getSession().setMetaData(OnePagerConst.COMPONENT_FUNDING_DELETED_ITEMS, new HashMap<>());
+ if (getSession().getMetaData(OnePagerConst.COMPONENT_FUNDING_EXISTING_ITEM_TITLES) == null)
+ getSession().setMetaData(OnePagerConst.COMPONENT_FUNDING_EXISTING_ITEM_TITLES, new HashMap<>());
+// item.add(new AttributeModifier("style",""))
+ User user = model.getObject().getComponent().getActivity().getActivityCreator().getUser();
+ if (getSettingValue(getGlobalSettingsBySection("trubudget"),"isEnabled").equalsIgnoreCase("true")&& user.getTruBudgetEnabled()) {
+ if (model.getObject().getTransactionType()==1) {
+ PersistenceManager.getRequestDBSession().createQuery("FROM " + AmpComponentFundingTruWF.class.getName() + " act WHERE act.ampComponentFundingId= '" + model.getObject().getJustAnId() + "' AND act.ampComponentFundingId IS NOT NULL", AmpComponentFundingTruWF.class).stream().findAny().ifPresent(ampComponentFundingTruWF->{
+ WorkflowItemDetailsModel workflowItemDetailsModel = null;
+ try {
+ List settings = getGlobalSettingsBySection("trubudget");
+ doActualTruBudgetLogin(user);
+ String token = ProjectUtil.getTrubudgetToken();
+ workflowItemDetailsModel = ProjectUtil.getWFItemDetails(ampComponentFundingTruWF,settings,token);
+ } catch (Exception e) {
+ logger.info("Error when getting WF details: ",e);
+ }
+ if (workflowItemDetailsModel!=null && workflowItemDetailsModel.getData()!=null) {
+ if (!workflowItemDetailsModel.getData().getWorkflowitem().getData().getStatus().equalsIgnoreCase("open")) {
+ item.add(new AttributeModifier("style", "pointer-events: none; opacity: 0.5;"));
+ }
+ }
+ });
+
+
+ }
+ }
try{
AmpCategorySelectFieldPanel adjustmentTypes = new AmpCategorySelectFieldPanel(
"adjustmentType", CategoryConstants.ADJUSTMENT_TYPE_KEY,
- new PropertyModel(model,"adjustmentType"),
+ new PropertyModel<>(model, "adjustmentType"),
COMPONENT_FUNDING_ADJUSTMENT_TYPE, //fmname
false, false, false, null, false);
adjustmentTypes.getChoiceContainer().setRequired(true);
@@ -73,9 +114,61 @@ protected void onPopulateItem(org.dgfoundation.amp.onepager.components.ListItem<
item.add(adjustmentTypes);
} catch(Exception e) {
- logger.error("AmpCategoryGroupFieldPanel initialization failed");
+ logger.info("Unable to add adjustment type dropdown: ",e);
+ }
+ try {
+ AmpTextAreaFieldPanel rejectReason = new AmpTextAreaFieldPanel("componentRejectReason", new PropertyModel<>(model, "componentRejectReason"), "Reject Reason", false, false, false);
+ rejectReason.setOutputMarkupId(true);
+// rejectReason.setVisible(false);
+ if (!model.getObject().getComponentFundingStatus().getValue().equalsIgnoreCase("rejected")) {
+ rejectReason.add(new AttributeModifier("style", "display: none;"));
+ }
+
+ item.add(rejectReason);
+
+ AmpCategorySelectFieldPanel componentFundingStatus = new AmpCategorySelectFieldPanel(
+ "componentFundingStatus", CategoryConstants.COMPONENT_FUNDING_STATUS_KEY,
+ new PropertyModel<>(model, "componentFundingStatus"),
+ COMPONENT_FUNDING_STATUS, //fmname
+ false, false, false, null, false)
+ ;
+ componentFundingStatus.getChoiceContainer().add(new AjaxFormComponentUpdatingBehavior("onchange") {
+ @Override
+ protected void onUpdate(AjaxRequestTarget target) {
+ String selectedValue = model.getObject().getComponentFundingStatus().getValue();
+ logger.info("Selected Status: "+selectedValue);
+ if ("rejected".equalsIgnoreCase(selectedValue)) {
+ target.appendJavaScript("$('#" + rejectReason.getMarkupId() + "').show();");
+ } else {
+ target.appendJavaScript("$('#" + rejectReason.getMarkupId() + "').hide();");
+ }
+
+
+ }
+ });
+ componentFundingStatus.getChoiceContainer().setRequired(true);
+ componentFundingStatus.getChoiceContainer().add(new AttributeModifier("style", "width: 100px;"));
+ item.add(componentFundingStatus);
+ } catch (Exception e)
+ {
+ logger.info("Unable to add component funding status dropdown: ",e);
+ }
+ try {
+ AmpComponentFundingResourcesTableFeature resourcesList =
+ new AmpComponentFundingResourcesTableFeature("componentFundingDocuments", "Component Funding Documents", model);
+ item.add(resourcesList);
+
+ AmpComponentFundingNewResourceFieldPanel newDoc =
+ new AmpComponentFundingNewResourceFieldPanel("addNewComponentFundingDocument", model, "Add New Document", resourcesList);
+ newDoc.setOutputMarkupId(true);
+ item.add(newDoc);
+ }catch (Exception e)
+ {
+ e.printStackTrace();
}
+//
+
// read the list of organizations from related organizations page, and
// create a unique set with the orgs chosen
AbstractReadOnlyModel> orgsList = new AmpRelatedOrgsModel(activityModel, null, true);
@@ -93,15 +186,20 @@ protected void onPopulateItem(org.dgfoundation.amp.onepager.components.ListItem<
model, orgsList);
item.add(secondOrgSelect);
- AmpFundingAmountComponent amountComponent = new AmpFundingAmountComponent("fundingAmount",
+ AmpFundingAmountComponent amountComponent = new AmpFundingAmountComponent<>("fundingAmount",
model, COMPONENT_FUNDING_AMOUNT, "transactionAmount", COMPONENT_FUNDING_CURRENCY,
- "currency", COMPONENT_FUNDING_TRANSACTION_DATE, "transactionDate", false,"6");
+ "currency", COMPONENT_FUNDING_TRANSACTION_DATE, "transactionDate", false, "6");
amountComponent.getAmount().getTextContainer().setRequired(false);
item.add(amountComponent);
- AmpTextFieldPanel description = new AmpTextFieldPanel("description", new PropertyModel(model, "description"), COMPONENT_FUNDING_DESCRIPTION, false);
+ AmpTextFieldPanel description = new AmpTextFieldPanel<>("description", new PropertyModel<>(model, "description"), COMPONENT_FUNDING_DESCRIPTION, false);
item.add(description);
+// final AmpNewResourceFieldPanel newDoc =
+// new AmpNewResourceFieldPanel("addNewDocument", am, "Add New Document", resourcesList, false);
+// newDoc.setOutputMarkupId(true);
+// add(newDoc);
+
item.add(new ListEditorRemoveButton("delete", "Delete"));
}
};
@@ -114,8 +212,8 @@ private AmpSelectFieldPanel buildSelectFieldPanel(String id, St
IModel model,
AbstractReadOnlyModel>
orgsList) {
- AmpSelectFieldPanel selectField = new AmpSelectFieldPanel(id,
- new PropertyModel(model, expression), orgsList, fmName
+ AmpSelectFieldPanel selectField = new AmpSelectFieldPanel<>(id,
+ new PropertyModel<>(model, expression), orgsList, fmName
, false, true, null, false);
selectField.add(UpdateEventBehavior.of(FundingOrgListUpdateEvent.class));
selectField.getChoiceContainer().add(new AttributeModifier("style", "width: 100px;"));
@@ -135,16 +233,13 @@ private AbstractReadOnlyModel> getSubsetModel( final I
@Override
public List getObject() {
- List result = new ArrayList();
+ List result = new ArrayList<>();
Set allComp = compFundsModel.getObject();
if (allComp != null){
- Iterator iterator = allComp.iterator();
- while (iterator.hasNext()) {
- AmpComponentFunding comp = (AmpComponentFunding) iterator
- .next();
+ for (AmpComponentFunding comp : allComp) {
if (comp.getTransactionType() == transactionType)
//if (comp.getComponent().hashCode() == componentModel.getObject().hashCode())
- result.add(comp);
+ result.add(comp);
}
}
diff --git a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/tables/AmpDonorCommitmentsFormTableFeature.html b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/tables/AmpDonorCommitmentsFormTableFeature.html
index bbca7ed410f..0984b4aba41 100644
--- a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/tables/AmpDonorCommitmentsFormTableFeature.html
+++ b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/tables/AmpDonorCommitmentsFormTableFeature.html
@@ -7,7 +7,8 @@
-
+
+
diff --git a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/tables/AmpGPINiSurveyResourcesFormTableFeature.java b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/tables/AmpGPINiSurveyResourcesFormTableFeature.java
index 5871efeb569..4eeaccefbe6 100644
--- a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/tables/AmpGPINiSurveyResourcesFormTableFeature.java
+++ b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/tables/AmpGPINiSurveyResourcesFormTableFeature.java
@@ -97,13 +97,14 @@ public List getObject() {
.ofNullable(getSession().getMetaData(OnePagerConst.GPI_RESOURCES_DELETED_ITEMS))
.orElse(new HashSet());
- List ret = new ArrayList();
-
if (refreshExistingDocs) {
existingTmpDocs = getExistingObject();
}
+ if (existingTmpDocs==null){
+ existingTmpDocs=new ArrayList<>();
+ }
- ret.addAll(existingTmpDocs);
+ List ret = new ArrayList<>(existingTmpDocs);
for (AmpGPINiSurveyResponseDocument d : setModel.getObject()) {
if (delItems.contains(d)) {
@@ -211,7 +212,7 @@ public void onClick(AjaxRequestTarget target) {
newItems.remove(item.getModelObject());
}
target.add(list.getParent());
- responseValidationFields.stream().forEach(r -> r.reloadValidationField(target, false));
+ responseValidationFields.forEach(r -> r.reloadValidationField(target, false));
}
};
item.add(delRelOrg);
diff --git a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/tables/AmpResourcesFormTableFeature.java b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/tables/AmpResourcesFormTableFeature.java
index 112e8f3e990..4187e3c0164 100644
--- a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/tables/AmpResourcesFormTableFeature.java
+++ b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/tables/AmpResourcesFormTableFeature.java
@@ -128,19 +128,19 @@ public List getObject() {
HashSet delItems = getSession().getMetaData(OnePagerConst.RESOURCES_DELETED_ITEMS);
if (delItems == null)
delItems = new HashSet();
- List ret = new ArrayList();
if (refreshExistingDocs)
existingTmpDocs = getExistingObject();
- ret.addAll(existingTmpDocs);
+ if (existingTmpDocs==null)
+ {
+ existingTmpDocs=new ArrayList<>();
+ }
+ List ret = new ArrayList<>(existingTmpDocs);
if (am.getObject().getActivityDocuments() == null)
am.getObject().setActivityDocuments(new HashSet());
- Iterator it = setModel.getObject().iterator();
- while (it.hasNext()) {
- AmpActivityDocument d = (AmpActivityDocument) it
- .next();
+ for (AmpActivityDocument d : setModel.getObject()) {
//check if marked for delete
if (delItems.contains(d)) {
for (TemporaryDocument td : existingTmpDocs) {
@@ -224,10 +224,10 @@ protected void populateItem(final ListItem item) {
if (webLink != null && webLink.length() > 0) {
if (!webLink.startsWith("http"))
webLink = "http://" + webLink;
- ExternalLink link = new ExternalLink("download", new Model(webLink));
+ ExternalLink link = new ExternalLink("download", new Model<>(webLink));
item.add(link);
WebMarkupContainer downloadLinkImg = new WebMarkupContainer("downloadImage");
- downloadLinkImg.add(new AttributeModifier("src", new Model("/TEMPLATE/ampTemplate/img_2/ico_attachment.png")));
+ downloadLinkImg.add(new AttributeModifier("src", new Model<>("/TEMPLATE/ampTemplate/img_2/ico_attachment.png")));
link.add(downloadLinkImg);
} else {
Link downloadLink = new Link("download") {
@@ -241,7 +241,7 @@ public void onClick() {
String contentType = item.getModelObject().getFileName();
int index = contentType.lastIndexOf('.');
- String extension = contentType.substring(index + 1, contentType.length());
+ String extension = contentType.substring(index + 1);
String extPath = "/TEMPLATE/ampTemplate/images/icons/" + extension + ".gif";
File extImgFile = new File(WebApplication.get().getServletContext().getRealPath(extPath));
if (!extImgFile.exists())
@@ -250,7 +250,7 @@ public void onClick() {
extPath = "/TEMPLATE/ampTemplate/images/icons/" + extension + ".gif";
WebMarkupContainer downloadLinkImg = new WebMarkupContainer("downloadImage");
- downloadLinkImg.add(new AttributeModifier("src", new Model(extPath)));
+ downloadLinkImg.add(new AttributeModifier("src", new Model<>(extPath)));
downloadLink.add(downloadLinkImg);
}
@@ -260,7 +260,7 @@ public void onClick(AjaxRequestTarget target) {
if (item.getModelObject().isExisting()) {
HashSet delItems = getSession().getMetaData(OnePagerConst.RESOURCES_DELETED_ITEMS);
if (delItems == null) {
- delItems = new HashSet();
+ delItems = new HashSet<>();
getSession().setMetaData(OnePagerConst.RESOURCES_DELETED_ITEMS, delItems);
}
delItems.add(item.getModelObject().getExistingDocument());
diff --git a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/tables/AmpSectorsFormTableFeature.java b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/tables/AmpSectorsFormTableFeature.java
index 1359faa6cee..eb2a4255d9c 100644
--- a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/tables/AmpSectorsFormTableFeature.java
+++ b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/tables/AmpSectorsFormTableFeature.java
@@ -51,7 +51,7 @@ public AmpSectorsFormTableFeature(String id, String fmName,
final AmpClassificationConfiguration sectorClassification)
throws Exception {
super(id, am, fmName, false, true);
- final IModel> setModel = new PropertyModel>(
+ final IModel> setModel = new PropertyModel<>(
am, "sectors");
if (setModel.getObject() == null)
setModel.setObject(new HashSet());
diff --git a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/fields/AmpCategoryFieldPanel.java b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/fields/AmpCategoryFieldPanel.java
index f082691c2a7..5b26de81eea 100644
--- a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/fields/AmpCategoryFieldPanel.java
+++ b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/fields/AmpCategoryFieldPanel.java
@@ -98,8 +98,7 @@ public AmpCategoryFieldPanel(String id, String categKey, String fmName,
public List getObject() {
try
{
- List collectionByKey = CategoryManagerUtil.getAllAcceptableValuesForACVClass(categoryKey, relatedChoicesModel == null ? null : relatedChoicesModel.getObject());
- return collectionByKey;
+ return CategoryManagerUtil.getAllAcceptableValuesForACVClass(categoryKey, relatedChoicesModel == null ? null : relatedChoicesModel.getObject());
} catch (Exception e) {
logger.error(e.getMessage(), e);
throw new RuntimeException(e);
diff --git a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/fields/AmpComponentFundingNewResourceFieldPanel.html b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/fields/AmpComponentFundingNewResourceFieldPanel.html
new file mode 100644
index 00000000000..07f47814292
--- /dev/null
+++ b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/fields/AmpComponentFundingNewResourceFieldPanel.html
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/fields/AmpComponentFundingNewResourceFieldPanel.java b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/fields/AmpComponentFundingNewResourceFieldPanel.java
new file mode 100644
index 00000000000..2e30c4f5c98
--- /dev/null
+++ b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/fields/AmpComponentFundingNewResourceFieldPanel.java
@@ -0,0 +1,393 @@
+package org.dgfoundation.amp.onepager.components.fields;
+
+import org.apache.wicket.AttributeModifier;
+import org.apache.wicket.MetaDataKey;
+import org.apache.wicket.Session;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.markup.html.AjaxLink;
+import org.apache.wicket.behavior.AttributeAppender;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.upload.FileUpload;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.model.PropertyModel;
+import org.apache.wicket.util.upload.FileItem;
+import org.dgfoundation.amp.onepager.AmpAuthWebSession;
+import org.dgfoundation.amp.onepager.OnePagerConst;
+import org.dgfoundation.amp.onepager.OnePagerUtil;
+import org.dgfoundation.amp.onepager.components.features.AmpFeaturePanel;
+import org.dgfoundation.amp.onepager.components.features.tables.AmpComponentFundingResourcesTableFeature;
+import org.dgfoundation.amp.onepager.components.upload.FileUploadPanel;
+import org.dgfoundation.amp.onepager.helper.ResourceTranslation;
+import org.dgfoundation.amp.onepager.helper.ResourceTranslationStore;
+import org.dgfoundation.amp.onepager.helper.TemporaryComponentFundingDocument;
+import org.dgfoundation.amp.onepager.helper.TemporaryDocument;
+import org.dgfoundation.amp.onepager.models.ResourceTranslationModel;
+import org.dgfoundation.amp.onepager.translation.TranslatorUtil;
+import org.dgfoundation.amp.onepager.translation.TrnLabel;
+import org.dgfoundation.amp.onepager.util.AmpFMTypes;
+import org.digijava.kernel.ampapi.endpoints.filetype.FileTypeManager;
+import org.digijava.kernel.ampapi.endpoints.filetype.FileTypeValidationResponse;
+import org.digijava.kernel.ampapi.endpoints.filetype.FileTypeValidationStatus;
+import org.digijava.kernel.translator.TranslatorWorker;
+import org.digijava.module.aim.dbentity.AmpComponentFunding;
+import org.digijava.module.aim.helper.GlobalSettingsConstants;
+import org.digijava.module.aim.util.FeaturesUtil;
+import org.digijava.module.contentrepository.util.DocumentManagerUtil;
+
+import java.io.BufferedInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.*;
+
+public class AmpComponentFundingNewResourceFieldPanel extends AmpFeaturePanel {
+
+
+ private static final long serialVersionUID = 1L;
+
+ protected WebMarkupContainer webLinkFeedbackContainer;
+ protected Label webLinkFeedbackLabel;
+ boolean resourceIsURL = false;
+ protected boolean pathSelected;
+ protected boolean urlSelected;
+ protected boolean contentValid;
+
+ final protected String DEFAULT_MESSAGE = "*" + TranslatorUtil.getTranslatedText("Please enter title");
+ final protected String URL_NOT_SELECTED = "*" + TranslatorUtil.getTranslatedText("URL not selected");
+ final protected String FILE_PATH_NOT_SELECTED = "*" + TranslatorUtil.getTranslatedText("File not submitted or upload has not finished");
+ final protected String CONTENT_TYPE_NOT_ALLOWED = "*" + TranslatorUtil.getTranslatedText("Content type not allowed:");
+ final protected String CONTENT_TYPE_EXTENSION_MISMATCH = "*" + TranslatorUtil.getTranslatedText("File extension does not match the actual file format:");
+ final protected String CONTENT_TYPE_INTERNAL_ERROR = "*" + TranslatorUtil.getTranslatedText("Internal error during the content validation");
+
+ boolean webLinkFormatCorrect;
+ protected Model newResourceIdModel = new Model<>();
+
+ public AmpComponentFundingNewResourceFieldPanel(final String id,
+ final IModel model,
+ final String fmName,
+ final AmpComponentFundingResourcesTableFeature resourcesList) {
+
+ super(id, model, fmName, true);
+
+ TemporaryComponentFundingDocument tmpDoc = new TemporaryComponentFundingDocument ();
+ String docId =generateResourceKey("newResource");
+ newResourceIdModel.setObject(docId);
+ tmpDoc.setNewTemporaryDocumentId(docId);
+ final IModel td = new Model<>(tmpDoc);
+ final ResourceTranslationModel titleModel = new ResourceTranslationModel(new PropertyModel(td, "title"),newResourceIdModel);
+ final AmpTextFieldPanel name = new AmpTextFieldPanel<>("componentFundingDocumentDocTitle", titleModel, "Title", AmpFMTypes.MODULE, Boolean.TRUE);
+ name.setTextContainerDefaultMaxSize();
+ name.setOutputMarkupId(true);
+ final ResourceTranslationModel descModel = new ResourceTranslationModel(new PropertyModel(td, "description"),newResourceIdModel);
+ final AmpTextAreaFieldPanel desc = new AmpTextAreaFieldPanel("componentFundingDocumentDocDesc", descModel, "Description", false, false, false);
+ desc.setOutputMarkupId(true);
+ final ResourceTranslationModel noteModel = new ResourceTranslationModel(new PropertyModel(td, "note"),newResourceIdModel);
+ final AmpTextAreaFieldPanel note = new AmpTextAreaFieldPanel("componentFundingDocumentDocNote",noteModel, "Note", false, false, false);
+ note.setOutputMarkupId(true);
+// final AmpCategorySelectFieldPanel type = new AmpCategorySelectFieldPanel("docType", CategoryConstants.DOCUMENT_TYPE_KEY, new PropertyModel(td, "type"), "Type", true, true);
+ //FileUploadField file = new FileUploadField("file", new AmpFileUploadModel(new PropertyModel(td, "file")));
+ //file.setOutputMarkupId(true);
+
+ String componentId = "new";
+ if (model.getObject().getAmpComponentFundingId() != null)
+ componentId = Long.toString(model.getObject().getAmpComponentFundingId());
+ final Model fileItemModel = new Model();
+ FileUploadPanel fileUpload = new FileUploadPanel("componentFundingDocumentFile",componentId, fileItemModel);
+
+// final AmpTextFieldPanel webLink = new AmpTextFieldPanel("webLink",
+// new PropertyModel(td, "webLink"), "Web Link", true, true);
+// webLink.setTextContainerDefaultMaxSize();
+// webLink.setVisibilityAllowed(false);
+// webLink.setOutputMarkupId(true);
+
+ String resourceLabelModel = "File";
+// if (newResourceIsWebLink) {
+// resourceLabelModel = "Web Link";
+// resourceIsURL = true;
+// }
+
+ TrnLabel resourceLabel = new TrnLabel("componentFundingDocumentResourceLabel", resourceLabelModel);
+
+ // create the form
+ final Form> form = new Form("componentFundingDocumentForm") {
+
+ /**
+ * @see org.apache.wicket.markup.html.form.Form#onSubmit()
+ */
+ @Override
+ protected void onSubmit() {
+ TemporaryComponentFundingDocument tmp = td.getObject();
+
+ if (fileItemModel.getObject() != null)
+ tmp.setFile(new FileUpload(fileItemModel.getObject()));
+
+ if (updateVisibility(td.getObject(), resourceIsURL)) {
+ if (tmp.getFile() != null){
+ double fSize = tmp.getFile().getSize()*100/(1024*1024);
+ fSize = fSize/100;
+ tmp.setFileSize(fSize);
+ tmp.setFileName(tmp.getFile().getClientFileName());
+ tmp.setContentType(tmp.getFile().getContentType());
+ }
+
+ if (tmp.getWebLink() != null) {
+ tmp.setWebLink(DocumentManagerUtil.processUrl(tmp.getWebLink(), null));
+ tmp.setFileName(tmp.getWebLink());
+ }
+
+ tmp.setDate(Calendar.getInstance());
+ tmp.setYear(String.valueOf((tmp.getDate()).get(Calendar.YEAR)));
+// HashSet newItemsSet = getSession().getMetaData(OnePagerConst.COMPONENT_FUNDING_NEW_ITEMS).get(model.getObject().getJustAnId());
+// if (newItemsSet == null) {
+// newItemsSet = new HashSet<>();
+//// getSession().getMetaData(OnePagerConst.COMPONENT_FUNDING_NEW_ITEMS).get(model.getObject().getJustAnId()).addAll(newItemsSet);
+// }
+
+ MetaDataKey>> metaDataKey = OnePagerConst.COMPONENT_FUNDING_NEW_ITEMS;
+
+ HashMap> metaData = getSession().getMetaData(metaDataKey);
+
+ if (metaData == null) {
+ metaData = new HashMap<>();
+ }
+ getSession().setMetaData(metaDataKey, metaData);
+
+ HashSet newItemsSet = metaData.computeIfAbsent(model.getObject().getJustAnId(), k -> new HashSet<>());
+
+
+// existingSet.addAll(newItemsSet);
+
+ tmp.setTranslatedDescriptionList(getTranslationsForField(tmp.getNewTemporaryDocumentId(),"description"));
+ tmp.setTranslatedTitleList(getTranslationsForField(tmp.getNewTemporaryDocumentId(),"title"));
+ tmp.setTranslatedNoteList(getTranslationsForField(tmp.getNewTemporaryDocumentId(),"description"));
+ newItemsSet.add(tmp);
+ TemporaryComponentFundingDocument tmpDoc = new TemporaryComponentFundingDocument();
+ String docId = generateResourceKey("newResource");
+ newResourceIdModel.setObject(docId);
+ tmpDoc.setNewTemporaryDocumentId(docId);
+ td.setObject(tmpDoc);
+ fileItemModel.setObject(null);
+ }
+ }
+ };
+
+ add(createAddNewLink(fmName));
+
+ WebMarkupContainer rc = new WebMarkupContainer("componentFundingDocumentResourcePanel");
+ rc.add(new AttributeModifier("id", getToggleId()));
+ rc.add(form);
+ rc.add(name);
+ rc.add(fileUpload);
+ rc.setOutputMarkupId(true);
+ add(rc);
+
+// if (newResourceIsWebLink){
+// fileUpload.setVisible(false);
+// webLink.setVisibilityAllowed(true);
+// }
+
+ form.add(name);
+ form.add(desc);
+ form.add(note);
+// form.add(type);
+ form.add(fileUpload);
+ form.add(resourceLabel);
+// form.add(webLink);
+
+ // create the ajax button used to submit the form
+ AmpButtonField submit = new AmpButtonField("componentFundingDocumentAjaxSubmit", "Add", true){
+ @Override
+ protected void onSubmit(AjaxRequestTarget target, Form> form) {
+ TemporaryDocument tmp = td.getObject();
+ if (fileItemModel.getObject() != null)
+ tmp.setFile(new FileUpload(fileItemModel.getObject()));
+ target.add(name);
+ target.add(desc);
+ target.add(note);
+// target.add(type);
+
+// if (webLink.isVisibleInHierarchy()) {
+// target.add(webLink);
+// }
+
+ target.add(resourcesList);
+// target.add(webLinkFeedbackContainer);
+ if (updateVisibility(td.getObject(), resourceIsURL)){
+ target.appendJavaScript("$('#" + getToggleId() + "').hide();");
+ target.appendJavaScript("$('#" + getToggleId() + "').find('[role=fileUploadedMsg]').html('');");
+ target.appendJavaScript("$('#uploadLabel').text('" + TranslatorWorker.translateText("No file chosen") + "');");
+
+ }
+ }
+ };
+
+ form.add(submit);
+ form.add(createCancelButton());
+
+ createWebLinkFeedbackContainer();
+ form.add(webLinkFeedbackContainer);
+ }
+
+ protected AjaxLink createAddNewLink(final String fmName) {
+ final String newDocumentGenKey = TranslatorWorker.generateTrnKey(fmName);
+ final AjaxLink addNewLink = new AjaxLink("componentFundingDocumentPanelLink"){
+ public void onClick(AjaxRequestTarget target) {
+// target.prependJavaScript(OnePagerUtil.getToggleChildrenJS(this));
+ target.prependJavaScript(OnePagerUtil.getToggleChildrenJSComponentFunding(this, getToggleId()));
+ }
+
+ @Override
+ protected void onConfigure() {
+ super.onConfigure();
+ configureTranslationMode(this, newDocumentGenKey);
+ }
+ };
+ addNewLink.add(new Label("componentFundingDocumentLinkText", TranslatorWorker.translateText(fmName)));
+
+ return addNewLink;
+ }
+
+ protected AmpAjaxLinkField createCancelButton() {
+
+ return new AmpAjaxLinkField("componentFundingDocumentCancel", "Cancel", "Cancel") {
+ @Override
+ protected void onClick(AjaxRequestTarget target) {
+ target.appendJavaScript("$('#" + getToggleId() + "').hide();");
+ target.appendJavaScript("$('#" + getToggleId() + "').find('[role=fileUploadedMsg]').html('');");
+ target.appendJavaScript("$('#uploadLabel').text('" + TranslatorWorker.translateText("No file chosen") + "');");
+// webLinkFeedbackContainer.setVisible(false);
+ }
+ };
+ }
+
+ protected void createWebLinkFeedbackContainer() {
+ webLinkFeedbackContainer = new WebMarkupContainer("webLinkFeedbackContainer");
+ webLinkFeedbackContainer.setOutputMarkupId(true);
+ webLinkFeedbackContainer.setOutputMarkupPlaceholderTag(true);
+ webLinkFeedbackContainer.setVisible(false);
+
+ webLinkFeedbackLabel = new Label("webLinkFeedbackLabel", new Model(DEFAULT_MESSAGE));
+ webLinkFeedbackContainer.add(webLinkFeedbackLabel);
+ }
+
+ protected boolean updateVisibility(TemporaryDocument resource, boolean newResourceIsWebLink) {
+ boolean noErrors = true;
+ boolean titleSelected = !(resource.getTitle() == null || resource.getTitle().length() == 0);
+
+ String conentValidationMessage = "";
+
+ if (newResourceIsWebLink){
+ urlSelected = resource.getWebLink() != null && resource.getWebLink().length() != 0;
+ } else {
+ pathSelected = resource.getFile() != null;
+ contentValid = true;
+ if (pathSelected) {
+ // validate the content of the file AMP-24920
+ if (isEnabledMimeTypeValidation()) {
+ try {
+ FileTypeManager mimeTypeManager = FileTypeManager.getInstance();
+ InputStream is = new BufferedInputStream(resource.getFile().getInputStream());
+ FileTypeValidationResponse validationResponse = mimeTypeManager.validateFileType(is, resource.getFile().getClientFileName());
+ if (validationResponse.getStatus() != FileTypeValidationStatus.ALLOWED) {
+ if (validationResponse.getStatus() == FileTypeValidationStatus.NOT_ALLOWED) {
+ conentValidationMessage = CONTENT_TYPE_NOT_ALLOWED + " "
+ + validationResponse.getDescription();
+
+ } else if (validationResponse.getStatus() == FileTypeValidationStatus.CONTENT_EXTENSION_MISMATCH) {
+ conentValidationMessage = CONTENT_TYPE_EXTENSION_MISMATCH + " "
+ + resource.getFile().getClientFileName() + " "
+ + TranslatorUtil.getTranslatedText("is a ") + " "
+ + validationResponse.getDescription() + " ("
+ + validationResponse.getContentName() + ")";
+ } else {
+ conentValidationMessage = CONTENT_TYPE_INTERNAL_ERROR;
+ }
+ contentValid = false;
+ }
+ } catch (IOException e) {
+ conentValidationMessage = CONTENT_TYPE_INTERNAL_ERROR;
+ contentValid = false;
+ }
+ }
+ }
+ }
+
+ if (!titleSelected && !((pathSelected && contentValid))) {
+ noErrors = false;
+ if (!titleSelected) {
+ webLinkFeedbackLabel.setDefaultModelObject(DEFAULT_MESSAGE);
+ } else if (!pathSelected && !newResourceIsWebLink) {
+ webLinkFeedbackLabel.setDefaultModelObject(FILE_PATH_NOT_SELECTED);
+ } else if (!contentValid && !newResourceIsWebLink) {
+ webLinkFeedbackLabel.setDefaultModelObject(conentValidationMessage);
+ } else if (!urlSelected && newResourceIsWebLink) {
+ webLinkFeedbackLabel.setDefaultModelObject(URL_NOT_SELECTED);
+ }
+ }
+
+ return noErrors;
+ }
+
+ private boolean isEnabledMimeTypeValidation() {
+ return FeaturesUtil.getGlobalSettingValueBoolean(GlobalSettingsConstants.LIMIT_FILE_TYPE_FOR_UPLOAD);
+ }
+
+ protected String generateResourceKey(String id) {
+ AmpAuthWebSession session = ((AmpAuthWebSession) Session.get());
+ String eKey = id + "-" + session.getCurrentMember().getMemberId() + "-";
+ eKey = eKey + System.currentTimeMillis();
+
+ return eKey;
+ }
+
+ private List getTranslationsForField (String id, String field) {
+ List translationsList;
+ HashMap translationMap = Session.get().getMetaData(
+ OnePagerConst.RESOURCES_TRANSLATIONS);
+ if (translationMap != null) {
+ ResourceTranslationStore store = translationMap.get(id);
+ if (store != null) {
+ translationsList = store.getResourceFieldTranslations().get(field);
+ return translationsList;
+ }
+ }
+ return null;
+ }
+
+ protected void configureTranslationMode(AjaxLink link, String key) {
+ if (TranslatorUtil.isTranslatorMode(getSession())){
+ link.setOutputMarkupId(true);
+ link.add(new AttributeAppender("style", new Model("text-decoration: underline; color: #0CAD0C;"), ""));
+ link.add(new AttributeModifier("key", key));
+// link.add(new AttributeModifier("onclick", "$('#" + getToggleId() + "').slideToggle();spawnEditBox(this.id)"));
+ link.add(new AttributeModifier("onclick", String.format("$(this).closest('tr.wicketFundingRowItem').find('#%s').slideToggle();spawnEditBox(this.id)",getToggleId())));
+// link.add(new AttributeModifier("onclick", "toggleElement(this, '" + getToggleId() + "');spawnEditBox(this.id)"));
+// link.add(new AttributeModifier("onclick", "var row = $(this).closest('tr'); var element = row.find('#" + getToggleId() + "'); element.slideToggle(); return false;spawnEditBox(this.id)"));
+
+ } else {
+ link.add(AttributeModifier.remove("key"));
+ link.add(AttributeModifier.remove("style"));
+ link.add(AttributeModifier.remove("onclick"));
+// link.add(new AttributeModifier("onclick", "$('#" + getToggleId() + "').slideToggle();"));
+ link.add(new AttributeModifier("onclick", String.format("$(this).closest('tr.wicketFundingRowItem').find('#%s').slideToggle();",getToggleId())));
+// link.add(new AttributeModifier("onclick", "console.log('Link clicked'); var row = $(this).closest('tr'); var element = row.find('#" + getToggleId() + "'); console.log(element); element.slideToggle(); return false;"));
+
+// link.add(new AttributeModifier("onclick", "toggleElement(this, '" + getToggleId() + "');"));
+
+ }
+ }
+
+ protected String getToggleId() {
+ if (TranslatorUtil.isTranslatorMode(getSession())) {
+ return getTranlationToggleId();
+ }
+
+ return "id_" + getId();
+ }
+
+ protected String getTranlationToggleId() {
+ return getId() + "H";
+ }
+}
diff --git a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/fields/AmpExistingDocumentFieldPanel.java b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/fields/AmpExistingDocumentFieldPanel.java
index 08652ee74fa..3bd9f750933 100644
--- a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/fields/AmpExistingDocumentFieldPanel.java
+++ b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/fields/AmpExistingDocumentFieldPanel.java
@@ -142,7 +142,7 @@ public Integer getChoiceLevel(NodeWrapper choice) {
private void configureTranslationMode (AjaxLink link, String key, String id) {
if (TranslatorUtil.isTranslatorMode(getSession())){
link.setOutputMarkupId(true);
- link.add(new AttributeAppender("style", new Model("text-decoration: underline; color: #0CAD0C;"), ""));
+ link.add(new AttributeAppender("style", new Model<>("text-decoration: underline; color: #0CAD0C;"), ""));
link.add(new AttributeModifier("key", key));
link.add(new AttributeModifier("onclick", "$('#"+id+"').slideToggle();spawnEditBox(this.id)"));
} else{
diff --git a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/fields/AmpTextAreaFieldPanel.java b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/fields/AmpTextAreaFieldPanel.java
index fd11095481e..343eefaf42b 100644
--- a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/fields/AmpTextAreaFieldPanel.java
+++ b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/fields/AmpTextAreaFieldPanel.java
@@ -61,7 +61,7 @@ public AmpTextAreaFieldPanel(String id,IModel model, String fmName,boole
model = (IModel) new EditorWrapperModel((IModel) model, id);
}
final IModel finalModel = model;
- textAreaContainer = new TextArea("richText", TranslationDecorator.proxyModel((IModel) model)){
+ textAreaContainer = new TextArea("richText", TranslationDecorator.proxyModel(model)){
@Override
protected void onInitialize() {
//get validators and put them in the {@link TranslatableValidators}
diff --git a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/upload/FileUploadBehavior.java b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/upload/FileUploadBehavior.java
index a343c4a9c63..450ffdde237 100644
--- a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/upload/FileUploadBehavior.java
+++ b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/upload/FileUploadBehavior.java
@@ -79,6 +79,7 @@ public void renderHead(final Component component, IHeaderResponse response) {
variables.put("uploadFailedMsg", TranslatorUtil.getTranslatedText("Upload failed! Please try again."));
variables.put("uploadStartedMsg", TranslatorUtil.getTranslatedText("Upload started, please wait..."));
variables.put("uploadFailedTooBigMsg", TranslatorUtil.getTranslatedText("The file size limit is {size} MB. This file exceeds the limit.").replace("{size}", maxFileSizeGS));
+ variables.put("uploadFailedTooSmallMsg", TranslatorUtil.getTranslatedText("This file is empty.Please upload a non-empty file."));
variables.put("uploadMaxFileSize", Long.toString(Bytes.megabytes(Long.parseLong(maxFileSizeGS)).bytes()));
variables.put("uploadNoFileLabel", TranslatorWorker.translateText("No file chosen"));
diff --git a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/upload/FileUploadBehavior.js b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/upload/FileUploadBehavior.js
index 70d07f3caaa..b081c8bd123 100644
--- a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/upload/FileUploadBehavior.js
+++ b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/upload/FileUploadBehavior.js
@@ -26,7 +26,20 @@ function setupFileUpload(componentId, componentUrl, componentParamName){
$('#uploadLabel').text("${uploadNoFileLabel}");
$(this).find('[role=fileUploadedMsg]').html('');
$(this).find('[role=fileUploadedMsg]').hide();
- } else {
+ } else if (data.files[0].size <= 0) {
+ alert("${uploadFailedTooSmallMsg}");
+ $('#uploadLabel').text("${uploadNoFileLabel}");
+ $(this).find('[role=fileUploadedMsg]').html('');
+ $(this).find('[role=fileUploadedMsg]').hide();
+ } else if (data.title === '') {
+ alert("Document Title must be present.");
+ $('#uploadLabel').text("${uploadNoFileLabel}");
+ $(this).find('[role=fileUploadedMsg]').html('');
+ $(this).find('[role=fileUploadedMsg]').hide();
+ }
+
+
+ else {
$(this).find('[role=fileUploadedMsg]').show();
$(this).find('[role=fileUploadedMsg]').html(" \"" + "${uploadStartedMsg}" + data.files[0].size + "\" bytes");
data.submit();
diff --git a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/helper/TemporaryComponentFundingDocument.java b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/helper/TemporaryComponentFundingDocument.java
new file mode 100644
index 00000000000..027ec9f6d67
--- /dev/null
+++ b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/helper/TemporaryComponentFundingDocument.java
@@ -0,0 +1,76 @@
+package org.dgfoundation.amp.onepager.helper;
+
+import org.digijava.module.aim.dbentity.AmpComponentFundingDocument;
+import org.digijava.module.contentrepository.jcrentity.Label;
+
+import java.util.List;
+
+public class TemporaryComponentFundingDocument extends TemporaryDocument{
+ private String description;
+ private String note;
+ private String year;
+
+ private List |