From e1f1ca7b6b11835d9792318591f7e6bc120e2b88 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Fri, 25 Aug 2023 15:52:17 +0300 Subject: [PATCH 001/307] AMP-30711 Create Entities --- amp/WEB-INF/src/hibernate.cfg.xml | 1 + .../digijava/kernel/user/TruBudgetIntent.java | 47 ++++++++++++++++++ .../kernel/user/TruBudgetIntentGroup.java | 49 +++++++++++++++++++ .../module/um/action/RegisterUser.java | 8 +-- 4 files changed, 101 insertions(+), 4 deletions(-) create mode 100644 amp/WEB-INF/src/org/digijava/kernel/user/TruBudgetIntent.java create mode 100644 amp/WEB-INF/src/org/digijava/kernel/user/TruBudgetIntentGroup.java diff --git a/amp/WEB-INF/src/hibernate.cfg.xml b/amp/WEB-INF/src/hibernate.cfg.xml index f77bfa2d6ce..5aa5a19407f 100644 --- a/amp/WEB-INF/src/hibernate.cfg.xml +++ b/amp/WEB-INF/src/hibernate.cfg.xml @@ -19,6 +19,7 @@ false false 20 + update true true true diff --git a/amp/WEB-INF/src/org/digijava/kernel/user/TruBudgetIntent.java b/amp/WEB-INF/src/org/digijava/kernel/user/TruBudgetIntent.java new file mode 100644 index 00000000000..e75dd69a302 --- /dev/null +++ b/amp/WEB-INF/src/org/digijava/kernel/user/TruBudgetIntent.java @@ -0,0 +1,47 @@ +package org.digijava.kernel.user; + +import org.hibernate.annotations.DynamicUpdate; + +import javax.persistence.*; + +@Entity +@Table(name = "trubudget_intent") +@Cacheable +@DynamicUpdate +public class TruBudgetIntent { + @Id + @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "trubudget_intent_seq") + @SequenceGenerator(name = "trubudget_intent_seq", sequenceName = "trubudget_intent_seq", allocationSize = 1) + @Column(name = "trubudget_intent_id") + private Long id; + @Column(name = "trubudget_intent_name") + private String truBudgetIntentName; + + @ManyToOne + @JoinColumn(name = "intent_group") + private TruBudgetIntentGroup intentGroup; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getTruBudgetIntentName() { + return truBudgetIntentName; + } + + public void setTruBudgetIntentName(String truBudgetIntentName) { + this.truBudgetIntentName = truBudgetIntentName; + } + + public TruBudgetIntentGroup getIntentGroup() { + return intentGroup; + } + + public void setIntentGroup(TruBudgetIntentGroup intentGroup) { + this.intentGroup = intentGroup; + } +} diff --git a/amp/WEB-INF/src/org/digijava/kernel/user/TruBudgetIntentGroup.java b/amp/WEB-INF/src/org/digijava/kernel/user/TruBudgetIntentGroup.java new file mode 100644 index 00000000000..b0d2dd24bd9 --- /dev/null +++ b/amp/WEB-INF/src/org/digijava/kernel/user/TruBudgetIntentGroup.java @@ -0,0 +1,49 @@ +package org.digijava.kernel.user; + +import org.hibernate.annotations.DynamicUpdate; + +import javax.persistence.*; +import java.util.Set; + +@Entity +@Table(name = "trubudget_intent_group") +@Cacheable +@DynamicUpdate +public class TruBudgetIntentGroup { + @Id + @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "trubudget_intent_group_seq") + @SequenceGenerator(name = "trubudget_intent_group_seq", sequenceName = "trubudget_intent_group_seq", allocationSize = 1) + @Column(name = "trubudget_intent_group_id") + private Long id; + @Column(name = "trubudget_intent_group_name") + private String name; + + + @OneToMany(mappedBy = "intentGroup") + private Set intents; + + public Set getIntents() { + return intents; + } + + public void setIntents(Set intents) { + this.intents = intents; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + +} diff --git a/amp/WEB-INF/src/org/digijava/module/um/action/RegisterUser.java b/amp/WEB-INF/src/org/digijava/module/um/action/RegisterUser.java index 1c1bca45e9b..c76d9039cf2 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/action/RegisterUser.java +++ b/amp/WEB-INF/src/org/digijava/module/um/action/RegisterUser.java @@ -97,7 +97,7 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, user.setNotificationEmail(userRegisterForm.getNotificationEmail()); } - user.setOrganizationTypeOther(new String(" ")); + user.setOrganizationTypeOther(" "); // set country @@ -167,8 +167,8 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, String des = des1+ '\n'+'\n'+des2 +'\n'+ des3 +'\n'+'\n'+'\t'+'\t'+ des4; - String cri = ""+'\n'+'\t'+'\t'+cri1; - String pti = ""+'\n'+'\n'+ pti1; + String cri = String.valueOf('\n')+'\t'+'\t'+cri1; + String pti = String.valueOf('\n')+'\n'+ pti1; DbUtil.registerUser(user); DgUtil.saveUserLanguagePreferences(user, request, language); @@ -186,7 +186,7 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, /* END - Ignore on MEGE !! */ Site site = RequestUtils.getSite(request); Group memberGroup = org.digijava.module.aim.util.DbUtil.getGroup(Group.MEMBERS,site.getId()); - Long uid[] = new Long[1]; + Long[] uid = new Long[1]; uid[0] = user.getId(); org.digijava.module.admin.util.DbUtil.addUsersToGroup(memberGroup.getId(),uid); From a2c0cc190d51256d6b9871f0927a3f28289db9a0 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Fri, 25 Aug 2023 17:13:58 +0300 Subject: [PATCH 002/307] AMP-30711 Create Entities --- amp/WEB-INF/src/hibernate.cfg.xml | 5 ++-- .../kernel/user/TruBudgetIntent.hbm.xml | 13 +++++++++ .../digijava/kernel/user/TruBudgetIntent.java | 27 ++++++++++--------- .../kernel/user/TruBudgetIntentGroup.java | 20 +++++++------- .../kernel/user/TruBudgetntentGroup.hbm.xml | 20 ++++++++++++++ 5 files changed, 59 insertions(+), 26 deletions(-) create mode 100644 amp/WEB-INF/src/org/digijava/kernel/user/TruBudgetIntent.hbm.xml create mode 100644 amp/WEB-INF/src/org/digijava/kernel/user/TruBudgetntentGroup.hbm.xml diff --git a/amp/WEB-INF/src/hibernate.cfg.xml b/amp/WEB-INF/src/hibernate.cfg.xml index 5aa5a19407f..e19df507746 100644 --- a/amp/WEB-INF/src/hibernate.cfg.xml +++ b/amp/WEB-INF/src/hibernate.cfg.xml @@ -16,15 +16,14 @@ org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory true true - false + true false 20 - update true true true true 1, false 0, yes 'Y', no 'N' - update + update allow diff --git a/amp/WEB-INF/src/org/digijava/kernel/user/TruBudgetIntent.hbm.xml b/amp/WEB-INF/src/org/digijava/kernel/user/TruBudgetIntent.hbm.xml new file mode 100644 index 00000000000..d80f813326c --- /dev/null +++ b/amp/WEB-INF/src/org/digijava/kernel/user/TruBudgetIntent.hbm.xml @@ -0,0 +1,13 @@ + + + + + trubudget_intent_group_seq + + + + + + + + \ No newline at end of file diff --git a/amp/WEB-INF/src/org/digijava/kernel/user/TruBudgetIntent.java b/amp/WEB-INF/src/org/digijava/kernel/user/TruBudgetIntent.java index e75dd69a302..f64d4e29e04 100644 --- a/amp/WEB-INF/src/org/digijava/kernel/user/TruBudgetIntent.java +++ b/amp/WEB-INF/src/org/digijava/kernel/user/TruBudgetIntent.java @@ -3,22 +3,23 @@ import org.hibernate.annotations.DynamicUpdate; import javax.persistence.*; - -@Entity -@Table(name = "trubudget_intent") -@Cacheable -@DynamicUpdate -public class TruBudgetIntent { - @Id - @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "trubudget_intent_seq") - @SequenceGenerator(name = "trubudget_intent_seq", sequenceName = "trubudget_intent_seq", allocationSize = 1) - @Column(name = "trubudget_intent_id") +import java.io.Serializable; + +//@Entity +//@Table(name = "trubudget_intent") +//@Cacheable +//@DynamicUpdate +public class TruBudgetIntent implements Serializable { +// @Id +// @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "trubudget_intent_seq") +// @SequenceGenerator(name = "trubudget_intent_seq", sequenceName = "trubudget_intent_seq", allocationSize = 1) +// @Column(name = "trubudget_intent_id") private Long id; - @Column(name = "trubudget_intent_name") +// @Column(name = "trubudget_intent_name") private String truBudgetIntentName; - @ManyToOne - @JoinColumn(name = "intent_group") +// @ManyToOne +// @JoinColumn(name = "intent_group") private TruBudgetIntentGroup intentGroup; public Long getId() { diff --git a/amp/WEB-INF/src/org/digijava/kernel/user/TruBudgetIntentGroup.java b/amp/WEB-INF/src/org/digijava/kernel/user/TruBudgetIntentGroup.java index b0d2dd24bd9..315d8bd531e 100644 --- a/amp/WEB-INF/src/org/digijava/kernel/user/TruBudgetIntentGroup.java +++ b/amp/WEB-INF/src/org/digijava/kernel/user/TruBudgetIntentGroup.java @@ -5,21 +5,21 @@ import javax.persistence.*; import java.util.Set; -@Entity -@Table(name = "trubudget_intent_group") -@Cacheable -@DynamicUpdate +//@Entity +//@Table(name = "trubudget_intent_group") +//@Cacheable +//@DynamicUpdate public class TruBudgetIntentGroup { - @Id - @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "trubudget_intent_group_seq") - @SequenceGenerator(name = "trubudget_intent_group_seq", sequenceName = "trubudget_intent_group_seq", allocationSize = 1) - @Column(name = "trubudget_intent_group_id") +// @Id +// @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "trubudget_intent_group_seq") +// @SequenceGenerator(name = "trubudget_intent_group_seq", sequenceName = "trubudget_intent_group_seq", allocationSize = 1) +// @Column(name = "trubudget_intent_group_id") private Long id; - @Column(name = "trubudget_intent_group_name") +// @Column(name = "trubudget_intent_group_name") private String name; - @OneToMany(mappedBy = "intentGroup") +// @OneToMany(mappedBy = "intentGroup") private Set intents; public Set getIntents() { diff --git a/amp/WEB-INF/src/org/digijava/kernel/user/TruBudgetntentGroup.hbm.xml b/amp/WEB-INF/src/org/digijava/kernel/user/TruBudgetntentGroup.hbm.xml new file mode 100644 index 00000000000..035b5a8f98b --- /dev/null +++ b/amp/WEB-INF/src/org/digijava/kernel/user/TruBudgetntentGroup.hbm.xml @@ -0,0 +1,20 @@ + + + + + + + + trubudget_intent_group_seq + + + + + + + + + + From 6e18e50e7aa14e0b29a009fb3fbb58e5e0707d7e Mon Sep 17 00:00:00 2001 From: brianbrix Date: Sun, 27 Aug 2023 10:59:31 +0300 Subject: [PATCH 003/307] AMP-30711 Create Entities and insert intents --- .../kernel/user/SqlStartupListener.java | 60 ++++++++++++++++ .../kernel/user/TruBudgetIntent.hbm.xml | 9 ++- .../digijava/kernel/user/TruBudgetIntent.java | 9 +++ .../aim/startup/AMPStartupListener.java | 70 ++++++++++++++++++- .../xmlpatcher/util/XmlPatcherUtil.java | 16 ++--- 5 files changed, 150 insertions(+), 14 deletions(-) create mode 100644 amp/WEB-INF/src/org/digijava/kernel/user/SqlStartupListener.java diff --git a/amp/WEB-INF/src/org/digijava/kernel/user/SqlStartupListener.java b/amp/WEB-INF/src/org/digijava/kernel/user/SqlStartupListener.java new file mode 100644 index 00000000000..01c4103d3d0 --- /dev/null +++ b/amp/WEB-INF/src/org/digijava/kernel/user/SqlStartupListener.java @@ -0,0 +1,60 @@ +package org.digijava.kernel.user; +import org.digijava.kernel.persistence.PersistenceManager; +import org.hibernate.Session; +import org.hibernate.Transaction; +import org.hibernate.jdbc.Work; +import org.springframework.context.ApplicationListener; +import org.springframework.context.event.ContextRefreshedEvent; +import org.springframework.stereotype.Component; + +import java.sql.SQLException; +import java.sql.Statement; + +//@Component +public class SqlStartupListener implements ApplicationListener { + + @Override + public void onApplicationEvent(ContextRefreshedEvent event) { + // Code to run when the application context is refreshed + System.out.println("Application started. Performing query tasks..."); + + // Add your initialization logic here + runQuery(); + } + public void runQuery() + { + Session session = PersistenceManager.openNewSession(); + + Transaction transaction = session.beginTransaction(); + + // Using Hibernate's native SQL execution + session.doWork(connection -> { + try (Statement statement = connection.createStatement()) { + String createIntentSql = "CREATE TABLE IF NOT EXISTS trubudget_intent (" + + "trubudget_intent_id SERIAL PRIMARY KEY," + + "trubudget_intent_name VARCHAR(255)," + + "intent_group INTEGER," + + "FOREIGN KEY (intent_group) REFERENCES trubudget_intent_group (trubudget_intent_group_id)" + + ")"; + statement.executeUpdate(createIntentSql); + String createIntentGroupSql ="CREATE TABLE IF NOT EXISTS trubudget_intent_group (" + +"trubudget_intent_group_id SERIAL PRIMARY KEY," + +"trubudget_intent_group_name VARCHAR(255)" + +");"; + statement.executeUpdate(createIntentGroupSql); + String addColumnSql = "ALTER TABLE trubudget_intent ADD COLUMN intent_group INTEGER"; + statement.executeUpdate(addColumnSql); + + String addForeignKeySql = "ALTER TABLE trubudget_intent ADD CONSTRAINT fk_intent_group " + + "FOREIGN KEY (intent_group) REFERENCES trubudget_intent_group (trubudget_intent_group_id)"; + statement.executeUpdate(addForeignKeySql); + } catch (SQLException e) { + // Handle the exception + } + }); + + transaction.commit(); + session.close(); + } + +} \ No newline at end of file diff --git a/amp/WEB-INF/src/org/digijava/kernel/user/TruBudgetIntent.hbm.xml b/amp/WEB-INF/src/org/digijava/kernel/user/TruBudgetIntent.hbm.xml index d80f813326c..0147eff25af 100644 --- a/amp/WEB-INF/src/org/digijava/kernel/user/TruBudgetIntent.hbm.xml +++ b/amp/WEB-INF/src/org/digijava/kernel/user/TruBudgetIntent.hbm.xml @@ -1,13 +1,18 @@ + + - trubudget_intent_group_seq + trubudget_intent_seq + - + \ No newline at end of file diff --git a/amp/WEB-INF/src/org/digijava/kernel/user/TruBudgetIntent.java b/amp/WEB-INF/src/org/digijava/kernel/user/TruBudgetIntent.java index f64d4e29e04..19574dd464e 100644 --- a/amp/WEB-INF/src/org/digijava/kernel/user/TruBudgetIntent.java +++ b/amp/WEB-INF/src/org/digijava/kernel/user/TruBudgetIntent.java @@ -17,6 +17,7 @@ public class TruBudgetIntent implements Serializable { private Long id; // @Column(name = "trubudget_intent_name") private String truBudgetIntentName; + private String truBudgetIntentDisplayName; // @ManyToOne // @JoinColumn(name = "intent_group") @@ -45,4 +46,12 @@ public TruBudgetIntentGroup getIntentGroup() { public void setIntentGroup(TruBudgetIntentGroup intentGroup) { this.intentGroup = intentGroup; } + + public String getTruBudgetIntentDisplayName() { + return truBudgetIntentDisplayName; + } + + public void setTruBudgetIntentDisplayName(String truBudgetIntentDisplayName) { + this.truBudgetIntentDisplayName = truBudgetIntentDisplayName; + } } diff --git a/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java b/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java index 86187dd91ce..6737a0839c5 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java @@ -34,6 +34,7 @@ import org.digijava.module.gateperm.core.GatePermConst; import org.digijava.module.gateperm.util.PermissionUtil; import org.hibernate.Session; +import org.hibernate.Transaction; import javax.management.MBeanServer; import javax.servlet.ServletContext; @@ -41,6 +42,8 @@ import javax.servlet.ServletContextListener; import javax.servlet.http.HttpServlet; import java.lang.management.ManagementFactory; +import java.sql.SQLException; +import java.sql.Statement; import java.util.Collection; import java.util.Hashtable; import java.util.Properties; @@ -180,12 +183,12 @@ public void contextInitializedInternal(ServletContextEvent sce) { runCacheRefreshingQuery("update_sector_level_caches_internal", "sector"); runCacheRefreshingQuery("update_organisation_caches_internal", "organisation"); ContentRepositoryManager.initialize(); - checkDatabaseSanity(); initNiReports(); importGazeteer(); registerEhCacheMBeans(); initAPI(); + runQuery(); new SwaggerConfigurer().configure(); @@ -196,6 +199,71 @@ public void contextInitializedInternal(ServletContextEvent sce) { } } + public void runQuery() + { + logger.info("Creating trubudget relations"); + Session session = PersistenceManager.openNewSession(); + + Transaction transaction = session.beginTransaction(); + + // Using Hibernate's native SQL execution + session.doWork(connection -> { + try (Statement statement = connection.createStatement()) { + String intentSeq="CREATE SEQUENCE IF NOT EXISTS trubudget_intent_seq;"; +// String groupSeq="CREATE SEQUENCE IF NOT EXISTS trubudget_intent_group_seq;"; + statement.executeUpdate(intentSeq); +// statement.executeUpdate(groupSeq); +// String createIntentGroupSql ="CREATE TABLE IF NOT EXISTS trubudget_intent_group (" +// +"trubudget_intent_group_id BIGINT DEFAULT nextval('trubudget_intent_group_seq') PRIMARY KEY," +// +"trubudget_intent_group_name VARCHAR(255)" +// +");"; +// statement.executeUpdate(createIntentGroupSql); + String createIntentSql = "CREATE TABLE IF NOT EXISTS trubudget_intent (" + + "trubudget_intent_id BIGINT DEFAULT nextval('trubudget_intent_seq') PRIMARY KEY," + + "trubudget_intent_name VARCHAR(255)," + + "trubudget_intent_display_name VARCHAR(255)" + + ")"; + statement.executeUpdate(createIntentSql); + String insertStatement="INSERT INTO trubudget_intent (trubudget_intent_name, trubudget_intent_display_name)\n" + + "VALUES\n" + + " ('global.listPermissions', 'List Permissions'),\n" + + " ('global.grantPermission', 'Grant Permission'),\n" + + " ('global.grantAllPermissions', 'Grant All Permissions'),\n" + + " ('global.revokePermission', 'Revoke Permission'),\n" + + " ('global.createProject', 'Create Project'),\n" + + " ('global.createUser', 'Create User'),\n" + + " ('global.enableUser', 'Enable User'),\n" + + " ('global.disableUser', 'Disable User'),\n" + + " ('global.listAssignments', 'List Assignments'),\n" + + " ('global.createGroup', 'Create Group'),\n" + + " ('network.registerNode', 'Register Node'),\n" + + " ('network.list', 'List Nodes'),\n" + + " ('network.listActive', 'List Active Nodes'),\n" + + " ('network.voteForPermission', 'Vote for Permission'),\n" + + " ('network.approveNewOrganization', 'Approve New Organization'),\n" + + " ('network.approveNewNodeForExistingOrganization', 'Approve New Node for Existing Organization'),\n" + + " ('network.declineNode', 'Decline Node'),\n" + + " ('provisioning.start', 'Start Provisioning'),\n" + + " ('provisioning.end', 'End Provisioning'),\n" + + " ('provisioning.get', 'Get Provisioning Status') ON CONFLICT (trubudget_intent_name) DO NOTHING;\n"; + statement.executeUpdate(insertStatement); + +// String addColumnSql = "ALTER TABLE trubudget_intent ADD COLUMN IF NOT EXISTS intent_group INTEGER"; +// statement.executeUpdate(addColumnSql); +// +// String addForeignKeySql = "ALTER TABLE trubudget_intent ADD CONSTRAINT fk_intent_group " +// + "FOREIGN KEY (intent_group) REFERENCES trubudget_intent_group (trubudget_intent_group_id)"; +// statement.executeUpdate(addForeignKeySql); + } catch (SQLException e) { + // Handle the exception + e.printStackTrace(); + } + }); + + transaction.commit(); + session.close(); + } + public void registerEhCacheMBeans() { MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer(); CacheManager cacheManager = CacheManager.getInstance(); diff --git a/amp/WEB-INF/src/org/digijava/module/xmlpatcher/util/XmlPatcherUtil.java b/amp/WEB-INF/src/org/digijava/module/xmlpatcher/util/XmlPatcherUtil.java index 7f203c74259..e79daf207bd 100644 --- a/amp/WEB-INF/src/org/digijava/module/xmlpatcher/util/XmlPatcherUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/xmlpatcher/util/XmlPatcherUtil.java @@ -381,13 +381,12 @@ public static void applyDeprecationTags(Patch p, AmpXmlPatchLog log) throws Hibe * * @see XmlPatcherConstants.PatchStates * @return the Hibernate query result - * @throws DgException * @throws HibernateException - * @throws SQLException */ public static List getAllDiscoveredUnclosedPatches() - throws DgException, HibernateException, SQLException { + throws HibernateException { Session session = PersistenceManager.getRequestDBSession(); + session.clear(); Query query = session .createQuery("from " + AmpXmlPatch.class.getName() + " p WHERE p.state NOT IN (" @@ -419,12 +418,10 @@ public static Integer countAllDiscoveredPatches() * Returns the list of discovered XmlPatches * * @return the Hibernate query result - * @throws DgException * @throws HibernateException - * @throws SQLException */ public static List getAllDiscoveredPatches() - throws DgException, HibernateException, SQLException { + throws HibernateException { Session session = PersistenceManager.getRequestDBSession(); //beginTransaction(); Query query = session @@ -456,12 +453,10 @@ public static Map getAllDiscoveredPatchesMap() throws Hibern * @param startIndexInt - the start of index * @param records - the max number of records * @return the Hibernate query result - * @throws DgException * @throws HibernateException - * @throws SQLException */ public static List getAllDiscoveredPatches(int startIndexInt,int recordsInt,String sortBy,String dir) - throws DgException, HibernateException, SQLException { + throws HibernateException { Session session = PersistenceManager.getRequestDBSession(); if(sortBy.equals("attempts")) sortBy="count(l)";else sortBy="p."+sortBy; Query query = session @@ -505,7 +500,6 @@ public static String getFileMD5(File f) throws NoSuchAlgorithmException, bis.close(); byte[] md5sum = algorithm.digest(); BigInteger bigInt = new BigInteger(1, md5sum); - String md5 = bigInt.toString(16); - return md5; + return bigInt.toString(16); } } From f41a0a69600577925b3ac6881c5b01704b56d891 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Sun, 27 Aug 2023 16:05:06 +0300 Subject: [PATCH 004/307] AMP-30711 Create Entities and insert intents --- .../kernel/config/HibernateClasses.java | 4 ++-- .../{user => entity}/TruBudgetIntent.hbm.xml | 6 ++--- .../{user => entity}/TruBudgetIntent.java | 24 +++++++++++-------- .../persistence/HibernateClassLoader.java | 5 ++-- .../kernel/user/TruBudgetIntentGroup.java | 3 +-- .../kernel/user/TruBudgetntentGroup.hbm.xml | 2 +- .../aim/startup/AMPStartupListener.java | 2 +- .../org/digijava/module/aim/util/DbUtil.java | 15 ++++++++++++ .../digijava/module/um/action/AddUser.java | 3 +++ .../digijava/module/um/form/AddUserForm.java | 19 ++++++++++++++- amp/repository/digi-common.xml | 1 + amp/repository/um/view/addUser.jsp | 15 ++++++++++++ 12 files changed, 76 insertions(+), 23 deletions(-) rename amp/WEB-INF/src/org/digijava/kernel/{user => entity}/TruBudgetIntent.hbm.xml (73%) rename amp/WEB-INF/src/org/digijava/kernel/{user => entity}/TruBudgetIntent.java (68%) diff --git a/amp/WEB-INF/src/org/digijava/kernel/config/HibernateClasses.java b/amp/WEB-INF/src/org/digijava/kernel/config/HibernateClasses.java index 264c5d830fb..70e213461f1 100644 --- a/amp/WEB-INF/src/org/digijava/kernel/config/HibernateClasses.java +++ b/amp/WEB-INF/src/org/digijava/kernel/config/HibernateClasses.java @@ -59,7 +59,7 @@ public void setRequired(String required) { } public String toString() { - StringBuffer buf = new StringBuffer(); + StringBuilder buf = new StringBuilder(); Iterator iter = hibernateClass.iterator(); String newLine = System.getProperty("line.separator"); @@ -67,7 +67,7 @@ public String toString() { HibernateClass item = (HibernateClass) iter.next(); buf.append(item.toString()).append(newLine); } - buf.append(" REQUIRED - " + required); + buf.append(" REQUIRED - ").append(required); return buf.toString(); } diff --git a/amp/WEB-INF/src/org/digijava/kernel/user/TruBudgetIntent.hbm.xml b/amp/WEB-INF/src/org/digijava/kernel/entity/TruBudgetIntent.hbm.xml similarity index 73% rename from amp/WEB-INF/src/org/digijava/kernel/user/TruBudgetIntent.hbm.xml rename to amp/WEB-INF/src/org/digijava/kernel/entity/TruBudgetIntent.hbm.xml index 0147eff25af..ea3d26e8413 100644 --- a/amp/WEB-INF/src/org/digijava/kernel/user/TruBudgetIntent.hbm.xml +++ b/amp/WEB-INF/src/org/digijava/kernel/entity/TruBudgetIntent.hbm.xml @@ -3,14 +3,14 @@ "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> - + trubudget_intent_seq - - + + diff --git a/amp/WEB-INF/src/org/digijava/kernel/user/TruBudgetIntent.java b/amp/WEB-INF/src/org/digijava/kernel/entity/TruBudgetIntent.java similarity index 68% rename from amp/WEB-INF/src/org/digijava/kernel/user/TruBudgetIntent.java rename to amp/WEB-INF/src/org/digijava/kernel/entity/TruBudgetIntent.java index 19574dd464e..599c3c9a4a4 100644 --- a/amp/WEB-INF/src/org/digijava/kernel/user/TruBudgetIntent.java +++ b/amp/WEB-INF/src/org/digijava/kernel/entity/TruBudgetIntent.java @@ -1,22 +1,26 @@ -package org.digijava.kernel.user; +package org.digijava.kernel.entity; +import org.digijava.kernel.user.TruBudgetIntentGroup; import org.hibernate.annotations.DynamicUpdate; import javax.persistence.*; +import javax.persistence.Entity; import java.io.Serializable; -//@Entity -//@Table(name = "trubudget_intent") -//@Cacheable -//@DynamicUpdate +@Table(name = "trubudget_intent") +@Cacheable +@DynamicUpdate +@Entity public class TruBudgetIntent implements Serializable { -// @Id -// @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "trubudget_intent_seq") -// @SequenceGenerator(name = "trubudget_intent_seq", sequenceName = "trubudget_intent_seq", allocationSize = 1) -// @Column(name = "trubudget_intent_id") + @Id + @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "trubudget_intent_seq") + @SequenceGenerator(name = "trubudget_intent_seq", sequenceName = "trubudget_intent_seq", allocationSize = 1) + @Column(name = "trubudget_intent_id") private Long id; -// @Column(name = "trubudget_intent_name") + @Column(name = "trubudget_intent_name") private String truBudgetIntentName; + @Column(name = "trubudget_intent_display_name") + private String truBudgetIntentDisplayName; // @ManyToOne diff --git a/amp/WEB-INF/src/org/digijava/kernel/persistence/HibernateClassLoader.java b/amp/WEB-INF/src/org/digijava/kernel/persistence/HibernateClassLoader.java index a4c84f385e8..4d62cbe2c5d 100644 --- a/amp/WEB-INF/src/org/digijava/kernel/persistence/HibernateClassLoader.java +++ b/amp/WEB-INF/src/org/digijava/kernel/persistence/HibernateClassLoader.java @@ -99,9 +99,8 @@ public static void initialize(DigiConfig config) { */ public static void initialize(HashMap config) { - Iterator iterModules = config.keySet().iterator(); - while (iterModules.hasNext()) { - String moduleName = (String) iterModules.next(); + for (Object o : config.keySet()) { + String moduleName = (String) o; ModuleConfig moduleConfig = (ModuleConfig) config.get(moduleName); HibernateClasses classes = moduleConfig.getHibernateClasses(); diff --git a/amp/WEB-INF/src/org/digijava/kernel/user/TruBudgetIntentGroup.java b/amp/WEB-INF/src/org/digijava/kernel/user/TruBudgetIntentGroup.java index 315d8bd531e..3a8cd6c7530 100644 --- a/amp/WEB-INF/src/org/digijava/kernel/user/TruBudgetIntentGroup.java +++ b/amp/WEB-INF/src/org/digijava/kernel/user/TruBudgetIntentGroup.java @@ -1,8 +1,7 @@ package org.digijava.kernel.user; -import org.hibernate.annotations.DynamicUpdate; +import org.digijava.kernel.entity.TruBudgetIntent; -import javax.persistence.*; import java.util.Set; //@Entity diff --git a/amp/WEB-INF/src/org/digijava/kernel/user/TruBudgetntentGroup.hbm.xml b/amp/WEB-INF/src/org/digijava/kernel/user/TruBudgetntentGroup.hbm.xml index 035b5a8f98b..119218e8ddf 100644 --- a/amp/WEB-INF/src/org/digijava/kernel/user/TruBudgetntentGroup.hbm.xml +++ b/amp/WEB-INF/src/org/digijava/kernel/user/TruBudgetntentGroup.hbm.xml @@ -14,7 +14,7 @@ - + diff --git a/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java b/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java index 6737a0839c5..a5932aa2605 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java @@ -220,7 +220,7 @@ public void runQuery() // statement.executeUpdate(createIntentGroupSql); String createIntentSql = "CREATE TABLE IF NOT EXISTS trubudget_intent (" + "trubudget_intent_id BIGINT DEFAULT nextval('trubudget_intent_seq') PRIMARY KEY," - + "trubudget_intent_name VARCHAR(255)," + + "trubudget_intent_name VARCHAR(255) UNIQUE," + "trubudget_intent_display_name VARCHAR(255)" + ")"; statement.executeUpdate(createIntentSql); diff --git a/amp/WEB-INF/src/org/digijava/module/aim/util/DbUtil.java b/amp/WEB-INF/src/org/digijava/module/aim/util/DbUtil.java index e6d762903ad..6b0b0eb3418 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/util/DbUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/util/DbUtil.java @@ -12,6 +12,7 @@ import org.digijava.kernel.persistence.PersistenceManager; import org.digijava.kernel.request.Site; import org.digijava.kernel.user.Group; +import org.digijava.kernel.entity.TruBudgetIntent; import org.digijava.kernel.user.User; import org.digijava.kernel.util.RequestUtils; import org.digijava.module.aim.dbentity.AmpComponent; @@ -46,6 +47,20 @@ public static String filter(String text) { } + public static List getTruBudgetIntents() + { + Session session = PersistenceManager.getRequestDBSession(); + try { + return session.createNativeQuery(" SELECT t. * FROM trubudget_intent t ORDER BY trubudget_intent_name", TruBudgetIntent.class).list(); + + }catch (Exception e) + { + e.printStackTrace(); + throw new RuntimeException(e.getMessage()); + } + + } + /** * Used in the AMP-23713.xml patch. Can be reused for other tables, but * highly inadvisable to be edited itself. diff --git a/amp/WEB-INF/src/org/digijava/module/um/action/AddUser.java b/amp/WEB-INF/src/org/digijava/module/um/action/AddUser.java index cce6db0775a..bad26ebab0b 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/action/AddUser.java +++ b/amp/WEB-INF/src/org/digijava/module/um/action/AddUser.java @@ -6,6 +6,7 @@ import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.digijava.kernel.entity.Locale; +import org.digijava.kernel.entity.TruBudgetIntent; import org.digijava.kernel.translator.util.TrnCountry; import org.digijava.kernel.translator.util.TrnLocale; import org.digijava.kernel.translator.util.TrnUtil; @@ -66,6 +67,8 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, registerForm.setCountryResidence(countrieCol); logger.debug("sortedCountries.size : " + countrieCol.size()); + Collection intents = org.digijava.module.aim.util.DbUtil.getTruBudgetIntents(); + registerForm.setTruBudgetIntents(intents); //set default country from global settings. registerForm.setSelectedCountryResidence(FeaturesUtil.getGlobalSettingValue(Constants.GLOBAL_DEFAULT_COUNTRY)); diff --git a/amp/WEB-INF/src/org/digijava/module/um/form/AddUserForm.java b/amp/WEB-INF/src/org/digijava/module/um/form/AddUserForm.java index 62caa8d9ea2..4de06ce7102 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/form/AddUserForm.java +++ b/amp/WEB-INF/src/org/digijava/module/um/form/AddUserForm.java @@ -77,6 +77,8 @@ public class AddUserForm extends ValidatorForm { private Boolean pledgeSuperUser; private Collection contentLanguages; private Collection navigationLanguages; + private Collection truBudgetIntents; + private Collection selectedTruBudgetIntents; private String selectedLanguage; private String[] contentSelectedLanguages; private String organizationTypeOther; @@ -655,5 +657,20 @@ public String getNotificationEmail() { public void setNotificationEmail(String notificationEmail) { this.notificationEmail = notificationEmail; } - + + public Collection getTruBudgetIntents() { + return truBudgetIntents; + } + + public void setTruBudgetIntents(Collection truBudgetIntents) { + this.truBudgetIntents = truBudgetIntents; + } + + public Collection getSelectedTruBudgetIntents() { + return selectedTruBudgetIntents; + } + + public void setSelectedTruBudgetIntents(Collection selectedTruBudgetIntents) { + this.selectedTruBudgetIntents = selectedTruBudgetIntents; + } } diff --git a/amp/repository/digi-common.xml b/amp/repository/digi-common.xml index 0028f4e720f..7a6e31b06ec 100644 --- a/amp/repository/digi-common.xml +++ b/amp/repository/digi-common.xml @@ -21,6 +21,7 @@ org.digijava.kernel.request.SiteDomain + org.digijava.kernel.entity.TruBudgetIntent org.digijava.kernel.entity.Address org.digijava.kernel.entity.GeoRegion org.digijava.kernel.user.User diff --git a/amp/repository/um/view/addUser.jsp b/amp/repository/um/view/addUser.jsp index 2b2d9533198..3e90f02df60 100644 --- a/amp/repository/um/view/addUser.jsp +++ b/amp/repository/um/view/addUser.jsp @@ -478,6 +478,20 @@ + + +   + + * + TruBudget Permissions + + + + + + + +   @@ -536,6 +550,7 @@ +   From 0e99d85f108e5aa8d8ac2f71d565f383f9bc6188 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Sun, 27 Aug 2023 22:02:04 +0300 Subject: [PATCH 005/307] AMP-30711 Create Entities and insert intents --- .../kernel/entity/TruBudgetIntent.hbm.xml | 5 +++- .../kernel/entity/TruBudgetIntent.java | 22 +++++++++--------- .../src/org/digijava/kernel/user/User.hbm.xml | 5 ++++ .../src/org/digijava/kernel/user/User.java | 9 ++++++++ .../aim/startup/AMPStartupListener.java | 6 +++++ .../org/digijava/module/aim/util/DbUtil.java | 22 ++++++++++++++++++ .../digijava/module/um/action/AddUser.java | 2 +- .../module/um/action/RegisterUser.java | 11 +++++++++ .../module/um/action/ViewEditUser.java | 23 +++++++++++-------- .../digijava/module/um/form/AddUserForm.java | 13 ++++++----- .../module/um/form/ViewEditUserForm.java | 11 ++++++++- amp/repository/um/view/addUser.jsp | 2 +- amp/repository/um/view/viewEditUser.jsp | 13 +++++++++++ 13 files changed, 113 insertions(+), 31 deletions(-) diff --git a/amp/WEB-INF/src/org/digijava/kernel/entity/TruBudgetIntent.hbm.xml b/amp/WEB-INF/src/org/digijava/kernel/entity/TruBudgetIntent.hbm.xml index ea3d26e8413..26bfe36e34e 100644 --- a/amp/WEB-INF/src/org/digijava/kernel/entity/TruBudgetIntent.hbm.xml +++ b/amp/WEB-INF/src/org/digijava/kernel/entity/TruBudgetIntent.hbm.xml @@ -13,6 +13,9 @@ - + + + + \ No newline at end of file diff --git a/amp/WEB-INF/src/org/digijava/kernel/entity/TruBudgetIntent.java b/amp/WEB-INF/src/org/digijava/kernel/entity/TruBudgetIntent.java index 599c3c9a4a4..ded7606f5ee 100644 --- a/amp/WEB-INF/src/org/digijava/kernel/entity/TruBudgetIntent.java +++ b/amp/WEB-INF/src/org/digijava/kernel/entity/TruBudgetIntent.java @@ -1,11 +1,12 @@ package org.digijava.kernel.entity; -import org.digijava.kernel.user.TruBudgetIntentGroup; +import org.digijava.kernel.user.User; import org.hibernate.annotations.DynamicUpdate; import javax.persistence.*; import javax.persistence.Entity; import java.io.Serializable; +import java.util.Set; @Table(name = "trubudget_intent") @Cacheable @@ -23,9 +24,7 @@ public class TruBudgetIntent implements Serializable { private String truBudgetIntentDisplayName; -// @ManyToOne -// @JoinColumn(name = "intent_group") - private TruBudgetIntentGroup intentGroup; + private Set users; public Long getId() { return id; @@ -43,13 +42,6 @@ public void setTruBudgetIntentName(String truBudgetIntentName) { this.truBudgetIntentName = truBudgetIntentName; } - public TruBudgetIntentGroup getIntentGroup() { - return intentGroup; - } - - public void setIntentGroup(TruBudgetIntentGroup intentGroup) { - this.intentGroup = intentGroup; - } public String getTruBudgetIntentDisplayName() { return truBudgetIntentDisplayName; @@ -58,4 +50,12 @@ public String getTruBudgetIntentDisplayName() { public void setTruBudgetIntentDisplayName(String truBudgetIntentDisplayName) { this.truBudgetIntentDisplayName = truBudgetIntentDisplayName; } + + public Set getUsers() { + return users; + } + + public void setUsers(Set users) { + this.users = users; + } } diff --git a/amp/WEB-INF/src/org/digijava/kernel/user/User.hbm.xml b/amp/WEB-INF/src/org/digijava/kernel/user/User.hbm.xml index 3764f14477d..6ecbbdd909c 100644 --- a/amp/WEB-INF/src/org/digijava/kernel/user/User.hbm.xml +++ b/amp/WEB-INF/src/org/digijava/kernel/user/User.hbm.xml @@ -41,6 +41,11 @@ class="org.digijava.kernel.entity.Locale" cascade="none" /> + + + + + diff --git a/amp/WEB-INF/src/org/digijava/kernel/user/User.java b/amp/WEB-INF/src/org/digijava/kernel/user/User.java index b37240898be..4e0b15bdc2e 100644 --- a/amp/WEB-INF/src/org/digijava/kernel/user/User.java +++ b/amp/WEB-INF/src/org/digijava/kernel/user/User.java @@ -83,6 +83,7 @@ public class User private Set assignedOrgs; private Date passwordChangedAt; + private Set truBudgetIntents; public User() {} @@ -542,7 +543,13 @@ public String getEmailUsedForNotification() { return email; } + public Set getTruBudgetIntents() { + return truBudgetIntents; + } + public void setTruBudgetIntents(Set truBudgetIntents) { + this.truBudgetIntents = truBudgetIntents; + } @Override public String toString() { return "User{" + @@ -589,4 +596,6 @@ public String toString() { ", passwordChangedAt=" + passwordChangedAt + '}'; } + + } diff --git a/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java b/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java index a5932aa2605..235defdb382 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java @@ -254,6 +254,12 @@ public void runQuery() // String addForeignKeySql = "ALTER TABLE trubudget_intent ADD CONSTRAINT fk_intent_group " // + "FOREIGN KEY (intent_group) REFERENCES trubudget_intent_group (trubudget_intent_group_id)"; // statement.executeUpdate(addForeignKeySql); + String relationSql="CREATE TABLE IF NOT EXISTS user_trubudget_intent (\n" + + " user_id BIGINT REFERENCES DG_USER(id),\n" + + " trubudget_intent_id BIGINT REFERENCES trubudget_intent(trubudget_intent_id),\n" + + " PRIMARY KEY (user_id, trubudget_intent_id)\n" + + ");"; + statement.executeUpdate(relationSql); } catch (SQLException e) { // Handle the exception e.printStackTrace(); diff --git a/amp/WEB-INF/src/org/digijava/module/aim/util/DbUtil.java b/amp/WEB-INF/src/org/digijava/module/aim/util/DbUtil.java index 6b0b0eb3418..9855dae5996 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/util/DbUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/util/DbUtil.java @@ -61,6 +61,28 @@ public static List getTruBudgetIntents() } + public static List getTruBudgetIntentsByName(String [] names) + { + Session session = PersistenceManager.getRequestDBSession(); + try { + StringBuilder convertedNames = new StringBuilder("("); + for (String name: names){ + convertedNames.append("'").append(name).append("'").append(","); + } + String c = convertedNames.toString().replaceAll(",$", ""); + c+=")"; + logger.info("Intent query: "+c); + + return session.createNativeQuery(" SELECT t. * FROM trubudget_intent t WHERE trubudget_intent_name in "+c, TruBudgetIntent.class).list(); + + }catch (Exception e) + { + e.printStackTrace(); + throw new RuntimeException(e.getMessage()); + } + + } + /** * Used in the AMP-23713.xml patch. Can be reused for other tables, but * highly inadvisable to be edited itself. diff --git a/amp/WEB-INF/src/org/digijava/module/um/action/AddUser.java b/amp/WEB-INF/src/org/digijava/module/um/action/AddUser.java index bad26ebab0b..80829b60a04 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/action/AddUser.java +++ b/amp/WEB-INF/src/org/digijava/module/um/action/AddUser.java @@ -67,7 +67,7 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, registerForm.setCountryResidence(countrieCol); logger.debug("sortedCountries.size : " + countrieCol.size()); - Collection intents = org.digijava.module.aim.util.DbUtil.getTruBudgetIntents(); + Collection intents = org.digijava.module.aim.util.DbUtil.getTruBudgetIntents(); registerForm.setTruBudgetIntents(intents); //set default country from global settings. diff --git a/amp/WEB-INF/src/org/digijava/module/um/action/RegisterUser.java b/amp/WEB-INF/src/org/digijava/module/um/action/RegisterUser.java index c76d9039cf2..e3325265463 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/action/RegisterUser.java +++ b/amp/WEB-INF/src/org/digijava/module/um/action/RegisterUser.java @@ -12,6 +12,7 @@ import org.apache.struts.action.ActionMapping; import org.digijava.kernel.Constants; import org.digijava.kernel.entity.Locale; +import org.digijava.kernel.entity.TruBudgetIntent; import org.digijava.kernel.entity.UserLangPreferences; import org.digijava.kernel.mail.DgEmailManager; import org.digijava.kernel.request.Site; @@ -30,6 +31,11 @@ import org.digijava.module.um.util.DbUtil; import javax.servlet.http.HttpSession; +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; + +import static org.digijava.module.aim.util.DbUtil.getTruBudgetIntentsByName; public class RegisterUser extends Action { @@ -62,8 +68,13 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, User user = new User(userRegisterForm.getEmail().toLowerCase(), userRegisterForm.getFirstNames(), userRegisterForm .getLastName()); + String[] intents = userRegisterForm.getSelectedTruBudgetIntents(); + List truBudgetIntents = getTruBudgetIntentsByName(intents); + logger.info("Intents: "+ truBudgetIntents); + user.setTruBudgetIntents(new HashSet<>(truBudgetIntents)); // set client IP address + user.setModifyingIP(RequestUtils.getRemoteAddress(request)); if (!PasswordPolicyValidator.isValid(userRegisterForm.getPassword(), userRegisterForm.getEmail())) { diff --git a/amp/WEB-INF/src/org/digijava/module/um/action/ViewEditUser.java b/amp/WEB-INF/src/org/digijava/module/um/action/ViewEditUser.java index af6c617b0db..da35df2317f 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/action/ViewEditUser.java +++ b/amp/WEB-INF/src/org/digijava/module/um/action/ViewEditUser.java @@ -3,6 +3,7 @@ import org.apache.struts.action.*; import org.digijava.kernel.Constants; import org.digijava.kernel.entity.Locale; +import org.digijava.kernel.entity.TruBudgetIntent; import org.digijava.kernel.entity.UserLangPreferences; import org.digijava.kernel.exception.DgException; import org.digijava.kernel.request.Site; @@ -80,20 +81,19 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServlet DbUtil.updateUser(user); } if ( ampTeamMembers != null && ampTeamMembers.size() > 0 ) { - String teamNames = ""; - Iterator iter = ampTeamMembers.iterator(); - while ( iter.hasNext() ) { - AmpTeamMember atm = (AmpTeamMember) iter.next(); - AmpTeam team = atm.getAmpTeam(); - if (team != null && team.getName() != null) { + StringBuilder teamNames = new StringBuilder(); + for (Object ampTeamMember : ampTeamMembers) { + AmpTeamMember atm = (AmpTeamMember) ampTeamMember; + AmpTeam team = atm.getAmpTeam(); + if (team != null && team.getName() != null) { if (teamNames.length() == 0) - teamNames += "'" + team.getName() + "'"; + teamNames.append("'").append(team.getName()).append("'"); else - teamNames += ", '" + team.getName() + "'"; + teamNames.append(", '").append(team.getName()).append("'"); } } errors.add("title", - new ActionMessage("error.um.userIsInTeams", teamNames)); + new ActionMessage("error.um.userIsInTeams", teamNames.toString())); } if ( ampTeamMembers == null ) { errors.add("title",new ActionMessage("error.um.errorBanning")); @@ -171,7 +171,10 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServlet uForm.setEmailerror(false); uForm.setExemptFromDataFreezing(false); uForm.setNationalCoordinator(false); - + Collection intents = org.digijava.module.aim.util.DbUtil.getTruBudgetIntents(); + uForm.setTruBudgetIntents(intents); + + if (user != null) { uForm.setMailingAddress(user.getAddress()); AmpUserExtension userExt = AmpUserUtil.getAmpUserExtension(user); diff --git a/amp/WEB-INF/src/org/digijava/module/um/form/AddUserForm.java b/amp/WEB-INF/src/org/digijava/module/um/form/AddUserForm.java index 4de06ce7102..401482b6164 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/form/AddUserForm.java +++ b/amp/WEB-INF/src/org/digijava/module/um/form/AddUserForm.java @@ -22,6 +22,7 @@ import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionMapping; import org.apache.struts.validator.ValidatorForm; +import org.digijava.kernel.entity.TruBudgetIntent; import javax.servlet.http.HttpServletRequest; import java.util.Collection; @@ -77,8 +78,8 @@ public class AddUserForm extends ValidatorForm { private Boolean pledgeSuperUser; private Collection contentLanguages; private Collection navigationLanguages; - private Collection truBudgetIntents; - private Collection selectedTruBudgetIntents; + private Collection truBudgetIntents; + private String[] selectedTruBudgetIntents; private String selectedLanguage; private String[] contentSelectedLanguages; private String organizationTypeOther; @@ -658,19 +659,19 @@ public void setNotificationEmail(String notificationEmail) { this.notificationEmail = notificationEmail; } - public Collection getTruBudgetIntents() { + public Collection getTruBudgetIntents() { return truBudgetIntents; } - public void setTruBudgetIntents(Collection truBudgetIntents) { + public void setTruBudgetIntents(Collection truBudgetIntents) { this.truBudgetIntents = truBudgetIntents; } - public Collection getSelectedTruBudgetIntents() { + public String[] getSelectedTruBudgetIntents() { return selectedTruBudgetIntents; } - public void setSelectedTruBudgetIntents(Collection selectedTruBudgetIntents) { + public void setSelectedTruBudgetIntents(String[] selectedTruBudgetIntents) { this.selectedTruBudgetIntents = selectedTruBudgetIntents; } } diff --git a/amp/WEB-INF/src/org/digijava/module/um/form/ViewEditUserForm.java b/amp/WEB-INF/src/org/digijava/module/um/form/ViewEditUserForm.java index f284de8ecf1..0249e88ffd1 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/form/ViewEditUserForm.java +++ b/amp/WEB-INF/src/org/digijava/module/um/form/ViewEditUserForm.java @@ -2,6 +2,7 @@ import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping; +import org.digijava.kernel.entity.TruBudgetIntent; import org.digijava.module.aim.dbentity.AmpCategoryValueLocations; import org.digijava.module.aim.dbentity.AmpOrgGroup; import org.digijava.module.aim.dbentity.AmpOrgType; @@ -71,6 +72,7 @@ public void reset(ActionMapping mapping, HttpServletRequest request) { private Collection workspaces; private Collection ampRoles; private Collection assignedWorkspaces; + private Collection truBudgetIntents; private Long teamId; private Long role; private boolean emailerror; @@ -432,5 +434,12 @@ public String getNotificationEmail() { public void setNotificationEmail(String notificationEmail) { this.notificationEmail = notificationEmail; } - + + public Collection getTruBudgetIntents() { + return truBudgetIntents; + } + + public void setTruBudgetIntents(Collection truBudgetIntents) { + this.truBudgetIntents = truBudgetIntents; + } } diff --git a/amp/repository/um/view/addUser.jsp b/amp/repository/um/view/addUser.jsp index 3e90f02df60..da9e2f67f03 100644 --- a/amp/repository/um/view/addUser.jsp +++ b/amp/repository/um/view/addUser.jsp @@ -482,7 +482,7 @@   - * +<%-- *--%> TruBudget Permissions diff --git a/amp/repository/um/view/viewEditUser.jsp b/amp/repository/um/view/viewEditUser.jsp index 114adca969c..92f71f10be1 100644 --- a/amp/repository/um/view/viewEditUser.jsp +++ b/amp/repository/um/view/viewEditUser.jsp @@ -331,6 +331,19 @@ function validateUserInfo(){ + +   + +<%-- *--%> + TruBudget Permissions + + + + + + + + From 94182955bdea5e023568ec945498b9588a4d2b6b Mon Sep 17 00:00:00 2001 From: brianbrix Date: Mon, 28 Aug 2023 16:43:40 +0300 Subject: [PATCH 006/307] AMP-30711 Create Entities and insert intents --- .../kernel/entity/TruBudgetIntent.java | 11 +++++++++++ .../digijava/module/um/action/AddUser.java | 6 +++--- .../module/um/action/ViewEditUser.java | 19 ++++++++++++++++++- .../module/um/form/ViewEditUserForm.java | 12 +++++++++++- .../org/digijava/module/um/util/DbUtil.java | 3 +-- amp/repository/um/view/viewEditUser.jsp | 5 ++--- 6 files changed, 46 insertions(+), 10 deletions(-) diff --git a/amp/WEB-INF/src/org/digijava/kernel/entity/TruBudgetIntent.java b/amp/WEB-INF/src/org/digijava/kernel/entity/TruBudgetIntent.java index ded7606f5ee..0195a222be5 100644 --- a/amp/WEB-INF/src/org/digijava/kernel/entity/TruBudgetIntent.java +++ b/amp/WEB-INF/src/org/digijava/kernel/entity/TruBudgetIntent.java @@ -26,6 +26,9 @@ public class TruBudgetIntent implements Serializable { private Set users; + @Transient + private Boolean userHas; + public Long getId() { return id; } @@ -58,4 +61,12 @@ public Set getUsers() { public void setUsers(Set users) { this.users = users; } + + public Boolean getUserHas() { + return userHas; + } + + public void setUserHas(Boolean userHas) { + this.userHas = userHas; + } } diff --git a/amp/WEB-INF/src/org/digijava/module/um/action/AddUser.java b/amp/WEB-INF/src/org/digijava/module/um/action/AddUser.java index 80829b60a04..5b4415e999a 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/action/AddUser.java +++ b/amp/WEB-INF/src/org/digijava/module/um/action/AddUser.java @@ -81,7 +81,7 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, Set languages = SiteUtils.getUserLanguages(RequestUtils .getSite(request)); - HashMap translations = new HashMap(); + HashMap translations = new HashMap<>(); iterator = TrnUtil.getLanguages( RequestUtils.getNavigationLanguage(request).getCode()) .iterator(); @@ -90,13 +90,13 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, translations.put(item.getCode(), item); } //sort languages - List sortedLanguages = new ArrayList(); + List sortedLanguages = new ArrayList<>(); iterator = languages.iterator(); while (iterator.hasNext()) { Locale item = (Locale) iterator.next(); sortedLanguages.add(translations.get(item.getCode())); } - Collections.sort(sortedLanguages, TrnUtil.localeNameComparator); + sortedLanguages.sort(TrnUtil.localeNameComparator); registerForm.setNavigationLanguages(sortedLanguages); diff --git a/amp/WEB-INF/src/org/digijava/module/um/action/ViewEditUser.java b/amp/WEB-INF/src/org/digijava/module/um/action/ViewEditUser.java index da35df2317f..779a4ea69ea 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/action/ViewEditUser.java +++ b/amp/WEB-INF/src/org/digijava/module/um/action/ViewEditUser.java @@ -30,6 +30,9 @@ import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.util.*; +import java.util.stream.Collectors; + +import static org.digijava.module.aim.util.DbUtil.getTruBudgetIntentsByName; public class ViewEditUser extends Action { @@ -46,7 +49,7 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServlet if (userId != null) { user = UserUtils.getUser(userId); - } else if (uForm.getEmail() != null) { + } else if (uForm.getEmail() != null && user==null) { user = UserUtils.getUserByEmailAddress(uForm.getEmail()); }else{ return mapping.findForward("forward"); @@ -171,7 +174,16 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServlet uForm.setEmailerror(false); uForm.setExemptFromDataFreezing(false); uForm.setNationalCoordinator(false); + Set intentNames = user.getTruBudgetIntents().stream().map(TruBudgetIntent::getTruBudgetIntentName).collect(Collectors.toSet()); + Collection intents = org.digijava.module.aim.util.DbUtil.getTruBudgetIntents(); + intents.forEach(intent-> + { + if (intentNames.contains(intent.getTruBudgetIntentName())) + { + intent.setUserHas(true); + } + }); uForm.setTruBudgetIntents(intents); @@ -299,6 +311,11 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServlet AmpUserUtil.saveAmpUserExtension(userExt); } + String[] intents = uForm.getSelectedTruBudgetIntents(); + List truBudgetIntents = getTruBudgetIntentsByName(intents); + + user.setTruBudgetIntents(new HashSet<>(truBudgetIntents)); + user.setCountry(org.digijava.module.aim.util.DbUtil.getDgCountry(uForm.getSelectedCountryIso())); if(uForm.getSelectedRegionId()==-1){ user.setRegion(null); diff --git a/amp/WEB-INF/src/org/digijava/module/um/form/ViewEditUserForm.java b/amp/WEB-INF/src/org/digijava/module/um/form/ViewEditUserForm.java index 0249e88ffd1..ec36456b36d 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/form/ViewEditUserForm.java +++ b/amp/WEB-INF/src/org/digijava/module/um/form/ViewEditUserForm.java @@ -79,7 +79,9 @@ public void reset(ActionMapping mapping, HttpServletRequest request) { private boolean banReadOnly; private Boolean exemptFromDataFreezing; private boolean nationalCoordinator; - + private String[] selectedTruBudgetIntents; + + public boolean isEmailerror() { return emailerror; } @@ -442,4 +444,12 @@ public Collection getTruBudgetIntents() { public void setTruBudgetIntents(Collection truBudgetIntents) { this.truBudgetIntents = truBudgetIntents; } + + public String[] getSelectedTruBudgetIntents() { + return selectedTruBudgetIntents; + } + + public void setSelectedTruBudgetIntents(String[] selectedTruBudgetIntents) { + this.selectedTruBudgetIntents = selectedTruBudgetIntents; + } } diff --git a/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java b/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java index a301b089727..07faf010482 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java @@ -422,8 +422,7 @@ public static void registerUser(User user) throws UMException { user.setPassword(ShaCrypt.crypt(user.getPassword().trim()).trim()); // set hashed password - user.setSalt(new Long(user.getPassword().trim().hashCode()). - toString()); + user.setSalt(Long.toString(user.getPassword().trim().hashCode())); // update user session.save(user); diff --git a/amp/repository/um/view/viewEditUser.jsp b/amp/repository/um/view/viewEditUser.jsp index 92f71f10be1..21cd65feaf6 100644 --- a/amp/repository/um/view/viewEditUser.jsp +++ b/amp/repository/um/view/viewEditUser.jsp @@ -332,14 +332,13 @@ function validateUserInfo(){ -   - + <%-- *--%> TruBudget Permissions - + From f430533faa55516611ff43312d45eb1c81c8dd85 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Mon, 28 Aug 2023 17:13:19 +0300 Subject: [PATCH 007/307] AMP-30711 Add webclient --- amp/WEB-INF/applicationContext.xml | 3 ++ .../aim/startup/AMPStartupListener.java | 19 +++++++++++- .../aim/startup/WebClientFactoryBean.java | 30 +++++++++++++++++++ amp/pom.xml | 12 +++++++- amp/src/main/resources/applicationContext.xml | 2 ++ 5 files changed, 64 insertions(+), 2 deletions(-) create mode 100644 amp/WEB-INF/src/org/digijava/module/aim/startup/WebClientFactoryBean.java diff --git a/amp/WEB-INF/applicationContext.xml b/amp/WEB-INF/applicationContext.xml index 8d61be1cbf1..b8717993df1 100644 --- a/amp/WEB-INF/applicationContext.xml +++ b/amp/WEB-INF/applicationContext.xml @@ -15,6 +15,9 @@ + + + diff --git a/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java b/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java index 235defdb382..7c355f3bfe4 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java @@ -35,6 +35,9 @@ import org.digijava.module.gateperm.util.PermissionUtil; import org.hibernate.Session; import org.hibernate.Transaction; +import org.springframework.context.ApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; +import org.springframework.web.reactive.function.client.WebClient; import javax.management.MBeanServer; import javax.servlet.ServletContext; @@ -188,7 +191,7 @@ public void contextInitializedInternal(ServletContextEvent sce) { importGazeteer(); registerEhCacheMBeans(); initAPI(); - runQuery(); + testWebClient(); new SwaggerConfigurer().configure(); @@ -198,6 +201,20 @@ public void contextInitializedInternal(ServletContextEvent sce) { throw new Error(e); } } + public void testWebClient() + { + logger.info("Making webclient request"); + ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); + WebClient webClient = context.getBean("webClient", WebClient.class); + + // Use the WebClient to make HTTP requests + webClient.get() + .uri("https://api.example.com/data") + .retrieve() + .bodyToMono(String.class) + .subscribe(response -> System.out.println("Response: " + response)); + + } public void runQuery() { diff --git a/amp/WEB-INF/src/org/digijava/module/aim/startup/WebClientFactoryBean.java b/amp/WEB-INF/src/org/digijava/module/aim/startup/WebClientFactoryBean.java new file mode 100644 index 00000000000..232ec54244a --- /dev/null +++ b/amp/WEB-INF/src/org/digijava/module/aim/startup/WebClientFactoryBean.java @@ -0,0 +1,30 @@ +package org.digijava.module.aim.startup; + + +import org.springframework.beans.factory.FactoryBean; +import org.springframework.http.client.reactive.ReactorClientHttpConnector; +import org.springframework.web.reactive.function.client.WebClient; +import reactor.netty.http.client.HttpClient; + +public class WebClientFactoryBean implements FactoryBean { + + @Override + public WebClient getObject() throws Exception { + HttpClient httpClient = HttpClient.create(); // Customize HttpClient as needed + ReactorClientHttpConnector connector = new ReactorClientHttpConnector(httpClient); + + return WebClient.builder() + .clientConnector(connector) + .build(); + } + + @Override + public Class getObjectType() { + return WebClient.class; + } + + @Override + public boolean isSingleton() { + return true; + } +} diff --git a/amp/pom.xml b/amp/pom.xml index 5bcc63d2487..b2e08e02c97 100644 --- a/amp/pom.xml +++ b/amp/pom.xml @@ -596,12 +596,22 @@ 5.3.28 - + + io.projectreactor.netty + reactor-netty + 1.0.35 + org.springframework spring-webmvc 5.3.28 + + org.springframework + spring-webflux + 5.3.29 + + org.springframework spring-beans diff --git a/amp/src/main/resources/applicationContext.xml b/amp/src/main/resources/applicationContext.xml index c2dce1a9380..e9580b607ee 100644 --- a/amp/src/main/resources/applicationContext.xml +++ b/amp/src/main/resources/applicationContext.xml @@ -8,5 +8,7 @@ http://www.springframework.org/schema/context/spring-context.xsd"> + + \ No newline at end of file From 59b960ab8127ed411d2404dc2e6ba8cb026d7c9f Mon Sep 17 00:00:00 2001 From: brianbrix Date: Mon, 28 Aug 2023 21:04:40 +0300 Subject: [PATCH 008/307] AMP-30711 Add webclient --- .../org/digijava/module/aim/util/DbUtil.java | 34 ---- .../digijava/module/um/action/AddUser.java | 4 +- .../module/um/action/RegisterUser.java | 3 +- .../module/um/action/ViewEditUser.java | 8 +- .../module/um/model/TruLoginRequest.java | 90 ++++++++++ .../module/um/model/TruLoginResponse.java | 116 ++++++++++++ .../digijava/module/um/model/UserData.java | 119 +++++++++++++ .../org/digijava/module/um/util/DbUtil.java | 107 +++++++++++ .../module/um/util/GenericWebClient.java | 166 ++++++++++++++++++ 9 files changed, 608 insertions(+), 39 deletions(-) create mode 100644 amp/WEB-INF/src/org/digijava/module/um/model/TruLoginRequest.java create mode 100644 amp/WEB-INF/src/org/digijava/module/um/model/TruLoginResponse.java create mode 100644 amp/WEB-INF/src/org/digijava/module/um/model/UserData.java create mode 100644 amp/WEB-INF/src/org/digijava/module/um/util/GenericWebClient.java diff --git a/amp/WEB-INF/src/org/digijava/module/aim/util/DbUtil.java b/amp/WEB-INF/src/org/digijava/module/aim/util/DbUtil.java index 9855dae5996..96b5dd69e56 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/util/DbUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/util/DbUtil.java @@ -47,41 +47,7 @@ public static String filter(String text) { } - public static List getTruBudgetIntents() - { - Session session = PersistenceManager.getRequestDBSession(); - try { - return session.createNativeQuery(" SELECT t. * FROM trubudget_intent t ORDER BY trubudget_intent_name", TruBudgetIntent.class).list(); - - }catch (Exception e) - { - e.printStackTrace(); - throw new RuntimeException(e.getMessage()); - } - - } - - public static List getTruBudgetIntentsByName(String [] names) - { - Session session = PersistenceManager.getRequestDBSession(); - try { - StringBuilder convertedNames = new StringBuilder("("); - for (String name: names){ - convertedNames.append("'").append(name).append("'").append(","); - } - String c = convertedNames.toString().replaceAll(",$", ""); - c+=")"; - logger.info("Intent query: "+c); - return session.createNativeQuery(" SELECT t. * FROM trubudget_intent t WHERE trubudget_intent_name in "+c, TruBudgetIntent.class).list(); - - }catch (Exception e) - { - e.printStackTrace(); - throw new RuntimeException(e.getMessage()); - } - - } /** * Used in the AMP-23713.xml patch. Can be reused for other tables, but diff --git a/amp/WEB-INF/src/org/digijava/module/um/action/AddUser.java b/amp/WEB-INF/src/org/digijava/module/um/action/AddUser.java index 5b4415e999a..a997b0c9228 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/action/AddUser.java +++ b/amp/WEB-INF/src/org/digijava/module/um/action/AddUser.java @@ -25,6 +25,8 @@ import javax.servlet.http.HttpSession; import java.util.*; +import static org.digijava.module.um.util.DbUtil.getTruBudgetIntents; + public class AddUser extends Action { private static Logger logger = Logger.getLogger(AddUser.class); @@ -67,7 +69,7 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, registerForm.setCountryResidence(countrieCol); logger.debug("sortedCountries.size : " + countrieCol.size()); - Collection intents = org.digijava.module.aim.util.DbUtil.getTruBudgetIntents(); + Collection intents = getTruBudgetIntents(); registerForm.setTruBudgetIntents(intents); //set default country from global settings. diff --git a/amp/WEB-INF/src/org/digijava/module/um/action/RegisterUser.java b/amp/WEB-INF/src/org/digijava/module/um/action/RegisterUser.java index e3325265463..a8a2c49a58f 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/action/RegisterUser.java +++ b/amp/WEB-INF/src/org/digijava/module/um/action/RegisterUser.java @@ -35,7 +35,7 @@ import java.util.HashSet; import java.util.List; -import static org.digijava.module.aim.util.DbUtil.getTruBudgetIntentsByName; +import static org.digijava.module.um.util.DbUtil.getTruBudgetIntentsByName; public class RegisterUser extends Action { @@ -226,5 +226,6 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, userRegisterForm.reset(mapping, request); return (mapping.findForward("index")); } + } } diff --git a/amp/WEB-INF/src/org/digijava/module/um/action/ViewEditUser.java b/amp/WEB-INF/src/org/digijava/module/um/action/ViewEditUser.java index 779a4ea69ea..11f9c9f02e1 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/action/ViewEditUser.java +++ b/amp/WEB-INF/src/org/digijava/module/um/action/ViewEditUser.java @@ -32,7 +32,8 @@ import java.util.*; import java.util.stream.Collectors; -import static org.digijava.module.aim.util.DbUtil.getTruBudgetIntentsByName; +import static org.digijava.module.um.util.DbUtil.getTruBudgetIntents; +import static org.digijava.module.um.util.DbUtil.getTruBudgetIntentsByName; public class ViewEditUser extends Action { @@ -176,7 +177,7 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServlet uForm.setNationalCoordinator(false); Set intentNames = user.getTruBudgetIntents().stream().map(TruBudgetIntent::getTruBudgetIntentName).collect(Collectors.toSet()); - Collection intents = org.digijava.module.aim.util.DbUtil.getTruBudgetIntents(); + Collection intents = getTruBudgetIntents(); intents.forEach(intent-> { if (intentNames.contains(intent.getTruBudgetIntentName())) @@ -285,7 +286,7 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServlet // } } - } else { + } else { if (uForm.getEvent().equalsIgnoreCase("save")) { if (user != null) { uForm.setEmailerror(false); @@ -313,6 +314,7 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServlet String[] intents = uForm.getSelectedTruBudgetIntents(); List truBudgetIntents = getTruBudgetIntentsByName(intents); + // TODO: 8/28/23 add for trubudget request user.setTruBudgetIntents(new HashSet<>(truBudgetIntents)); diff --git a/amp/WEB-INF/src/org/digijava/module/um/model/TruLoginRequest.java b/amp/WEB-INF/src/org/digijava/module/um/model/TruLoginRequest.java new file mode 100644 index 00000000000..5bb71aeff04 --- /dev/null +++ b/amp/WEB-INF/src/org/digijava/module/um/model/TruLoginRequest.java @@ -0,0 +1,90 @@ +package org.digijava.module.um.model; + +import com.fasterxml.jackson.annotation.JsonProperty; + + +public class TruLoginRequest { + @JsonProperty("apiVersion") + private String apiVersion; + + @JsonProperty("data") + private Data data; + + // Getters and setters + + public String getApiVersion() { + return apiVersion; + } + + public void setApiVersion(String apiVersion) { + this.apiVersion = apiVersion; + } + + public Data getData() { + return data; + } + + public void setData(Data data) { + this.data = data; + } + + @Override + public String toString() { + return "UserData{" + + "apiVersion='" + apiVersion + '\'' + + ", data=" + data + + '}'; + } + + // Nested class for "data" field + public static class Data { + @JsonProperty("user") + private User user; + + // Getters and setters + + public User getUser() { + return user; + } + + public void setUser(User user) { + this.user = user; + } + + @Override + public String toString() { + return "Data{" + + "user=" + user + + '}'; + } + } + + // Nested class for "user" field + public static class User { + @JsonProperty("id") + private String id; + + @JsonProperty("password") + private String password; + + // Getters and setters + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + } +} diff --git a/amp/WEB-INF/src/org/digijava/module/um/model/TruLoginResponse.java b/amp/WEB-INF/src/org/digijava/module/um/model/TruLoginResponse.java new file mode 100644 index 00000000000..d4fa69bf262 --- /dev/null +++ b/amp/WEB-INF/src/org/digijava/module/um/model/TruLoginResponse.java @@ -0,0 +1,116 @@ +package org.digijava.module.um.model; + + +import com.fasterxml.jackson.annotation.JsonProperty; +import java.util.List; + +public class TruLoginResponse { + @JsonProperty("apiVersion") + private String apiVersion; + + @JsonProperty("data") + private Data data; + + // Getters and setters + + public String getApiVersion() { + return apiVersion; + } + + public void setApiVersion(String apiVersion) { + this.apiVersion = apiVersion; + } + + public Data getData() { + return data; + } + + public void setData(Data data) { + this.data = data; + } + + public static class Data { + @JsonProperty("user") + private User user; + + // Getters and setters + + public User getUser() { + return user; + } + + public void setUser(User user) { + this.user = user; + } + } + + public static class User { + @JsonProperty("id") + private String id; + + @JsonProperty("displayName") + private String displayName; + + @JsonProperty("organization") + private String organization; + + @JsonProperty("allowedIntents") + private List allowedIntents; + + @JsonProperty("groups") + private List groups; + + @JsonProperty("token") + private String token; + + // Getters and setters + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getDisplayName() { + return displayName; + } + + public void setDisplayName(String displayName) { + this.displayName = displayName; + } + + public String getOrganization() { + return organization; + } + + public void setOrganization(String organization) { + this.organization = organization; + } + + public List getAllowedIntents() { + return allowedIntents; + } + + public void setAllowedIntents(List allowedIntents) { + this.allowedIntents = allowedIntents; + } + + public List getGroups() { + return groups; + } + + public void setGroups(List groups) { + this.groups = groups; + } + + public String getToken() { + return token; + } + + public void setToken(String token) { + this.token = token; + } + } +} diff --git a/amp/WEB-INF/src/org/digijava/module/um/model/UserData.java b/amp/WEB-INF/src/org/digijava/module/um/model/UserData.java new file mode 100644 index 00000000000..7862c4c0cda --- /dev/null +++ b/amp/WEB-INF/src/org/digijava/module/um/model/UserData.java @@ -0,0 +1,119 @@ +package org.digijava.module.um.model; + +import com.fasterxml.jackson.annotation.JsonProperty; + +public class UserData { + @JsonProperty("apiVersion") + private String apiVersion; + + @JsonProperty("data") + private Data data; + + // Getters and setters + + public String getApiVersion() { + return apiVersion; + } + + public void setApiVersion(String apiVersion) { + this.apiVersion = apiVersion; + } + + public Data getData() { + return data; + } + + public void setData(Data data) { + this.data = data; + } + + @Override + public String toString() { + return "UserData{" + + "apiVersion='" + apiVersion + '\'' + + ", data=" + data + + '}'; + } + + // Nested class for "data" field + public static class Data { + @JsonProperty("user") + private User user; + + // Getters and setters + + public User getUser() { + return user; + } + + public void setUser(User user) { + this.user = user; + } + + @Override + public String toString() { + return "Data{" + + "user=" + user + + '}'; + } + } + + // Nested class for "user" field + public static class User { + @JsonProperty("id") + private String id; + + @JsonProperty("displayName") + private String displayName; + + @JsonProperty("organization") + private String organization; + + @JsonProperty("password") + private String password; + + // Getters and setters + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getDisplayName() { + return displayName; + } + + public void setDisplayName(String displayName) { + this.displayName = displayName; + } + + public String getOrganization() { + return organization; + } + + public void setOrganization(String organization) { + this.organization = organization; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + @Override + public String toString() { + return "User{" + + "id='" + id + '\'' + + ", displayName='" + displayName + '\'' + + ", organization='" + organization + '\'' + + ", password='" + password + '\'' + + '}'; + } + } +} diff --git a/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java b/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java index 07faf010482..e4d1c7bc27e 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java @@ -33,6 +33,9 @@ import org.digijava.module.um.dbentity.ResetPassword; import org.digijava.module.um.dbentity.SuspendLogin; import org.digijava.module.um.exception.UMException; +import org.digijava.module.um.model.TruLoginRequest; +import org.digijava.module.um.model.TruLoginResponse; +import org.digijava.module.um.model.UserData; import org.hibernate.HibernateException; import org.hibernate.ObjectNotFoundException; import org.hibernate.Session; @@ -40,10 +43,17 @@ import org.hibernate.query.Query; import org.hibernate.type.LongType; import org.hibernate.type.StringType; +import org.springframework.context.ApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; +import org.springframework.web.reactive.function.BodyInserter; +import org.springframework.web.reactive.function.BodyInserters; +import org.springframework.web.reactive.function.client.WebClient; +import reactor.core.publisher.Mono; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import java.math.BigInteger; +import java.net.URISyntaxException; import java.util.*; public class DbUtil { @@ -396,6 +406,28 @@ public static void updateUser(User user) throws user.updateLastModified(); session.update(user); + session.flush(); + try { + UserData userData = new UserData(); + userData.setApiVersion("1.0"); + UserData.Data data = new UserData.Data(); + UserData.User user1 = new UserData.User(); + user1.setOrganization("Kfw"); + user1.setDisplayName(user.getFirstNames()+" "+user.getLastName()); + // TODO: 8/28/23 if you are editing a user for the first time with Trubudget integrated. their password will be the email + // TODO: 8/28/23 this can be changed later in Trubudget + user1.setPassword(user.getEmail()); + user1.setId(user.getEmail().split("@")[0]);// TODO: 8/28/23 use username in future + data.setUser(user1); + userData.setData(data); + UserData truResp = registerUserOnTrubudget(userData); + logger.info("Response is: "+truResp); + }catch (Exception e) + { + logger.info("Error: "+e.getMessage(), e); + } + + if(user.getUserPreference()!=null){ UserUtils.saveUserPreferences(user.getUserPreference()); @@ -410,6 +442,9 @@ public static void updateUser(User user) throws "Unable to update user information into database", ex); } } + public static TruLoginResponse loginToTruBudget(TruLoginRequest truLoginRequest) throws URISyntaxException { + return GenericWebClient.postForSingleObjResponse("http://localhost:8080/api/user.authenticate",truLoginRequest, TruLoginRequest.class,TruLoginResponse.class).block(); + } public static void registerUser(User user) throws UMException { Transaction tx = null; @@ -426,6 +461,26 @@ public static void registerUser(User user) throws UMException { // update user session.save(user); + session.flush(); + try { + UserData userData = new UserData(); + userData.setApiVersion("1.0"); + UserData.Data data = new UserData.Data(); + UserData.User user1 = new UserData.User(); + user1.setOrganization(user.getOrganizationName()); + user1.setDisplayName(user.getFirstNames()+" "+user.getLastName()); + user1.setPassword(user.getPassword()); + user1.setId(user.getEmail().split("@")[0]);// TODO: 8/28/23 use username in future + data.setUser(user1); + userData.setData(data); + UserData truResp = registerUserOnTrubudget(userData); + logger.info("Response is: "+truResp); + }catch (Exception e) + { + logger.info("Error: "+e.getMessage(), e); + } + + // update user preference if(user.getUserPreference() != null) { @@ -473,6 +528,58 @@ public static void registerUser(User user) throws UMException { "Unable to update user information into database", ex); } + } + + public static UserData registerUserOnTrubudget(UserData userData) throws URISyntaxException { + + logger.info("Registering user on Trubudget"); + TruLoginRequest truLoginRequest = new TruLoginRequest(); + truLoginRequest.setApiVersion("1.0"); + TruLoginRequest.Data data = new TruLoginRequest.Data(); + TruLoginRequest.User user1 = new TruLoginRequest.User(); + + user1.setPassword("root-secret"); + user1.setId("root"); + data.setUser(user1); + truLoginRequest.setData(data); + TruLoginResponse truResp = loginToTruBudget(truLoginRequest); + logger.info("Login Response is: "+truResp); + + return GenericWebClient.postForSingleObjResponse("http://localhost:8080/api/global.createUser", userData, UserData.class, UserData.class, truResp.getData().getUser().getToken()).block(); + + } + public static List getTruBudgetIntents() + { + Session session = PersistenceManager.getRequestDBSession(); + try { + return session.createNativeQuery(" SELECT t. * FROM trubudget_intent t ORDER BY trubudget_intent_name", TruBudgetIntent.class).list(); + + }catch (Exception e) + { + e.printStackTrace(); + throw new RuntimeException(e.getMessage()); + } + + } + + public static List getTruBudgetIntentsByName(String [] names) + { + if (names.length!=0) { + Session session = PersistenceManager.getRequestDBSession(); + StringBuilder convertedNames = new StringBuilder("("); + for (String name : names) { + convertedNames.append("'").append(name).append("'").append(","); + } + String c = convertedNames.toString().replaceAll(",$", ""); + c += ")"; + logger.info("Intent query: " + c); + + return session.createNativeQuery(" SELECT t. * FROM trubudget_intent t WHERE trubudget_intent_name in " + c, TruBudgetIntent.class).list(); + + } + return Collections.emptyList(); + + } public static boolean registerUser(String id) throws UMException { diff --git a/amp/WEB-INF/src/org/digijava/module/um/util/GenericWebClient.java b/amp/WEB-INF/src/org/digijava/module/um/util/GenericWebClient.java new file mode 100644 index 00000000000..7dccf36fae4 --- /dev/null +++ b/amp/WEB-INF/src/org/digijava/module/um/util/GenericWebClient.java @@ -0,0 +1,166 @@ +package org.digijava.module.um.util; + + +import io.netty.channel.ChannelOption; +import io.netty.handler.timeout.ReadTimeoutHandler; +import io.netty.handler.timeout.WriteTimeoutHandler; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.HttpStatus; +import org.springframework.http.client.reactive.ReactorClientHttpConnector; +import org.springframework.web.reactive.function.client.WebClient; +import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; +import reactor.netty.http.client.HttpClient; +import reactor.util.retry.Retry; + +import java.net.URI; +import java.net.URISyntaxException; +import java.time.Duration; +import java.time.temporal.ChronoUnit; +import java.util.concurrent.TimeUnit; + +/** + * This class provides a generic template for making POST and GET request + */ +public class GenericWebClient { + + private static final long TIMEOUT = 5000; + private static final int CONNECT_TIMEOUT = 5000; + + private static final Logger logger = LoggerFactory.getLogger(GenericWebClient.class); + /** + * + * @param url - String endpoint + * @param request -Object of type T + * @param requestClass classType of T in the form T.class + * @param responseClass classType of V in the form V.class + * @return + * @param + * @param + * @throws URISyntaxException + * toDo: Define custom exceptions + * NOTE: Custom Exceptions must in order of 4xx to 5xx + * E... -> Array of custom exceptions + */ + + @SafeVarargs + public static Mono postForSingleObjResponse(String url, T request, Class requestClass, Class responseClass, String... token) throws URISyntaxException { + logger.info("Making post for single object: "+request); + return myWebClient().post() + .uri(new URI(url)) + .headers(httpHeaders ->{ + if (token.length>=1) + { + httpHeaders.setBearerAuth(token[0]); + } + }) + .body(Mono.just(request), requestClass) + .retrieve() + .onStatus(HttpStatus::is5xxServerError, response -> + response.bodyToMono(String.class) + .flatMap(body -> Mono.error(new RuntimeException("Internal server error occurred. Response: " + body)))) + .onStatus(HttpStatus::is4xxClientError, response -> + response.bodyToMono(String.class) + .flatMap(body -> Mono.error(new RuntimeException("Bad Request Error. Response: " + body)))) + .bodyToMono(responseClass) + .onErrorResume(Mono::error) + .retryWhen(Retry.backoff(3, Duration.of(2, ChronoUnit.SECONDS)) + .onRetryExhaustedThrow(((retryBackoffSpec, retrySignal) -> new Throwable(retrySignal.failure())))); + + + } + + /** + * + * @param url - String endpoint + * @param request -Object of type T + * @param requestClass classType of T in the form T.class + * @param responseClass classType of V in the form V.class + * @return + * @param + * @param + * @throws URISyntaxException + */ + @SafeVarargs + public static Flux postForCollectionResponse(String url, T request, Class requestClass, Class responseClass, E... exceptions) throws URISyntaxException { + + return myWebClient().post() + .uri(new URI(url)) + .body(Mono.just(request),requestClass) + .retrieve() + .onStatus(HttpStatus::is5xxServerError, response -> + response.bodyToMono(String.class) + .flatMap(body -> Mono.error(new RuntimeException("Internal server error occurred. Response: " + body)))) + .onStatus(HttpStatus::is4xxClientError, response -> + response.bodyToMono(String.class) + .flatMap(body -> Mono.error(new RuntimeException("Bad Request Error. Response: " + body)))) + .bodyToFlux(responseClass); + + } + + /** + * + * @param url - String endpoint + * @param responseClass classType of V in the form V.class + * @return + * @param + * @throws URISyntaxException + */ + @SafeVarargs + public static Flux getForCollectionResponse(String url, Class responseClass, E... exceptions) throws URISyntaxException { + return myWebClient().get() + .uri(new URI(url)) + .retrieve() + .onStatus(HttpStatus::is5xxServerError, response -> + response.bodyToMono(String.class) + .flatMap(body -> Mono.error(new RuntimeException("Internal server error occurred. Response: " + body)))) + .onStatus(HttpStatus::is4xxClientError, response -> + response.bodyToMono(String.class) + .flatMap(body -> Mono.error(new RuntimeException("Bad Request Error. Response: " + body)))) + .bodyToFlux(responseClass); + + } + + /** + * + * @param url - String endpoint + * @param responseClass classType of V in the form V.class + * @return + * @param + * @throws URISyntaxException + */ + @SafeVarargs + public static Mono getForSingleObjResponse(String url, Class responseClass, E... exceptions) throws URISyntaxException { + return myWebClient().get() + .uri(new URI(url)) + .retrieve() + .onStatus(HttpStatus::is5xxServerError, response -> + response.bodyToMono(String.class) + .flatMap(body -> Mono.error(new RuntimeException("Internal server error occurred. Response: " + body)))) + .onStatus(HttpStatus::is4xxClientError, response -> + response.bodyToMono(String.class) + .flatMap(body -> Mono.error(new RuntimeException("Bad Request Error. Response: " + body)))) + .bodyToMono(responseClass); + + } + + private static WebClient myWebClient() { + HttpClient httpClient = HttpClient.create() + .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, CONNECT_TIMEOUT) + .responseTimeout(Duration.ofMillis(TIMEOUT)) + .doOnConnected(conn -> + conn.addHandlerLast(new ReadTimeoutHandler(TIMEOUT, TimeUnit.MILLISECONDS)) + .addHandlerLast(new WriteTimeoutHandler(TIMEOUT, TimeUnit.MILLISECONDS))); + + return WebClient.builder() + .clientConnector(new ReactorClientHttpConnector(httpClient)) + .build(); + + + + } + + + +} From 26795711e7a6d519308231d2bc14ea352a9b8352 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Mon, 28 Aug 2023 21:14:57 +0300 Subject: [PATCH 009/307] AMP-30711 Add webclient --- .../um/model/GrantPermissionRequest.java | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 amp/WEB-INF/src/org/digijava/module/um/model/GrantPermissionRequest.java diff --git a/amp/WEB-INF/src/org/digijava/module/um/model/GrantPermissionRequest.java b/amp/WEB-INF/src/org/digijava/module/um/model/GrantPermissionRequest.java new file mode 100644 index 00000000000..f31837b3777 --- /dev/null +++ b/amp/WEB-INF/src/org/digijava/module/um/model/GrantPermissionRequest.java @@ -0,0 +1,56 @@ +package org.digijava.module.um.model; + +import com.fasterxml.jackson.annotation.JsonProperty; + +public class GrantPermissionRequest { + @JsonProperty("apiVersion") + private String apiVersion; + + @JsonProperty("data") + private Data data; + + // Getters and setters + + public String getApiVersion() { + return apiVersion; + } + + public void setApiVersion(String apiVersion) { + this.apiVersion = apiVersion; + } + + public Data getData() { + return data; + } + + public void setData(Data data) { + this.data = data; + } + + public static class Data { + @JsonProperty("identity") + private String identity; + + @JsonProperty("intent") + private String intent; + + // Getters and setters + + public String getIdentity() { + return identity; + } + + public void setIdentity(String identity) { + this.identity = identity; + } + + public String getIntent() { + return intent; + } + + public void setIntent(String intent) { + this.intent = intent; + } + } +} + From 32f9831d1a0c684b25f079c000548c1e766b9e02 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Mon, 28 Aug 2023 21:23:04 +0300 Subject: [PATCH 010/307] AMP-30711 Add webclient --- .../org/digijava/module/um/model/GrantPermissionRequest.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/amp/WEB-INF/src/org/digijava/module/um/model/GrantPermissionRequest.java b/amp/WEB-INF/src/org/digijava/module/um/model/GrantPermissionRequest.java index f31837b3777..20f23a7bc89 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/model/GrantPermissionRequest.java +++ b/amp/WEB-INF/src/org/digijava/module/um/model/GrantPermissionRequest.java @@ -19,6 +19,8 @@ public void setApiVersion(String apiVersion) { this.apiVersion = apiVersion; } + + public Data getData() { return data; } From 0a5c71feef73b6cac25019b0b0b1da50c607dea3 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Tue, 29 Aug 2023 12:41:08 +0300 Subject: [PATCH 011/307] AMP-30711 Add login and register to trubudget --- .../security/auth/DigiUserDetailsService.java | 23 ++--- .../src/org/digijava/kernel/user/User.hbm.xml | 5 +- .../src/org/digijava/kernel/user/User.java | 23 +++-- .../org/digijava/module/aim/action/Login.java | 20 +++++ .../module/aim/auth/AmpPostLoginAction.java | 23 +++++ .../module/um/action/RegisterUser.java | 7 +- .../module/um/action/ViewEditUser.java | 3 +- ...st.java => TruGrantPermissionRequest.java} | 2 +- .../model/{UserData.java => TruUserData.java} | 2 +- .../org/digijava/module/um/util/DbUtil.java | 90 +++++++++++++------ .../module/um/util/GenericWebClient.java | 5 +- 11 files changed, 146 insertions(+), 57 deletions(-) rename amp/WEB-INF/src/org/digijava/module/um/model/{GrantPermissionRequest.java => TruGrantPermissionRequest.java} (96%) rename amp/WEB-INF/src/org/digijava/module/um/model/{UserData.java => TruUserData.java} (98%) diff --git a/amp/WEB-INF/src/org/digijava/kernel/security/auth/DigiUserDetailsService.java b/amp/WEB-INF/src/org/digijava/kernel/security/auth/DigiUserDetailsService.java index 23bab45decd..946dc805eb3 100644 --- a/amp/WEB-INF/src/org/digijava/kernel/security/auth/DigiUserDetailsService.java +++ b/amp/WEB-INF/src/org/digijava/kernel/security/auth/DigiUserDetailsService.java @@ -88,15 +88,14 @@ public UserDetails loadUserByUsername(String email) throws protected UserDetails getUserDetails(User user) throws DataAccessException { Collection authorities = getAssignedAuthorities(user); - UserDetails ud = new org.springframework.security.core.userdetails.User(user.getEmail(), + return new org.springframework.security.core.userdetails.User(user.getEmail(), user.getPassword(), true, true, true, true, authorities); - return ud; } protected Collection getAssignedAuthorities(User user) throws DataAccessException { - Set authorities = new HashSet(); + Set authorities = new HashSet<>(); authorities.add(new SimpleGrantedAuthority("ROLE_AUTHENTICATED")); @@ -113,22 +112,14 @@ protected Collection getAssignedAuthorities(User use "Unable to load groups for user: " + user.getId(), ex); } - Iterator groupIter = user.getGroups().iterator(); - while (groupIter.hasNext()) { - Group group = (Group) groupIter.next(); + for (Object o : user.getGroups()) { + Group group = (Group) o; authorities.add(new SimpleGrantedAuthority( - "GROUP_" + - group.getSite().getSiteId() + "_" + group.getName())); + "GROUP_" + + group.getSite().getSiteId() + "_" + group.getName())); } } - Collection result = new ArrayList(); - Iterator iter = authorities.iterator(); - int i = 0; - while (iter.hasNext()) { - GrantedAuthority item = (GrantedAuthority) iter.next(); - result.add(item); - } - return result; + return new ArrayList<>(authorities); } public boolean isPopulateGroupAuthorities() { diff --git a/amp/WEB-INF/src/org/digijava/kernel/user/User.hbm.xml b/amp/WEB-INF/src/org/digijava/kernel/user/User.hbm.xml index 6ecbbdd909c..4cc4f5c3c25 100644 --- a/amp/WEB-INF/src/org/digijava/kernel/user/User.hbm.xml +++ b/amp/WEB-INF/src/org/digijava/kernel/user/User.hbm.xml @@ -25,6 +25,9 @@ + + + @@ -41,7 +44,7 @@ class="org.digijava.kernel.entity.Locale" cascade="none" /> - + diff --git a/amp/WEB-INF/src/org/digijava/kernel/user/User.java b/amp/WEB-INF/src/org/digijava/kernel/user/User.java index 4e0b15bdc2e..aec90091dee 100644 --- a/amp/WEB-INF/src/org/digijava/kernel/user/User.java +++ b/amp/WEB-INF/src/org/digijava/kernel/user/User.java @@ -31,10 +31,12 @@ import org.digijava.module.aim.dbentity.AmpCategoryValueLocations; import org.digijava.module.aim.dbentity.AmpOrganisation; import org.digijava.module.aim.dbentity.AmpUserExtension; +import org.digijava.module.aim.util.DbUtil; import org.digijava.module.aim.util.Identifiable; import javax.security.auth.Subject; import java.io.Serializable; +import java.sql.Clob; import java.util.*; @InterchangeableValue(UserValueProvider.class) @@ -58,7 +60,7 @@ public class User private Boolean pledgeSuperUser; private Site registeredThrough; private Set interests; - private java.sql.Clob bio; + private Clob bio; private Image portrait; private String organizationName; private OrganizationType organizationType; @@ -83,7 +85,16 @@ public class User private Set assignedOrgs; private Date passwordChangedAt; - private Set truBudgetIntents; + private Set truBudgetIntents= new HashSet<>(); + private Boolean truBudgetEnabled=false; + + public Boolean getTruBudgetEnabled() { + return truBudgetEnabled; + } + + public void setTruBudgetEnabled(Boolean truBudgetEnabled) { + this.truBudgetEnabled = truBudgetEnabled; + } public User() {} @@ -97,7 +108,7 @@ public User(String email, String firstNames, String lastName) { this.lastName = lastName; this.emailVerified = false; this.emailBouncing = false; - this.noAlertsUntil = new Date(java.lang.System.currentTimeMillis()); + this.noAlertsUntil = new Date(System.currentTimeMillis()); //this.password = ; //this.salt = ; //this.passQuestion = passQuestion; @@ -319,11 +330,11 @@ public void setPhoto(Image photo) { this.photo = photo; } - public java.sql.Clob getBio() { + public Clob getBio() { return bio; } - public void setBio(java.sql.Clob bio) { + public void setBio(Clob bio) { this.bio = bio; } @@ -463,7 +474,7 @@ public boolean hasVerifiedDonor(){ Iterator it = this.assignedOrgs.iterator(); while (it.hasNext()) { AmpOrganisation currentOrganization = it.next(); - if (org.digijava.module.aim.util.DbUtil.hasDonorRole(currentOrganization.getAmpOrgId())) + if (DbUtil.hasDonorRole(currentOrganization.getAmpOrgId())) return true; } return false; diff --git a/amp/WEB-INF/src/org/digijava/module/aim/action/Login.java b/amp/WEB-INF/src/org/digijava/module/aim/action/Login.java index 38c6f8bc6a6..8d6296753c9 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/action/Login.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/action/Login.java @@ -18,6 +18,9 @@ import org.digijava.module.aim.util.TeamUtil; import org.digijava.module.gateperm.core.GatePermConst; import org.digijava.module.gateperm.util.PermissionUtil; +import org.digijava.module.um.model.TruLoginRequest; +import org.digijava.module.um.model.TruLoginResponse; +import reactor.core.publisher.Mono; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; @@ -25,6 +28,8 @@ import javax.servlet.http.HttpSession; import java.util.*; +import static org.digijava.module.um.util.DbUtil.loginToTruBudget; + /** * Validates a user using the user name and the password. @@ -138,6 +143,21 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, * registered user but has not yet been assigned a team */ // + + //login to trubudget + TruLoginRequest truLoginRequest = new TruLoginRequest(); + truLoginRequest.setApiVersion("1.0"); + TruLoginRequest.Data data = new TruLoginRequest.Data(); + TruLoginRequest.User user1 = new TruLoginRequest.User(); + + user1.setPassword(lForm.getUserId()); + user1.setId(lForm.getUserId().split("@")[0]); + data.setUser(user1); + truLoginRequest.setData(data); + Mono truResp = loginToTruBudget(truLoginRequest); + truResp.subscribe(truLoginResponse -> logger.info("Trubudget login response: "+truLoginResponse)); + + Collection members = TeamMemberUtil.getTeamMembers(lForm.getUserId()); if (members == null || members.size() == 0) { if (siteAdmin == true) { // user is a site admin diff --git a/amp/WEB-INF/src/org/digijava/module/aim/auth/AmpPostLoginAction.java b/amp/WEB-INF/src/org/digijava/module/aim/auth/AmpPostLoginAction.java index 2d6d32894ab..37bbdf2df86 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/auth/AmpPostLoginAction.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/auth/AmpPostLoginAction.java @@ -12,19 +12,29 @@ import org.digijava.kernel.exception.DgException; import org.digijava.kernel.user.User; import org.digijava.kernel.util.UserUtils; +import org.digijava.module.aim.form.LoginForm; +import org.digijava.module.um.model.TruLoginRequest; +import org.digijava.module.um.model.TruLoginResponse; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.userdetails.UserDetails; +import reactor.core.publisher.Mono; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.PrintWriter; +import static org.digijava.module.um.util.DbUtil.loginToTruBudget; + /** * @author mihai * */ public class AmpPostLoginAction extends Action { + private static Logger logger = LoggerFactory.getLogger(AmpPostLoginAction.class); + @Override @@ -34,6 +44,7 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, response.setContentType("text/plain"); PrintWriter out = response.getWriter(); + String id = request.getParameter("j_autoWorkspaceId"); request.getSession().setAttribute("j_autoWorkspaceId", id); @@ -45,6 +56,18 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, } catch(DgException ex) { throw new RuntimeException(ex); } + TruLoginRequest truLoginRequest = new TruLoginRequest(); + truLoginRequest.setApiVersion("1.0"); + TruLoginRequest.Data data = new TruLoginRequest.Data(); + TruLoginRequest.User user1 = new TruLoginRequest.User(); + user1.setPassword(currentUser.getEmail()); + user1.setId(currentUser.getEmail().split("@")[0]); + data.setUser(user1); + truLoginRequest.setData(data); + Mono truResp = loginToTruBudget(truLoginRequest); + truResp.subscribe(truLoginResponse -> logger.info("Trubudget login response: "+truLoginResponse)); + + ApiErrorMessage res = ApiAuthentication.login(currentUser, request); if(res != null) { diff --git a/amp/WEB-INF/src/org/digijava/module/um/action/RegisterUser.java b/amp/WEB-INF/src/org/digijava/module/um/action/RegisterUser.java index a8a2c49a58f..31ea0b70c26 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/action/RegisterUser.java +++ b/amp/WEB-INF/src/org/digijava/module/um/action/RegisterUser.java @@ -63,7 +63,7 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, return (mapping.getInputForward()); try { - boolean isMailAvtive = FeaturesUtil.getGlobalSettingValueBoolean(GlobalSettingsConstants.USER_REGISTRATION_BY_MAIL); + boolean isMailActive = FeaturesUtil.getGlobalSettingValueBoolean(GlobalSettingsConstants.USER_REGISTRATION_BY_MAIL); User user = new User(userRegisterForm.getEmail().toLowerCase(), userRegisterForm.getFirstNames(), userRegisterForm @@ -72,7 +72,8 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, List truBudgetIntents = getTruBudgetIntentsByName(intents); logger.info("Intents: "+ truBudgetIntents); - user.setTruBudgetIntents(new HashSet<>(truBudgetIntents)); + user.getTruBudgetIntents().addAll(new HashSet<>(truBudgetIntents)); + user.setTruBudgetIntents(user.getTruBudgetIntents()); // set client IP address user.setModifyingIP(RequestUtils.getRemoteAddress(request)); @@ -184,7 +185,7 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, DbUtil.registerUser(user); DgUtil.saveUserLanguagePreferences(user, request, language); - if (isMailAvtive) { + if (isMailActive) { if(userRegisterForm.isSendEmail()) { String description = des + user.getEmail() + cri + userRegisterForm.getPassword() + pti; String title = TranslatorWorker.translateText("Registration Confirmation", langCode, siteDomain.getSite()); diff --git a/amp/WEB-INF/src/org/digijava/module/um/action/ViewEditUser.java b/amp/WEB-INF/src/org/digijava/module/um/action/ViewEditUser.java index 11f9c9f02e1..2c07333d15f 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/action/ViewEditUser.java +++ b/amp/WEB-INF/src/org/digijava/module/um/action/ViewEditUser.java @@ -316,7 +316,8 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServlet List truBudgetIntents = getTruBudgetIntentsByName(intents); // TODO: 8/28/23 add for trubudget request - user.setTruBudgetIntents(new HashSet<>(truBudgetIntents)); + user.getTruBudgetIntents().addAll(new HashSet<>(truBudgetIntents)); + user.setTruBudgetIntents(user.getTruBudgetIntents()); user.setCountry(org.digijava.module.aim.util.DbUtil.getDgCountry(uForm.getSelectedCountryIso())); if(uForm.getSelectedRegionId()==-1){ diff --git a/amp/WEB-INF/src/org/digijava/module/um/model/GrantPermissionRequest.java b/amp/WEB-INF/src/org/digijava/module/um/model/TruGrantPermissionRequest.java similarity index 96% rename from amp/WEB-INF/src/org/digijava/module/um/model/GrantPermissionRequest.java rename to amp/WEB-INF/src/org/digijava/module/um/model/TruGrantPermissionRequest.java index 20f23a7bc89..573c791d528 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/model/GrantPermissionRequest.java +++ b/amp/WEB-INF/src/org/digijava/module/um/model/TruGrantPermissionRequest.java @@ -2,7 +2,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; -public class GrantPermissionRequest { +public class TruGrantPermissionRequest { @JsonProperty("apiVersion") private String apiVersion; diff --git a/amp/WEB-INF/src/org/digijava/module/um/model/UserData.java b/amp/WEB-INF/src/org/digijava/module/um/model/TruUserData.java similarity index 98% rename from amp/WEB-INF/src/org/digijava/module/um/model/UserData.java rename to amp/WEB-INF/src/org/digijava/module/um/model/TruUserData.java index 7862c4c0cda..1e602108b25 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/model/UserData.java +++ b/amp/WEB-INF/src/org/digijava/module/um/model/TruUserData.java @@ -2,7 +2,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; -public class UserData { +public class TruUserData { @JsonProperty("apiVersion") private String apiVersion; diff --git a/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java b/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java index e4d1c7bc27e..fea8dedd235 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java @@ -33,9 +33,10 @@ import org.digijava.module.um.dbentity.ResetPassword; import org.digijava.module.um.dbentity.SuspendLogin; import org.digijava.module.um.exception.UMException; +import org.digijava.module.um.model.TruGrantPermissionRequest; import org.digijava.module.um.model.TruLoginRequest; import org.digijava.module.um.model.TruLoginResponse; -import org.digijava.module.um.model.UserData; +import org.digijava.module.um.model.TruUserData; import org.hibernate.HibernateException; import org.hibernate.ObjectNotFoundException; import org.hibernate.Session; @@ -43,12 +44,9 @@ import org.hibernate.query.Query; import org.hibernate.type.LongType; import org.hibernate.type.StringType; -import org.springframework.context.ApplicationContext; -import org.springframework.context.support.ClassPathXmlApplicationContext; -import org.springframework.web.reactive.function.BodyInserter; -import org.springframework.web.reactive.function.BodyInserters; -import org.springframework.web.reactive.function.client.WebClient; +import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; +import reactor.core.scheduler.Schedulers; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; @@ -408,11 +406,11 @@ public static void updateUser(User user) throws session.update(user); session.flush(); try { - UserData userData = new UserData(); + TruUserData userData = new TruUserData(); userData.setApiVersion("1.0"); - UserData.Data data = new UserData.Data(); - UserData.User user1 = new UserData.User(); - user1.setOrganization("Kfw"); + TruUserData.Data data = new TruUserData.Data(); + TruUserData.User user1 = new TruUserData.User(); + user1.setOrganization("KfW"); user1.setDisplayName(user.getFirstNames()+" "+user.getLastName()); // TODO: 8/28/23 if you are editing a user for the first time with Trubudget integrated. their password will be the email // TODO: 8/28/23 this can be changed later in Trubudget @@ -420,8 +418,9 @@ public static void updateUser(User user) throws user1.setId(user.getEmail().split("@")[0]);// TODO: 8/28/23 use username in future data.setUser(user1); userData.setData(data); - UserData truResp = registerUserOnTrubudget(userData); - logger.info("Response is: "+truResp); + registerUserOnTrubudget(userData, user); + session.update(user); + session.flush(); }catch (Exception e) { logger.info("Error: "+e.getMessage(), e); @@ -442,8 +441,8 @@ public static void updateUser(User user) throws "Unable to update user information into database", ex); } } - public static TruLoginResponse loginToTruBudget(TruLoginRequest truLoginRequest) throws URISyntaxException { - return GenericWebClient.postForSingleObjResponse("http://localhost:8080/api/user.authenticate",truLoginRequest, TruLoginRequest.class,TruLoginResponse.class).block(); + public static Mono loginToTruBudget(TruLoginRequest truLoginRequest) throws URISyntaxException { + return GenericWebClient.postForSingleObjResponse("http://localhost:8080/api/user.authenticate",truLoginRequest, TruLoginRequest.class,TruLoginResponse.class); } public static void registerUser(User user) throws UMException { @@ -454,6 +453,7 @@ public static void registerUser(User user) throws UMException { //beginTransaction(); // set encrypted password + String plainTextPass=user.getPassword(); user.setPassword(ShaCrypt.crypt(user.getPassword().trim()).trim()); // set hashed password @@ -462,19 +462,23 @@ public static void registerUser(User user) throws UMException { // update user session.save(user); session.flush(); + try { - UserData userData = new UserData(); + TruUserData userData = new TruUserData(); userData.setApiVersion("1.0"); - UserData.Data data = new UserData.Data(); - UserData.User user1 = new UserData.User(); - user1.setOrganization(user.getOrganizationName()); + TruUserData.Data data = new TruUserData.Data(); + TruUserData.User user1 = new TruUserData.User(); + user1.setOrganization("KfW"); user1.setDisplayName(user.getFirstNames()+" "+user.getLastName()); - user1.setPassword(user.getPassword()); + user1.setPassword(user.getEmail()); user1.setId(user.getEmail().split("@")[0]);// TODO: 8/28/23 use username in future data.setUser(user1); userData.setData(data); - UserData truResp = registerUserOnTrubudget(userData); - logger.info("Response is: "+truResp); + registerUserOnTrubudget(userData, user); + user.setTruBudgetEnabled(true); + session.update(user); + session.flush(); + }catch (Exception e) { logger.info("Error: "+e.getMessage(), e); @@ -482,6 +486,7 @@ public static void registerUser(User user) throws UMException { + // update user preference if(user.getUserPreference() != null) { session.save(user.getUserPreference()); @@ -530,7 +535,7 @@ public static void registerUser(User user) throws UMException { } - public static UserData registerUserOnTrubudget(UserData userData) throws URISyntaxException { + public static void registerUserOnTrubudget(TruUserData userData, User user) throws URISyntaxException { logger.info("Registering user on Trubudget"); TruLoginRequest truLoginRequest = new TruLoginRequest(); @@ -542,10 +547,45 @@ public static UserData registerUserOnTrubudget(UserData userData) throws URISynt user1.setId("root"); data.setUser(user1); truLoginRequest.setData(data); - TruLoginResponse truResp = loginToTruBudget(truLoginRequest); - logger.info("Login Response is: "+truResp); + Mono truResp = loginToTruBudget(truLoginRequest); + truResp.subscribe(truLoginResponse -> { + + + TruUserData res = null; + if (user.getTruBudgetEnabled()) + { + logger.info("We already have a trubudget account for this user email/username."); + } + else { + try { + res = GenericWebClient.postForSingleObjResponse("http://localhost:8080/api/global.createUser", userData, TruUserData.class, TruUserData.class, truLoginResponse.getData().getUser().getToken()).block(); + + }catch (Exception e) + { + logger.info("Error occurred here: "+e.getMessage(),e); + } + + } + + if (!user.getTruBudgetIntents().isEmpty()) { + TruUserData finalRes = res; + Flux.range(0, user.getTruBudgetIntents().size()) + .flatMap(index -> { + TruGrantPermissionRequest permData = new TruGrantPermissionRequest(); + TruGrantPermissionRequest.Data data1 = new TruGrantPermissionRequest.Data(); + data1.setIdentity(finalRes !=null? finalRes.getData().getUser().getId():user.getEmail().split("@")[0]); + data1.setIntent(new ArrayList<>(user.getTruBudgetIntents()).get(index).getTruBudgetIntentName()); + permData.setData(data1); + permData.setApiVersion("1.0"); + try { + return GenericWebClient.postForSingleObjResponse("http://localhost:8080/api/global.grantPermission", permData, TruGrantPermissionRequest.class, String.class, truLoginResponse.getData().getUser().getToken()).subscribeOn(Schedulers.parallel()); + } catch (URISyntaxException e) { + throw new RuntimeException(e); + } + }).subscribe(response -> logger.info("Permission response: " + response)); + } + }); - return GenericWebClient.postForSingleObjResponse("http://localhost:8080/api/global.createUser", userData, UserData.class, UserData.class, truResp.getData().getUser().getToken()).block(); } public static List getTruBudgetIntents() diff --git a/amp/WEB-INF/src/org/digijava/module/um/util/GenericWebClient.java b/amp/WEB-INF/src/org/digijava/module/um/util/GenericWebClient.java index 7dccf36fae4..35e372526d5 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/util/GenericWebClient.java +++ b/amp/WEB-INF/src/org/digijava/module/um/util/GenericWebClient.java @@ -41,10 +41,9 @@ public class GenericWebClient { * @throws URISyntaxException * toDo: Define custom exceptions * NOTE: Custom Exceptions must in order of 4xx to 5xx - * E... -> Array of custom exceptions + * String... -> Array of tokens for auth */ - @SafeVarargs public static Mono postForSingleObjResponse(String url, T request, Class requestClass, Class responseClass, String... token) throws URISyntaxException { logger.info("Making post for single object: "+request); return myWebClient().post() @@ -65,7 +64,7 @@ public static Mono postForSingleObjResponse(String url, T request, Clas .flatMap(body -> Mono.error(new RuntimeException("Bad Request Error. Response: " + body)))) .bodyToMono(responseClass) .onErrorResume(Mono::error) - .retryWhen(Retry.backoff(3, Duration.of(2, ChronoUnit.SECONDS)) + .retryWhen(Retry.backoff(1, Duration.of(2, ChronoUnit.SECONDS)) .onRetryExhaustedThrow(((retryBackoffSpec, retrySignal) -> new Throwable(retrySignal.failure())))); From d9d5d73fa1c17d2144a118d6f9c5b4e25f9daf43 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Tue, 29 Aug 2023 15:23:21 +0300 Subject: [PATCH 012/307] AMP-30711 Add login and register to trubudget --- .../sections/AmpMEFormSectionFeature.java | 35 ++++++------------- .../tables/AmpSectorsFormTableFeature.java | 2 +- .../module/aim/action/AddNewIndicator.java | 14 ++++---- .../org/digijava/module/aim/action/Login.java | 12 +++++-- .../module/aim/auth/AmpPostLoginAction.java | 11 +++++- 5 files changed, 38 insertions(+), 36 deletions(-) diff --git a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/sections/AmpMEFormSectionFeature.java b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/sections/AmpMEFormSectionFeature.java index 31c288c1209..a22c4cece11 100644 --- a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/sections/AmpMEFormSectionFeature.java +++ b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/sections/AmpMEFormSectionFeature.java @@ -60,10 +60,10 @@ public AmpMEFormSectionFeature(String id, String fmName, //final IModel> setModel = new PropertyModel>(am, "indicators"); if (am.getObject().getIndicators() == null){ - am.getObject().setIndicators(new HashSet()); + am.getObject().setIndicators(new HashSet<>()); } final IModel> listModel = OnePagerUtil - .getReadOnlyListModelFromSetModel(new PropertyModel(am, "indicators")); + .getReadOnlyListModelFromSetModel(new PropertyModel<>(am, "indicators")); final AmpUniqueCollectionValidatorField uniqueCollectionValidationField = new AmpUniqueCollectionValidatorField( "uniqueMEValidator", listModel, "Unique MEs Validator") { @@ -169,23 +169,21 @@ public Object getDisplayValue(Object object) { return TranslatorUtil.getTranslation("Descending"); } }; - add(new AmpSelectFieldPanel("indType", new PropertyModel(newInd, "type"), typeCol, "Type", false, true, cr)); + add(new AmpSelectFieldPanel("indType", new PropertyModel<>(newInd, "type"), typeCol, "Type", false, true, cr)); final AmpClassificationConfiguration sectorClassification = SectorUtil.getPrimaryConfigClassification(); - final IModel> sectorSetModel = new PropertyModel>( + final IModel> sectorSetModel = new PropertyModel<>( newInd, "sectors"); IModel> sectorListModel = new AbstractReadOnlyModel>() { @Override public List getObject() { - ArrayList ret = new ArrayList(); - ret.addAll(sectorSetModel.getObject()); - return ret; + return new ArrayList<>(sectorSetModel.getObject()); } }; @@ -319,32 +317,21 @@ public void onClick(AjaxRequestTarget target) { private AmpIndicator getNewIndicator() { AmpIndicator newInd = new AmpIndicator(); - newInd.setSectors(new HashSet()); + newInd.setSectors(new HashSet<>()); newInd.setCreationDate(new Date()); return newInd; } private IModel getNewIndicatorModel() { - return new Model(getNewIndicator()); + return new Model<>(getNewIndicator()); } protected void updateVisibility(IModel indicatorModel){ AmpIndicator ind = indicatorModel.getObject(); - if(ind.getSectors()==null||ind.getSectors().isEmpty()){ - sectorAdded=false; - } - else{ - sectorAdded=true; - } - if (ind.getCode() == null) - codeSelected = false; - else - codeSelected = true; - - if (ind.getName() == null || ind.getName() == "") - titleSelected = false; - else - titleSelected = true; + sectorAdded= ind.getSectors() != null && !ind.getSectors().isEmpty(); + codeSelected = ind.getCode() != null; + + titleSelected = ind.getName() != null && !Objects.equals(ind.getName(), ""); if (codeSelected && titleSelected&§orAdded){ indicatorFeedbackContainer.setVisible(false); 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/digijava/module/aim/action/AddNewIndicator.java b/amp/WEB-INF/src/org/digijava/module/aim/action/AddNewIndicator.java index 26d893b69d4..7390f1c3337 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/action/AddNewIndicator.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/action/AddNewIndicator.java @@ -65,14 +65,14 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, indicator.setCode(newIndForm.getCode()); indicator.setType(newIndForm.getType()); if (newIndForm.getActivitySectors()!=null && newIndForm.getActivitySectors().size()>0){ - indicator.setSectors(new HashSet()); - for (Iterator sectorIt = newIndForm.getActivitySectors().iterator(); sectorIt.hasNext();) { + indicator.setSectors(new HashSet<>()); + for (Object o : newIndForm.getActivitySectors()) { //This is awful! why is here AmpActivitySector???!! - ActivitySector actSector = (ActivitySector) sectorIt.next(); - AmpSector sector=SectorUtil.getAmpSector(actSector.getSectorId()); - sector.setAmpSectorId(actSector.getSectorId()); - indicator.getSectors().add(sector); - } + ActivitySector actSector = (ActivitySector) o; + AmpSector sector = SectorUtil.getAmpSector(actSector.getSectorId()); + sector.setAmpSectorId(actSector.getSectorId()); + indicator.getSectors().add(sector); + } } if (indicator.getSectors() == null diff --git a/amp/WEB-INF/src/org/digijava/module/aim/action/Login.java b/amp/WEB-INF/src/org/digijava/module/aim/action/Login.java index 8d6296753c9..940fbfe5be6 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/action/Login.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/action/Login.java @@ -154,15 +154,21 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, user1.setId(lForm.getUserId().split("@")[0]); data.setUser(user1); truLoginRequest.setData(data); - Mono truResp = loginToTruBudget(truLoginRequest); - truResp.subscribe(truLoginResponse -> logger.info("Trubudget login response: "+truLoginResponse)); + try { + Mono truResp = loginToTruBudget(truLoginRequest); + truResp.subscribe(truLoginResponse -> logger.info("Trubudget login response: "+truLoginResponse)); + }catch (Exception e) + { + logger.info("Trubudget login: "+e.getMessage(),e); + } + Collection members = TeamMemberUtil.getTeamMembers(lForm.getUserId()); if (members == null || members.size() == 0) { if (siteAdmin == true) { // user is a site admin // set the session variable 'ampAdmin' to the value 'yes' - session.setAttribute("ampAdmin", new String("yes")); + session.setAttribute("ampAdmin", "yes"); // create a TeamMember object and set it to a session variabe 'currentMember' TeamMember tm = new TeamMember(usr); tm.setTeamName(TranslatorWorker.translateText("AMP Administrator")); diff --git a/amp/WEB-INF/src/org/digijava/module/aim/auth/AmpPostLoginAction.java b/amp/WEB-INF/src/org/digijava/module/aim/auth/AmpPostLoginAction.java index 37bbdf2df86..a6a3d0f1f0b 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/auth/AmpPostLoginAction.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/auth/AmpPostLoginAction.java @@ -25,6 +25,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.PrintWriter; +import java.util.Objects; import static org.digijava.module.um.util.DbUtil.loginToTruBudget; @@ -56,6 +57,7 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, } catch(DgException ex) { throw new RuntimeException(ex); } + //login into TruBudget TruLoginRequest truLoginRequest = new TruLoginRequest(); truLoginRequest.setApiVersion("1.0"); TruLoginRequest.Data data = new TruLoginRequest.Data(); @@ -65,7 +67,14 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, data.setUser(user1); truLoginRequest.setData(data); Mono truResp = loginToTruBudget(truLoginRequest); - truResp.subscribe(truLoginResponse -> logger.info("Trubudget login response: "+truLoginResponse)); + try { + TruLoginResponse truLoginResponse = truResp.block(); + // TODO: 8/29/23 -- this token to be used for TruBudget requests in Login.java and AmpPostLoginAction.java + logger.info("Trubudget login response: " + Objects.requireNonNull(truLoginResponse).getData()); + }catch (Exception e) + { + logger.info("Error during login: "+e.getMessage(),e); + } From 675bc2db4a18bfc3fc60b1cf569661c75752ff50 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Tue, 29 Aug 2023 18:37:20 +0300 Subject: [PATCH 013/307] AMP-30711 Add login and register to trubudget --- .../components/features/sections/AmpMEFormSectionFeature.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/sections/AmpMEFormSectionFeature.java b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/sections/AmpMEFormSectionFeature.java index a22c4cece11..ff57ff78bff 100644 --- a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/sections/AmpMEFormSectionFeature.java +++ b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/sections/AmpMEFormSectionFeature.java @@ -170,10 +170,6 @@ public Object getDisplayValue(Object object) { } }; add(new AmpSelectFieldPanel("indType", new PropertyModel<>(newInd, "type"), typeCol, "Type", false, true, cr)); - - - - final AmpClassificationConfiguration sectorClassification = SectorUtil.getPrimaryConfigClassification(); final IModel> sectorSetModel = new PropertyModel<>( From 752ba013a1040986fc2a04f3b65d92a0fe4dcc5f Mon Sep 17 00:00:00 2001 From: brianbrix Date: Wed, 30 Aug 2023 22:22:15 +0300 Subject: [PATCH 014/307] AMP-30711 Add login and register to trubudget --- .../aim/dbentity/AmpGlobalSettings.hbm.xml | 5 ++- .../aim/startup/AMPStartupListener.java | 39 +++++++++++-------- amp/pom.xml | 2 +- 3 files changed, 27 insertions(+), 19 deletions(-) diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGlobalSettings.hbm.xml b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGlobalSettings.hbm.xml index 9ff39ace6b7..96249d9f435 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGlobalSettings.hbm.xml +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGlobalSettings.hbm.xml @@ -8,16 +8,17 @@ amp_global_settings_seq - + - + + diff --git a/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java b/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java index 7c355f3bfe4..c403208563e 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java @@ -103,18 +103,18 @@ public void contextInitializedInternal(ServletContextEvent sce) { try { ampContext = sce.getServletContext(); SERVLET_CONTEXT_ROOT_REAL_PATH = ampContext.getRealPath("/"); - ampContext.setAttribute(Constants.ME_FEATURE, new Boolean(true)); - ampContext.setAttribute(Constants.AA_FEATURE, new Boolean(true)); - ampContext.setAttribute(Constants.PI_FEATURE, new Boolean(true)); - ampContext.setAttribute(Constants.CL_FEATURE, new Boolean(true)); - ampContext.setAttribute(Constants.DC_FEATURE, new Boolean(true)); - ampContext.setAttribute(Constants.SC_FEATURE, new Boolean(true)); - ampContext.setAttribute(Constants.MS_FEATURE, new Boolean(true)); - ampContext.setAttribute(Constants.LB_FEATURE, new Boolean(true)); - ampContext.setAttribute(Constants.SA_FEATURE, new Boolean(true)); + ampContext.setAttribute(Constants.ME_FEATURE, Boolean.TRUE); + ampContext.setAttribute(Constants.AA_FEATURE, Boolean.TRUE); + ampContext.setAttribute(Constants.PI_FEATURE, Boolean.TRUE); + ampContext.setAttribute(Constants.CL_FEATURE, Boolean.TRUE); + ampContext.setAttribute(Constants.DC_FEATURE, Boolean.TRUE); + ampContext.setAttribute(Constants.SC_FEATURE, Boolean.TRUE); + ampContext.setAttribute(Constants.MS_FEATURE, Boolean.TRUE); + ampContext.setAttribute(Constants.LB_FEATURE, Boolean.TRUE); + ampContext.setAttribute(Constants.SA_FEATURE, Boolean.TRUE); if (FeaturesUtil.getDefaultFlag() != null) - ampContext.setAttribute(Constants.DEF_FLAG_EXIST, new Boolean(true)); + ampContext.setAttribute(Constants.DEF_FLAG_EXIST, Boolean.TRUE); AmpReportsSchema.getInstance().maintainDescriptions(); @@ -154,7 +154,7 @@ public void contextInitializedInternal(ServletContextEvent sce) { PermissionUtil.getAvailableGates(ampContext); // initialize permissible simple name singleton - GatePermConst.availablePermissiblesBySimpleNames = new Hashtable(); + GatePermConst.availablePermissiblesBySimpleNames = new Hashtable<>(); for (int i = 0; i < GatePermConst.availablePermissibles.length; i++) { GatePermConst.availablePermissiblesBySimpleNames.put( GatePermConst.availablePermissibles[i].getSimpleName(), @@ -175,9 +175,7 @@ public void contextInitializedInternal(ServletContextEvent sce) { logger.info("loading the activity->pledge view twins configuration and checking for consistency..."); int a = PledgesToActivitiesBridge.ACTIVITY_VIEW_TO_PLEDGE_VIEW.size(); - if (a < 0) - throw new RuntimeException("should not happen!"); - + logger.info("loading the column ancestorship relationships and checking for consistency with the database..."); logger.info("loaded relationships for " + ARDimension.columnAncestors.size() + " columns"); // DO NOT DELETE THIS LINE! it has the sideeffect of checking database for consistency (else it will crash anyway at the first run report) @@ -191,7 +189,8 @@ public void contextInitializedInternal(ServletContextEvent sce) { importGazeteer(); registerEhCacheMBeans(); initAPI(); - testWebClient(); +// testWebClient(); + runQuery(); new SwaggerConfigurer().configure(); @@ -216,7 +215,7 @@ public void testWebClient() } - public void runQuery() + public static void runQuery() { logger.info("Creating trubudget relations"); Session session = PersistenceManager.openNewSession(); @@ -277,6 +276,14 @@ public void runQuery() " PRIMARY KEY (user_id, trubudget_intent_id)\n" + ");"; statement.executeUpdate(relationSql); + String insertIntoGlobalSettings="INSERT INTO amp_global_settings(settingsname,settingsvalue,possiblevalues,description,section,value_translatable,internal)" + + "VALUES\n" + + " ('isEnabled','true','t_Boolean','Is Trubudget enabled for this deployment','trubudget',NULL,'true'),"+ + " ('baseUrl','http://localhost:8080/api/','','Trubudget base url','trubudget',NULL,'true'),"+ + " ('rootUser','root','','Trubudget username for root user','trubudget',NULL,'true'),"+ + "('rootPassword','root-secret','','Trubudget password for root user','trubudget',NULL,'true'),"+ + "('organization','KfW','','Organization name to be used for this deployment','trubudget',NULL,'true') ON CONFLICT (settingsname,section) DO NOTHING"; +// statement.executeUpdate(insertIntoGlobalSettings); } catch (SQLException e) { // Handle the exception e.printStackTrace(); diff --git a/amp/pom.xml b/amp/pom.xml index b2e08e02c97..4b63491651d 100644 --- a/amp/pom.xml +++ b/amp/pom.xml @@ -609,7 +609,7 @@ org.springframework spring-webflux - 5.3.29 + 5.3.28 From 93d6fe866e4ff380e78edc8fa2b7313dbaa0ef35 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Wed, 30 Aug 2023 22:39:56 +0300 Subject: [PATCH 015/307] AMP-30711 Add login and register to trubudget --- .../src/org/digijava/module/aim/startup/AMPStartupListener.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java b/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java index c403208563e..919f34f0bca 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java @@ -190,7 +190,7 @@ public void contextInitializedInternal(ServletContextEvent sce) { registerEhCacheMBeans(); initAPI(); // testWebClient(); - runQuery(); +// runQuery(); new SwaggerConfigurer().configure(); From 875bc345734529825ac361f1ba80850012582d6c Mon Sep 17 00:00:00 2001 From: brianbrix Date: Wed, 30 Aug 2023 22:40:45 +0300 Subject: [PATCH 016/307] AMP-30711 Add login and register to trubudget --- .../digijava/module/aim/startup/AMPStartupListener.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java b/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java index 919f34f0bca..489c546d31a 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java @@ -116,7 +116,13 @@ public void contextInitializedInternal(ServletContextEvent sce) { if (FeaturesUtil.getDefaultFlag() != null) ampContext.setAttribute(Constants.DEF_FLAG_EXIST, Boolean.TRUE); - AmpReportsSchema.getInstance().maintainDescriptions(); + try { + AmpReportsSchema.getInstance().maintainDescriptions(); + + }catch (Exception e) + { + logger.info("Error: "+e.getMessage(),e); + } AmpTreeVisibility ampTreeVisibility = new AmpTreeVisibility(); // get the default amp template From 2402eef07229feb9aee4bb2bfe5200c768a09efc Mon Sep 17 00:00:00 2001 From: brianbrix Date: Wed, 30 Aug 2023 22:48:43 +0300 Subject: [PATCH 017/307] AMP-30711 Add login and register to trubudget --- .../src/org/digijava/module/aim/startup/AMPStartupListener.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java b/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java index 489c546d31a..2a772653dfd 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java @@ -121,7 +121,7 @@ public void contextInitializedInternal(ServletContextEvent sce) { }catch (Exception e) { - logger.info("Error: "+e.getMessage(),e); + logger.info("Error occurred: "+e.getMessage(),e); } AmpTreeVisibility ampTreeVisibility = new AmpTreeVisibility(); From 6b7e4cfdfdae66d0a1788ddde1df509348025799 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Wed, 30 Aug 2023 22:54:31 +0300 Subject: [PATCH 018/307] AMP-30711 Add login and register to trubudget --- .../src/org/digijava/module/aim/startup/AMPStartupListener.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java b/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java index 2a772653dfd..c00d092b804 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java @@ -119,7 +119,7 @@ public void contextInitializedInternal(ServletContextEvent sce) { try { AmpReportsSchema.getInstance().maintainDescriptions(); - }catch (Exception e) + }catch (Throwable e) { logger.info("Error occurred: "+e.getMessage(),e); } From c2bc0e5d57a457ff274e536afb9fc4631448ec82 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Wed, 30 Aug 2023 23:09:59 +0300 Subject: [PATCH 019/307] AMP-30711 Add login and register to trubudget --- amp/WEB-INF/src/hibernate.cfg.xml | 2 +- .../amp/nireports/amp/AmpReportsSchema.java | 8 +++++++- .../module/aim/startup/AMPStartupListener.java | 17 +++++++---------- 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/amp/WEB-INF/src/hibernate.cfg.xml b/amp/WEB-INF/src/hibernate.cfg.xml index e19df507746..6e1b5418576 100644 --- a/amp/WEB-INF/src/hibernate.cfg.xml +++ b/amp/WEB-INF/src/hibernate.cfg.xml @@ -16,7 +16,7 @@ org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory true true - true + false false 20 true diff --git a/amp/WEB-INF/src/org/dgfoundation/amp/nireports/amp/AmpReportsSchema.java b/amp/WEB-INF/src/org/dgfoundation/amp/nireports/amp/AmpReportsSchema.java index f9da314bb7d..f55f9cc0806 100644 --- a/amp/WEB-INF/src/org/dgfoundation/amp/nireports/amp/AmpReportsSchema.java +++ b/amp/WEB-INF/src/org/dgfoundation/amp/nireports/amp/AmpReportsSchema.java @@ -358,7 +358,13 @@ protected AmpReportsSchema() { no_dimension(ColumnConstants.DESCRIPTION_OF_COMPONENT_FUNDING, "v_component_funding_description"); degenerate_dimension(ColumnConstants.DISASTER_RESPONSE_MARKER, "v_disaster_response_marker", boolDimension); - no_entity(ColumnConstants.DISBURSEMENT_ID, "v_disbursement_id"); + try { + no_entity(ColumnConstants.DISBURSEMENT_ID, "v_disbursement_id"); + + }catch (Exception e) + { + logger.info("Error occurred: "+e.getMessage(),e); + } no_dimension(ColumnConstants.DONOR_CONTACT_ORGANIZATION, "v_donor_cont_org"); no_entity(ColumnConstants.ENVIRONMENT, "v_environment", DG_EDITOR_POSTPROCESSOR); no_entity(ColumnConstants.EQUAL_OPPORTUNITY, "v_equalopportunity", DG_EDITOR_POSTPROCESSOR); diff --git a/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java b/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java index c00d092b804..768d5e69b31 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java @@ -116,13 +116,10 @@ public void contextInitializedInternal(ServletContextEvent sce) { if (FeaturesUtil.getDefaultFlag() != null) ampContext.setAttribute(Constants.DEF_FLAG_EXIST, Boolean.TRUE); - try { + AmpReportsSchema.getInstance().maintainDescriptions(); - }catch (Throwable e) - { - logger.info("Error occurred: "+e.getMessage(),e); - } + AmpTreeVisibility ampTreeVisibility = new AmpTreeVisibility(); // get the default amp template @@ -284,11 +281,11 @@ public static void runQuery() statement.executeUpdate(relationSql); String insertIntoGlobalSettings="INSERT INTO amp_global_settings(settingsname,settingsvalue,possiblevalues,description,section,value_translatable,internal)" + "VALUES\n" + - " ('isEnabled','true','t_Boolean','Is Trubudget enabled for this deployment','trubudget',NULL,'true'),"+ - " ('baseUrl','http://localhost:8080/api/','','Trubudget base url','trubudget',NULL,'true'),"+ - " ('rootUser','root','','Trubudget username for root user','trubudget',NULL,'true'),"+ - "('rootPassword','root-secret','','Trubudget password for root user','trubudget',NULL,'true'),"+ - "('organization','KfW','','Organization name to be used for this deployment','trubudget',NULL,'true') ON CONFLICT (settingsname,section) DO NOTHING"; + " (nextval('amp_global_settings_seq'),'isEnabled','true','t_Boolean','Is Trubudget enabled for this deployment','trubudget',NULL,'true'),"+ + " (nextval('amp_global_settings_seq'),'baseUrl','http://localhost:8080/api/','','Trubudget base url','trubudget',NULL,'true'),"+ + " (nextval('amp_global_settings_seq'),'rootUser','root','','Trubudget username for root user','trubudget',NULL,'true'),"+ + "(nextval('amp_global_settings_seq'),'rootPassword','root-secret','','Trubudget password for root user','trubudget',NULL,'true'),"+ + "(nextval('amp_global_settings_seq'),'organization','KfW','','Organization name to be used for this deployment','trubudget',NULL,'true') ON CONFLICT (settingsname,section) DO NOTHING"; // statement.executeUpdate(insertIntoGlobalSettings); } catch (SQLException e) { // Handle the exception From 085b7ef438eea2124f7985a4ce4b6624d9b659a1 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Wed, 30 Aug 2023 23:19:41 +0300 Subject: [PATCH 020/307] AMP-30711 Add login and register to trubudget --- .../amp/nireports/amp/AmpReportsSchema.java | 765 +++++++++--------- 1 file changed, 383 insertions(+), 382 deletions(-) diff --git a/amp/WEB-INF/src/org/dgfoundation/amp/nireports/amp/AmpReportsSchema.java b/amp/WEB-INF/src/org/dgfoundation/amp/nireports/amp/AmpReportsSchema.java index f55f9cc0806..2567d3b3393 100644 --- a/amp/WEB-INF/src/org/dgfoundation/amp/nireports/amp/AmpReportsSchema.java +++ b/amp/WEB-INF/src/org/dgfoundation/amp/nireports/amp/AmpReportsSchema.java @@ -324,393 +324,394 @@ public static AmpReportsSchema getInstance() { * the constructor defines all the columns and measures of the schema. Since this involves scanning the database quite a lot, this constructor is SLOW */ protected AmpReportsSchema() { - single_dimension(ColumnConstants.PROJECT_TITLE, "v_titles", ACT_LEVEL_COLUMN); - no_dimension(ColumnConstants.ACTIVITY_ID, "v_activity_ids"); - no_dimension(ColumnConstants.TEAM, "v_teams"); - no_entity(ColumnConstants.OBJECTIVE, "v_objectives", DG_EDITOR_POSTPROCESSOR); - no_entity(ColumnConstants.MULTI_STAKEHOLDER_PARTNERS, "v_multi_stakeholder_partners", DG_EDITOR_POSTPROCESSOR); - no_dimension(ColumnConstants.ISSUES, "v_issues"); - date_column(ColumnConstants.ISSUE_DATE, "v_issue_date"); - - no_dimension(ColumnConstants.ACTIVITY_PLEDGES_TITLE, "v_activity_pledges_title"); - no_dimension(ColumnConstants.ACTIVITY_UPDATED_BY, "v_activity_modified_by"); - no_dimension(ColumnConstants.ACTORS, "v_actors"); - - single_dimension(ColumnConstants.AGREEMENT_CODE, "v_agreement_code", AGR_LEVEL_COLUMN); - single_dimension(ColumnConstants.AGREEMENT_TITLE_CODE, "v_agreement_title_code", AGR_LEVEL_COLUMN); - date_column(ColumnConstants.AGREEMENT_CLOSE_DATE, "v_agreement_close_date", AGR_LEVEL_COLUMN); - date_column(ColumnConstants.AGREEMENT_SIGNATURE_DATE, "v_agreement_signature_date", AGR_LEVEL_COLUMN); - date_column(ColumnConstants.AGREEMENT_EFFECTIVE_DATE, "v_agreement_effective_date", AGR_LEVEL_COLUMN); - date_column(ColumnConstants.AGREEMENT_PARLIAMENTARY_APPROVAL_DATE, "v_agreement_parlimentary_date", AGR_LEVEL_COLUMN); - - no_dimension(ColumnConstants.AMP_ID, "v_amp_id"); - single_dimension(ColumnConstants.BUDGET_ORGANIZATION, "v_budget_organization", RAW_ORG_LEVEL_COLUMN); - single_dimension(ColumnConstants.BUDGET_PROGRAM, "v_budget_program", RAW_PRG_LEVEL_COLUMN); - degenerate_dimension(ColumnConstants.BUDGET_STRUCTURE, "v_budget_structure", boolDimension); - - no_dimension(ColumnConstants.COMPONENT_DESCRIPTION, "v_component_description"); - single_dimension(ColumnConstants.COMPONENT_FUNDING_ORGANIZATION, - "v_component_funding_organization_name", CFO_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); - single_dimension(ColumnConstants.COMPONENT_SECOND_RESPONSIBLE_ORGANIZATION, - "v_component_second_responsible_organization_name", CSRO_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); - degenerate_dimension(ColumnConstants.COMPONENT_NAME, "v_components", COMPS_DIMENSION); - degenerate_dimension(ColumnConstants.COMPONENT_TYPE, "v_component_type", COMP_TYPES_DIMENSION); - no_dimension(ColumnConstants.DESCRIPTION_OF_COMPONENT_FUNDING, "v_component_funding_description"); - - degenerate_dimension(ColumnConstants.DISASTER_RESPONSE_MARKER, "v_disaster_response_marker", boolDimension); try { + single_dimension(ColumnConstants.PROJECT_TITLE, "v_titles", ACT_LEVEL_COLUMN); + no_dimension(ColumnConstants.ACTIVITY_ID, "v_activity_ids"); + no_dimension(ColumnConstants.TEAM, "v_teams"); + no_entity(ColumnConstants.OBJECTIVE, "v_objectives", DG_EDITOR_POSTPROCESSOR); + no_entity(ColumnConstants.MULTI_STAKEHOLDER_PARTNERS, "v_multi_stakeholder_partners", DG_EDITOR_POSTPROCESSOR); + no_dimension(ColumnConstants.ISSUES, "v_issues"); + date_column(ColumnConstants.ISSUE_DATE, "v_issue_date"); + + no_dimension(ColumnConstants.ACTIVITY_PLEDGES_TITLE, "v_activity_pledges_title"); + no_dimension(ColumnConstants.ACTIVITY_UPDATED_BY, "v_activity_modified_by"); + no_dimension(ColumnConstants.ACTORS, "v_actors"); + + single_dimension(ColumnConstants.AGREEMENT_CODE, "v_agreement_code", AGR_LEVEL_COLUMN); + single_dimension(ColumnConstants.AGREEMENT_TITLE_CODE, "v_agreement_title_code", AGR_LEVEL_COLUMN); + date_column(ColumnConstants.AGREEMENT_CLOSE_DATE, "v_agreement_close_date", AGR_LEVEL_COLUMN); + date_column(ColumnConstants.AGREEMENT_SIGNATURE_DATE, "v_agreement_signature_date", AGR_LEVEL_COLUMN); + date_column(ColumnConstants.AGREEMENT_EFFECTIVE_DATE, "v_agreement_effective_date", AGR_LEVEL_COLUMN); + date_column(ColumnConstants.AGREEMENT_PARLIAMENTARY_APPROVAL_DATE, "v_agreement_parlimentary_date", AGR_LEVEL_COLUMN); + + no_dimension(ColumnConstants.AMP_ID, "v_amp_id"); + single_dimension(ColumnConstants.BUDGET_ORGANIZATION, "v_budget_organization", RAW_ORG_LEVEL_COLUMN); + single_dimension(ColumnConstants.BUDGET_PROGRAM, "v_budget_program", RAW_PRG_LEVEL_COLUMN); + degenerate_dimension(ColumnConstants.BUDGET_STRUCTURE, "v_budget_structure", boolDimension); + + no_dimension(ColumnConstants.COMPONENT_DESCRIPTION, "v_component_description"); + single_dimension(ColumnConstants.COMPONENT_FUNDING_ORGANIZATION, + "v_component_funding_organization_name", CFO_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); + single_dimension(ColumnConstants.COMPONENT_SECOND_RESPONSIBLE_ORGANIZATION, + "v_component_second_responsible_organization_name", CSRO_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); + degenerate_dimension(ColumnConstants.COMPONENT_NAME, "v_components", COMPS_DIMENSION); + degenerate_dimension(ColumnConstants.COMPONENT_TYPE, "v_component_type", COMP_TYPES_DIMENSION); + no_dimension(ColumnConstants.DESCRIPTION_OF_COMPONENT_FUNDING, "v_component_funding_description"); + + degenerate_dimension(ColumnConstants.DISASTER_RESPONSE_MARKER, "v_disaster_response_marker", boolDimension); + no_entity(ColumnConstants.DISBURSEMENT_ID, "v_disbursement_id"); - }catch (Exception e) + no_dimension(ColumnConstants.DONOR_CONTACT_ORGANIZATION, "v_donor_cont_org"); + no_entity(ColumnConstants.ENVIRONMENT, "v_environment", DG_EDITOR_POSTPROCESSOR); + no_entity(ColumnConstants.EQUAL_OPPORTUNITY, "v_equalopportunity", DG_EDITOR_POSTPROCESSOR); + no_entity(ColumnConstants.ISSUES___MEASURES___ACTORS, "v_issues_measure_actors", DG_EDITOR_POSTPROCESSOR); + degenerate_dimension(ColumnConstants.EXPENDITURE_CLASS, "v_expenditure_class", catsDimension); + degenerate_dimension(ColumnConstants.FINANCIAL_INSTRUMENT, "v_financial_instrument", catsDimension); + degenerate_dimension(ColumnConstants.FINANCING_INSTRUMENT, "v_financing_instrument", catsDimension); + degenerate_dimension(ColumnConstants.FUNDING_STATUS, "v_funding_status", catsDimension); + degenerate_dimension(ColumnConstants.HUMANITARIAN_AID, "v_humanitarian_aid", boolDimension); + degenerate_dimension(ColumnConstants.MULTI_STAKEHOLDER_PARTNERSHIP, "v_multi_stakeholder_partnership", + boolDimension); + degenerate_dimension(ColumnConstants.IMPLEMENTATION_LEVEL, "v_implementation_level", catsDimension); + degenerate_dimension(ColumnConstants.PERFORMANCE_ALERT_TYPE, "v_performance_alert_type", + PERF_TYPE_DIM, PERFORMANCE_ALERT_POSTPROCESSOR); + degenerate_dimension(ColumnConstants.PERFORMANCE_ALERT_LEVEL, "v_performance_alert_level", catsDimension); + degenerate_dimension(ColumnConstants.INDIRECT_ON_BUDGET, "v_indirect_on_budget", boolDimension); + degenerate_dimension(ColumnConstants.INSTITUTIONS, "v_institutions", catsDimension, true); + no_dimension(ColumnConstants.LINE_MINISTRY_OBSERVATIONS, "v_line_ministry_observations"); + no_dimension(ColumnConstants.LINE_MINISTRY_OBSERVATIONS_ACTORS, "v_line_ministry_observations_actors"); + date_column(ColumnConstants.LINE_MINISTRY_OBSERVATIONS_DATE, "v_line_ministry_observations_date"); + no_dimension(ColumnConstants.LINE_MINISTRY_OBSERVATIONS_MEASURES, "v_line_ministry_observations_measures"); + no_dimension(ColumnConstants.MEASURES_TAKEN, "v_measures_taken"); + no_entity(ColumnConstants.MINORITIES, "v_minorities", DG_EDITOR_POSTPROCESSOR); + degenerate_dimension(ColumnConstants.MODALITIES, "v_modalities", catsDimension, true); + degenerate_dimension(ColumnConstants.MODE_OF_PAYMENT, "v_mode_of_payment", catsDimension); + degenerate_dimension(ColumnConstants.ACTIVITY_BUDGET, "v_activity_budget", catsDimension, true); + no_dimension(ColumnConstants.ORGANIZATIONS_AND_PROJECT_ID, "v_project_id"); + degenerate_dimension(ColumnConstants.PAYMENT_CAPITAL___RECURRENT, "v_mode_of_payment_capital_recurrent", catsDimension); + degenerate_dimension(ColumnConstants.PROCUREMENT_SYSTEM, "v_procurement_system", catsDimension, true); + degenerate_dimension(ColumnConstants.PROJECT_CATEGORY, "v_project_category", catsDimension, true); + no_entity(ColumnConstants.PROJECT_COMMENTS, "v_project_comments", DG_EDITOR_POSTPROCESSOR); + no_entity(ColumnConstants.PROJECT_DESCRIPTION, "v_description", DG_EDITOR_POSTPROCESSOR); + no_entity(ColumnConstants.PROJECT_IMPACT, "v_proj_impact", DG_EDITOR_POSTPROCESSOR); + no_entity(ColumnConstants.RESULTS, "v_results", DG_EDITOR_POSTPROCESSOR); + no_entity(ColumnConstants.PURPOSE, "v_purposes", DG_EDITOR_POSTPROCESSOR); + no_entity(ColumnConstants.PROGRAM_DESCRIPTION, "v_program_description", DG_EDITOR_POSTPROCESSOR); + + addIndicatorColumns(); + + degenerate_dimension(ColumnConstants.PROJECT_IMPLEMENTING_UNIT, "v_project_impl_unit", catsDimension); + no_entity(ColumnConstants.PROJECT_MANAGEMENT, "v_project_management", DG_EDITOR_POSTPROCESSOR); + no_dimension(ColumnConstants.REGIONAL_OBSERVATIONS, "v_regional_observations"); + no_dimension(ColumnConstants.REGIONAL_OBSERVATIONS_ACTORS, "v_regional_observations_actors"); + date_column(ColumnConstants.REGIONAL_OBSERVATIONS_DATE, "v_regional_observations_date"); + no_dimension(ColumnConstants.REGIONAL_OBSERVATIONS_MEASURES, "v_regional_observations_measures"); + + single_dimension(ColumnConstants.RELATED_PLEDGES, "v_related_pledges", PLEDGES_LEVEL_COLUMN); + + single_dimension(ColumnConstants.RELATED_PROJECTS, "v_ni_pledges_projects", ACT_LEVEL_COLUMN); + no_dimension(ColumnConstants.SECTOR_MINISTRY_CONTACT_ORGANIZATION, "v_sect_min_cont_org"); + degenerate_dimension(ColumnConstants.SSC_MODALITIES, "v_ssc_modalities", catsDimension); + degenerate_dimension(ColumnConstants.STATUS, "v_status", catsDimension, true); + no_dimension(ColumnConstants.STRUCTURES_COLUMN, "v_structures"); + degenerate_dimension(ColumnConstants.TYPE_OF_ASSISTANCE, "v_terms_assist", catsDimension); + degenerate_dimension(ColumnConstants.TYPE_OF_COOPERATION, "v_type_of_cooperation", catsDimension); + degenerate_dimension(ColumnConstants.TYPE_OF_IMPLEMENTATION, "v_type_of_implementation", catsDimension, + true); + no_dimension(ColumnConstants.APPROVAL_STATUS, "v_approval_status"); + degenerate_dimension(ColumnConstants.CONCESSIONALITY_LEVEL, "v_concessionality_level", catsDimension); + no_dimension(ColumnConstants.VALIDATION_STATUS, "v_validation_status"); + + degenerate_dimension(ColumnConstants.FUNDING_ID, "v_funding_id", fundingDimension); + + // views with only 2 columns + no_entity(ColumnConstants.DRAFT, "v_drafts"); + degenerate_dimension(ColumnConstants.AC_CHAPTER, "v_ac_chapters", catsDimension, true); + degenerate_dimension(ColumnConstants.ACCESSION_INSTRUMENT, "v_accession_instruments", catsDimension, true); + degenerate_dimension(ColumnConstants.ACTIVITY_CREATED_BY, "v_activity_creator", usersDimension); + no_entity(ColumnConstants.SUB_PROGRAM, "v_activity_subprogram"); + no_entity(ColumnConstants.AUDIT_SYSTEM, "v_audit_system", true); + no_entity(ColumnConstants.BUDGET_CODE_PROJECT_ID, "v_budget_code_project_id"); + degenerate_dimension(ColumnConstants.BUDGET_DEPARTMENT, "v_budget_department", departmentsDimension); + single_dimension(ColumnConstants.BUDGET_SECTOR, "v_budget_sector", RAW_SCT_LEVEL_COLUMN); + degenerate_dimension(ColumnConstants.CAPITAL_EXPENDITURE, "v_capital_and_exp", boolDimension); + no_entity(ColumnConstants.CRIS_NUMBER, "v_cris_number"); + no_entity(ColumnConstants.IATI_IDENTIFIER, "v_iati_identifier"); + no_entity(ColumnConstants.CURRENT_COMPLETION_DATE_COMMENTS, "v_actual_completion_date_comments"); + no_entity(ColumnConstants.DONOR_CONTACT_EMAIL, "v_donor_cont_email"); + no_entity(ColumnConstants.DONOR_CONTACT_FAX, "v_donor_cont_fax"); + no_entity(ColumnConstants.DONOR_CONTACT_NAME, "v_donor_cont_name"); + no_entity(ColumnConstants.DONOR_CONTACT_PHONE, "v_donor_cont_phone"); + no_entity(ColumnConstants.DONOR_CONTACT_TITLE, "v_donor_cont_title"); + no_entity(ColumnConstants.FINAL_DATE_FOR_DISBURSEMENTS_COMMENTS, "v_disbursements_date_comments"); + no_entity(ColumnConstants.FUNDING_ORGANIZATION_ID, "v_funding_org_id"); + no_entity(ColumnConstants.FY, "v_budget_extras_fy"); + + no_entity(ColumnConstants.GOVERNMENT_AGREEMENT_NUMBER, "v_gov_agreement_number"); + no_entity(ColumnConstants.GPI_1_Q6, "v_ni_gpi_indicator_1_q6"); + no_entity(ColumnConstants.GPI_1_Q6_DESCRIPTION, "v_ni_gpi_indicator_1_q6_description"); + no_entity(ColumnConstants.GPI_1_Q7, "v_ni_gpi_indicator_1_q7"); + no_entity(ColumnConstants.GPI_1_Q8, "v_ni_gpi_indicator_1_q8"); + no_entity(ColumnConstants.GPI_1_Q9, "v_ni_gpi_indicator_1_q9"); + no_entity(ColumnConstants.GPI_1_Q10, "v_ni_gpi_indicator_1_q10"); + no_entity(ColumnConstants.GPI_1_Q10_DESCRIPTION, "v_ni_gpi_indicator_1_q10_description"); + degenerate_dimension(ColumnConstants.HAS_EXECUTING_AGENCY, "v_has_executing_agency", boolDimension); + no_entity(ColumnConstants.IMPLEMENTING_EXECUTING_AGENCY_CONTACT_EMAIL, "v_impl_ex_cont_email"); + no_entity(ColumnConstants.IMPLEMENTING_EXECUTING_AGENCY_CONTACT_FAX, "v_impl_ex_cont_fax"); + no_entity(ColumnConstants.IMPLEMENTING_EXECUTING_AGENCY_CONTACT_NAME, "v_impl_ex_cont_name"); + no_entity(ColumnConstants.IMPLEMENTING_EXECUTING_AGENCY_CONTACT_ORGANIZATION, "v_impl_ex_cont_org"); + no_entity(ColumnConstants.IMPLEMENTING_EXECUTING_AGENCY_CONTACT_PHONE, "v_impl_ex_cont_phone"); + no_entity(ColumnConstants.IMPLEMENTING_EXECUTING_AGENCY_CONTACT_TITLE, "v_impl_ex_cont_title"); + degenerate_dimension(ColumnConstants.JOINT_CRITERIA, "v_yes_no_joint_criteria", boolDimension); + degenerate_dimension(ColumnConstants.GOVERNMENT_APPROVAL_PROCEDURES, "v_yes_no_government_approval_proc", boolDimension); + no_entity(ColumnConstants.MINISTRY_CODE, "v_minsitry_code"); + no_entity(ColumnConstants.MINISTRY_OF_FINANCE_CONTACT_EMAIL, "v_mofed_cont_email"); + no_entity(ColumnConstants.MINISTRY_OF_FINANCE_CONTACT_FAX, "v_mofed_cont_fax"); + no_entity(ColumnConstants.MINISTRY_OF_FINANCE_CONTACT_NAME, "v_mofed_cont_name"); + no_entity(ColumnConstants.MINISTRY_OF_FINANCE_CONTACT_ORGANIZATION, "v_mofed_cont_org"); + no_entity(ColumnConstants.MINISTRY_OF_FINANCE_CONTACT_PHONE, "v_mofed_cont_phone"); + no_entity(ColumnConstants.MINISTRY_OF_FINANCE_CONTACT_TITLE, "v_mofed_cont_title"); + degenerate_dimension(ColumnConstants.MULTI_DONOR, "v_multi_donor", boolDimension); + no_entity(ColumnConstants.PROJECT_CODE, "v_project_code"); + no_entity(ColumnConstants.PROJECT_COORDINATOR_CONTACT_EMAIL, "v_proj_coordr_cont_email"); + no_entity(ColumnConstants.PROJECT_COORDINATOR_CONTACT_FAX, "v_proj_coordr_cont_fax"); + no_entity(ColumnConstants.PROJECT_COORDINATOR_CONTACT_NAME, "v_proj_coordr_cont_name"); + no_entity(ColumnConstants.PROJECT_COORDINATOR_CONTACT_ORGANIZATION, "v_proj_coordr_cont_org"); + no_entity(ColumnConstants.PROJECT_COORDINATOR_CONTACT_PHONE, "v_proj_coordr_cont_phone"); + no_entity(ColumnConstants.PROJECT_COORDINATOR_CONTACT_TITLE, "v_proj_coordr_cont_title"); + no_entity(ColumnConstants.PROPOSED_PROJECT_LIFE, "v_proposed_project_life"); + no_entity(ColumnConstants.REPORTING_SYSTEM, "v_reporting_system", true); + no_entity(ColumnConstants.SECTOR_MINISTRY_CONTACT_EMAIL, "v_sect_min_cont_email"); + no_entity(ColumnConstants.SECTOR_MINISTRY_CONTACT_FAX, "v_sect_min_cont_fax"); + no_entity(ColumnConstants.SECTOR_MINISTRY_CONTACT_NAME, "v_sect_min_cont_name"); + no_entity(ColumnConstants.SECTOR_MINISTRY_CONTACT_PHONE, "v_sect_min_cont_phone"); + no_entity(ColumnConstants.SECTOR_MINISTRY_CONTACT_TITLE, "v_sect_min_cont_title"); + no_entity(ColumnConstants.SUB_VOTE, "v_subvote"); + no_entity(ColumnConstants.VOTE, "v_vote"); + + single_dimension(ColumnConstants.BENEFICIARY_AGENCY__DEPARTMENT_DIVISION, "v_beneficiary_agency_info", BA_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); + single_dimension(ColumnConstants.CONTRACTING_AGENCY_DEPARTMENT_DIVISION, "v_contracting_agency_info", CA_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); + single_dimension(ColumnConstants.EXECUTING_AGENCY_DEPARTMENT_DIVISION, "v_executing_agency_info", EA_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); + single_dimension(ColumnConstants.IMPLEMENTING_AGENCY_DEPARTMENT_DIVISION, "v_implementing_agency_info", IA_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); + single_dimension(ColumnConstants.REGIONAL_GROUP_DEPARTMENT_DIVISION, "v_regional_group_info", RG_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); + single_dimension(ColumnConstants.RESPONSIBLE_ORGANIZATION_DEPARTMENT_DIVISION, "v_responsible_org_info", RO_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); + single_dimension(ColumnConstants.SECTOR_GROUP_DEPARTMENT_DIVISION, "v_sector_group_info", SG_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); + + single_dimension(ColumnConstants.DONOR_AGENCY, "v_ni_donor_orgs", DONOR_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); + single_dimension(ColumnConstants.DONOR_GROUP, "v_ni_donor_orgsgroups", DONOR_DIM_USG.getLevelColumn(LEVEL_ORGANISATION_GROUP)); + single_dimension(ColumnConstants.DONOR_TYPE, "v_ni_donor_orgstypes", DONOR_DIM_USG.getLevelColumn(LEVEL_ORGANISATION_TYPE)); + single_dimension(ColumnConstants.DONOR_BUDGET_CODE, "v_ni_donor_orgbudget_code", + DONOR_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); + single_dimension(ColumnConstants.DONOR_COUNTRY, "v_ni_donor_orgs_country", + DN_COUNTRY_DIM_USG.getLevelColumn(0)); + + single_dimension(ColumnConstants.DONOR_ACRONYM, "v_ni_donor_orgsacronyms", DONOR_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); + + with_percentage(ColumnConstants.IMPLEMENTING_AGENCY, "v_implementing_agency", IA_DIM_USG, LEVEL_ORGANISATION); + with_percentage(ColumnConstants.IMPLEMENTING_AGENCY_GROUPS, "v_implementing_agency_groups", IA_DIM_USG, LEVEL_ORGANISATION_GROUP); + with_percentage(ColumnConstants.IMPLEMENTING_AGENCY_TYPE, "v_implementing_agency_type", IA_DIM_USG, LEVEL_ORGANISATION_TYPE); + + with_percentage(ColumnConstants.BENEFICIARY_AGENCY, "v_beneficiary_agency", BA_DIM_USG, LEVEL_ORGANISATION); + with_percentage(ColumnConstants.BENEFICIARY_AGENCY_GROUPS, "v_beneficiary_agency_groups", BA_DIM_USG, LEVEL_ORGANISATION_GROUP); + with_percentage(ColumnConstants.BENEFICIARY_AGENCY_TYPE, "v_beneficiary_agency_type", BA_DIM_USG, + LEVEL_ORGANISATION_TYPE); + with_percentage(ColumnConstants.BENEFICIARY_AGENCY_COUNTRY, "v_beneficiary_agency_country", + BA_COUNTRY_DIM_USG, ADM_LEVEL_0); + + + with_percentage(ColumnConstants.EXECUTING_AGENCY, "v_executing_agency", EA_DIM_USG, LEVEL_ORGANISATION); + with_percentage(ColumnConstants.EXECUTING_AGENCY_GROUPS, "v_executing_agency_groups", EA_DIM_USG, LEVEL_ORGANISATION_GROUP); + with_percentage(ColumnConstants.EXECUTING_AGENCY_TYPE, "v_executing_agency_type", EA_DIM_USG, LEVEL_ORGANISATION_TYPE); + with_percentage(ColumnConstants.EXECUTING_AGENCY_COUNTRY, "v_executing_agency_country", + EA_COUNTRY_DIM_USG, ADM_LEVEL_0); + + with_percentage(ColumnConstants.RESPONSIBLE_ORGANIZATION, "v_responsible_organisation", RO_DIM_USG, LEVEL_ORGANISATION); + with_percentage(ColumnConstants.RESPONSIBLE_ORGANIZATION_GROUPS, "v_responsible_org_groups", RO_DIM_USG, LEVEL_ORGANISATION_GROUP); + with_percentage(ColumnConstants.RESPONSIBLE_ORGANIZATION_TYPE, "v_responsible_org_type", RO_DIM_USG, + LEVEL_ORGANISATION_TYPE); + + with_percentage(ColumnConstants.CONTRACTING_AGENCY, "v_contracting_agency", CA_DIM_USG, LEVEL_ORGANISATION); + single_dimension(ColumnConstants.CONTRACTING_AGENCY_ACRONYM, "v_contracting_agency_acronym", CA_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); + with_percentage(ColumnConstants.CONTRACTING_AGENCY_GROUPS, "v_contracting_agency_groups", CA_DIM_USG, LEVEL_ORGANISATION_GROUP); + with_percentage(ColumnConstants.CONTRACTING_AGENCY_TYPE, "v_contracting_agency_type", CA_DIM_USG, + LEVEL_ORGANISATION_TYPE); + + with_percentage(ColumnConstants.REGIONAL_GROUP, "v_regional_group", RG_DIM_USG, LEVEL_ORGANISATION_GROUP); + + with_percentage(ColumnConstants.SECTOR_GROUP, "v_sector_group", SG_DIM_USG, LEVEL_ORGANISATION_GROUP); + + single_dimension(ColumnConstants.PRIMARY_SECTOR_CODE_OFFICIAL, "v_sector_code_official", PS_DIM_USG + .getLevelColumn(LEVEL_ROOT)); + with_percentage(ColumnConstants.PRIMARY_SECTOR, "v_sectors", PS_DIM_USG, LEVEL_ROOT); + with_percentage(ColumnConstants.PRIMARY_SECTOR_SUB_SECTOR, "v_sub_sectors", PS_DIM_USG, LEVEL_SUBSECTOR); + with_percentage(ColumnConstants.PRIMARY_SECTOR_SUB_SUB_SECTOR, "v_sub_sub_sectors", PS_DIM_USG, LEVEL_SUBSUBSECTOR); + + with_percentage(ColumnConstants.SECONDARY_SECTOR, "v_secondary_sectors", SS_DIM_USG, LEVEL_ROOT); + with_percentage(ColumnConstants.SECONDARY_SECTOR_SUB_SECTOR, "v_secondary_sub_sectors", SS_DIM_USG, LEVEL_SUBSECTOR); + with_percentage(ColumnConstants.SECONDARY_SECTOR_SUB_SUB_SECTOR, "v_secondary_sub_sub_sectors", SS_DIM_USG, LEVEL_SUBSUBSECTOR); + + with_percentage(ColumnConstants.TERTIARY_SECTOR, "v_tertiary_sectors", TS_DIM_USG, LEVEL_ROOT); + with_percentage(ColumnConstants.TERTIARY_SECTOR_SUB_SECTOR, "v_tertiary_sub_sectors", TS_DIM_USG, + LEVEL_SUBSECTOR); + with_percentage(ColumnConstants.TERTIARY_SECTOR_SUB_SUB_SECTOR, "v_tertiary_sub_sub_sectors", TS_DIM_USG, + LEVEL_SUBSUBSECTOR); + + with_percentage(ColumnConstants.QUATERNARY_SECTOR, "v_quaternary_sectors", Q4S_DIM_USG, LEVEL_ROOT); + with_percentage(ColumnConstants.QUATERNARY_SECTOR_SUB_SECTOR, "v_quaternary_sub_sectors", Q4S_DIM_USG, + LEVEL_SUBSECTOR); + with_percentage(ColumnConstants.QUATERNARY_SECTOR_SUB_SUB_SECTOR, "v_quaternary_sub_sub_sectors", Q4S_DIM_USG, + LEVEL_SUBSUBSECTOR); + + with_percentage(ColumnConstants.QUINARY_SECTOR, "v_quinary_sectors", Q5S_DIM_USG, LEVEL_ROOT); + with_percentage(ColumnConstants.QUINARY_SECTOR_SUB_SECTOR, "v_quinary_sub_sectors", Q5S_DIM_USG, + LEVEL_SUBSECTOR); + with_percentage(ColumnConstants.QUINARY_SECTOR_SUB_SUB_SECTOR, "v_quinary_sub_sub_sectors", Q5S_DIM_USG, + LEVEL_SUBSUBSECTOR); + + with_percentage(ColumnConstants.SECTOR_TAG, "v_sectors", TAG_S_DIM_USG, LEVEL_ROOT); + with_percentage(ColumnConstants.SECTOR_TAG_SUB_SECTOR, "v_tag_sub_sectors", TAG_S_DIM_USG, LEVEL_SUBSECTOR); + with_percentage(ColumnConstants.SECTOR_TAG_SUB_SUB_SECTOR, "v_tag_sub_sub_sectors", TAG_S_DIM_USG, + LEVEL_SUBSUBSECTOR); + + with_percentage(ColumnConstants.PRIMARY_PROGRAM_LEVEL_0, "v_primaryprogram_level_0", PP_DIM_USG, LEVEL_0); + with_percentage(ColumnConstants.PRIMARY_PROGRAM_LEVEL_1, "v_primaryprogram_level_1", PP_DIM_USG, LEVEL_1); + with_percentage(ColumnConstants.PRIMARY_PROGRAM_LEVEL_2, "v_primaryprogram_level_2", PP_DIM_USG, LEVEL_2); + with_percentage(ColumnConstants.PRIMARY_PROGRAM_LEVEL_3, "v_primaryprogram_level_3", PP_DIM_USG, LEVEL_3); + with_percentage(ColumnConstants.PRIMARY_PROGRAM_LEVEL_4, "v_primaryprogram_level_4", PP_DIM_USG, LEVEL_4); + with_percentage(ColumnConstants.PRIMARY_PROGRAM_LEVEL_5, "v_primaryprogram_level_5", PP_DIM_USG, LEVEL_5); + with_percentage(ColumnConstants.PRIMARY_PROGRAM_LEVEL_6, "v_primaryprogram_level_6", PP_DIM_USG, LEVEL_6); + with_percentage(ColumnConstants.PRIMARY_PROGRAM_LEVEL_7, "v_primaryprogram_level_7", PP_DIM_USG, LEVEL_7); + with_percentage(ColumnConstants.PRIMARY_PROGRAM_LEVEL_8, "v_primaryprogram_level_8", PP_DIM_USG, LEVEL_8); + + with_percentage(ColumnConstants.INDIRECT_PRIMARY_PROGRAM_LEVEL_0, "v_indirect_primaryprogram_level_0", + IPP_DIM_USG, LEVEL_0); + with_percentage(ColumnConstants.INDIRECT_PRIMARY_PROGRAM_LEVEL_1, "v_indirect_primaryprogram_level_1", + IPP_DIM_USG, LEVEL_1); + with_percentage(ColumnConstants.INDIRECT_PRIMARY_PROGRAM_LEVEL_2, "v_indirect_primaryprogram_level_2", + IPP_DIM_USG, LEVEL_2); + with_percentage(ColumnConstants.INDIRECT_PRIMARY_PROGRAM_LEVEL_3, "v_indirect_primaryprogram_level_3", + IPP_DIM_USG, LEVEL_3); + with_percentage(ColumnConstants.INDIRECT_PRIMARY_PROGRAM_LEVEL_4, "v_indirect_primaryprogram_level_4", + IPP_DIM_USG, LEVEL_4); + with_percentage(ColumnConstants.INDIRECT_PRIMARY_PROGRAM_LEVEL_5, "v_indirect_primaryprogram_level_5", + IPP_DIM_USG, LEVEL_5); + with_percentage(ColumnConstants.INDIRECT_PRIMARY_PROGRAM_LEVEL_6, "v_indirect_primaryprogram_level_6", + IPP_DIM_USG, LEVEL_6); + with_percentage(ColumnConstants.INDIRECT_PRIMARY_PROGRAM_LEVEL_7, "v_indirect_primaryprogram_level_7", + IPP_DIM_USG, LEVEL_7); + with_percentage(ColumnConstants.INDIRECT_PRIMARY_PROGRAM_LEVEL_8, "v_indirect_primaryprogram_level_8", + IPP_DIM_USG, LEVEL_8); + + with_percentage(ColumnConstants.SECONDARY_PROGRAM_LEVEL_0, "v_secondaryprogram_level_0", SP_DIM_USG, LEVEL_0); + with_percentage(ColumnConstants.SECONDARY_PROGRAM_LEVEL_1, "v_secondaryprogram_level_1", SP_DIM_USG, LEVEL_1); + with_percentage(ColumnConstants.SECONDARY_PROGRAM_LEVEL_2, "v_secondaryprogram_level_2", SP_DIM_USG, LEVEL_2); + with_percentage(ColumnConstants.SECONDARY_PROGRAM_LEVEL_3, "v_secondaryprogram_level_3", SP_DIM_USG, LEVEL_3); + with_percentage(ColumnConstants.SECONDARY_PROGRAM_LEVEL_4, "v_secondaryprogram_level_4", SP_DIM_USG, LEVEL_4); + with_percentage(ColumnConstants.SECONDARY_PROGRAM_LEVEL_5, "v_secondaryprogram_level_5", SP_DIM_USG, LEVEL_5); + with_percentage(ColumnConstants.SECONDARY_PROGRAM_LEVEL_6, "v_secondaryprogram_level_6", SP_DIM_USG, LEVEL_6); + with_percentage(ColumnConstants.SECONDARY_PROGRAM_LEVEL_7, "v_secondaryprogram_level_7", SP_DIM_USG, LEVEL_7); + with_percentage(ColumnConstants.SECONDARY_PROGRAM_LEVEL_8, "v_secondaryprogram_level_8", SP_DIM_USG, LEVEL_8); + + with_percentage(ColumnConstants.TERTIARY_PROGRAM_LEVEL_0, "v_tertiaryprogram_level_0", TP_DIM_USG, LEVEL_0); + with_percentage(ColumnConstants.TERTIARY_PROGRAM_LEVEL_1, "v_tertiaryprogram_level_1", TP_DIM_USG, LEVEL_1); + with_percentage(ColumnConstants.TERTIARY_PROGRAM_LEVEL_2, "v_tertiaryprogram_level_2", TP_DIM_USG, LEVEL_2); + with_percentage(ColumnConstants.TERTIARY_PROGRAM_LEVEL_3, "v_tertiaryprogram_level_3", TP_DIM_USG, LEVEL_3); + with_percentage(ColumnConstants.TERTIARY_PROGRAM_LEVEL_4, "v_tertiaryprogram_level_4", TP_DIM_USG, LEVEL_4); + with_percentage(ColumnConstants.TERTIARY_PROGRAM_LEVEL_5, "v_tertiaryprogram_level_5", TP_DIM_USG, LEVEL_5); + with_percentage(ColumnConstants.TERTIARY_PROGRAM_LEVEL_6, "v_tertiaryprogram_level_6", TP_DIM_USG, LEVEL_6); + with_percentage(ColumnConstants.TERTIARY_PROGRAM_LEVEL_7, "v_tertiaryprogram_level_7", TP_DIM_USG, LEVEL_7); + with_percentage(ColumnConstants.TERTIARY_PROGRAM_LEVEL_8, "v_tertiaryprogram_level_8", TP_DIM_USG, LEVEL_8); + + with_percentage(ColumnConstants.NATIONAL_PLANNING_OBJECTIVES_LEVEL_0, "v_nationalobjectives_level_0", + NPO_DIM_USG, LEVEL_0); + with_percentage(ColumnConstants.NATIONAL_PLANNING_OBJECTIVES_LEVEL_1, "v_nationalobjectives_level_1", NPO_DIM_USG, LEVEL_1); + with_percentage(ColumnConstants.NATIONAL_PLANNING_OBJECTIVES_LEVEL_2, "v_nationalobjectives_level_2", NPO_DIM_USG, LEVEL_2); + with_percentage(ColumnConstants.NATIONAL_PLANNING_OBJECTIVES_LEVEL_3, "v_nationalobjectives_level_3", NPO_DIM_USG, LEVEL_3); + with_percentage(ColumnConstants.NATIONAL_PLANNING_OBJECTIVES_LEVEL_4, "v_nationalobjectives_level_4", NPO_DIM_USG, LEVEL_4); + with_percentage(ColumnConstants.NATIONAL_PLANNING_OBJECTIVES_LEVEL_5, "v_nationalobjectives_level_5", NPO_DIM_USG, LEVEL_5); + with_percentage(ColumnConstants.NATIONAL_PLANNING_OBJECTIVES_LEVEL_6, "v_nationalobjectives_level_6", NPO_DIM_USG, LEVEL_6); + with_percentage(ColumnConstants.NATIONAL_PLANNING_OBJECTIVES_LEVEL_7, "v_nationalobjectives_level_7", NPO_DIM_USG, LEVEL_7); + with_percentage(ColumnConstants.NATIONAL_PLANNING_OBJECTIVES_LEVEL_8, "v_nationalobjectives_level_8", NPO_DIM_USG, LEVEL_8); + + with_percentage(ColumnConstants.LOCATION_ADM_LEVEL_0, "v_adm_level_0", LOC_DIM_USG, ADM_LEVEL_0); + with_percentage(ColumnConstants.LOCATION_ADM_LEVEL_1, "v_adm_level_1", LOC_DIM_USG, ADM_LEVEL_1); + with_percentage(ColumnConstants.LOCATION_ADM_LEVEL_2, "v_adm_level_2", LOC_DIM_USG, ADM_LEVEL_2); + with_percentage(ColumnConstants.LOCATION_ADM_LEVEL_3, "v_adm_level_3", LOC_DIM_USG, ADM_LEVEL_3); + with_percentage(ColumnConstants.LOCATION_ADM_LEVEL_4, "v_adm_level_4", LOC_DIM_USG, ADM_LEVEL_4); + with_percentage(ColumnConstants.LOCATION, "v_raw_locations", LOC_DIM_USG, LEVEL_RAW); + with_percentage(ColumnConstants.GEOCODE, "v_geocodes", LOC_DIM_USG, LEVEL_RAW); + degenerate_dimension(ColumnConstants.RAW_LOCATION, "v_raw_locations", RAW_LOCS_DIMENSION); + + single_dimension(ColumnConstants.REGIONAL_REGION, "v_adm_level_1", LOC_DIM_USG.getLevelColumn(ADM_LEVEL_1)); + + single_dimension(ColumnConstants.GRACE_PERIOD, "v_grace_period", DONOR_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); + date_column(ColumnConstants.MATURITY, "v_maturity", DONOR_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); + date_column(ColumnConstants.RATIFICATION_DATE, "v_ratification_date", DONOR_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); + single_dimension(ColumnConstants.INTEREST_RATE, "v_interest_rate", DONOR_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); + + addMtefColumns(); + addPseudoComputedColumns(); + addColumn(new PPCColumn(ColumnConstants.PROPOSED_PROJECT_AMOUNT, "v_proposed_cost")); + amountColumns.add(ColumnConstants.PROPOSED_PROJECT_AMOUNT); + addColumn(new PPCColumn(ColumnConstants.REVISED_PROJECT_AMOUNT, "v_revised_project_cost")); + amountColumns.add(ColumnConstants.REVISED_PROJECT_AMOUNT); + + date_column(ColumnConstants.ACTIVITY_CREATED_ON, "v_creation_date"); + date_column(ColumnConstants.ACTIVITY_UPDATED_ON, "v_updated_date"); + date_column(ColumnConstants.ACTUAL_APPROVAL_DATE, "v_actual_approval_date"); + date_column(ColumnConstants.ACTUAL_COMPLETION_DATE, "v_actual_completion_date"); + date_column(ColumnConstants.ACTUAL_START_DATE, "v_actual_start_date"); + date_column(ColumnConstants.DONOR_COMMITMENT_DATE, "v_donor_commitment_date"); + date_column(ColumnConstants.FINAL_DATE_FOR_CONTRACTING, "v_contracting_date"); + date_column(ColumnConstants.FINAL_DATE_FOR_DISBURSEMENTS, "v_disbursements_date"); + date_column(ColumnConstants.FUNDING_CLASSIFICATION_DATE, "v_funding_classification_date"); + date_column(ColumnConstants.EFFECTIVE_FUNDING_DATE, "v_effective_funding_date"); + date_column(ColumnConstants.FUNDING_CLOSING_DATE, "v_funding_closing_date"); + date_column(ColumnConstants.FUNDING_END_DATE, "v_funding_end_date"); + date_column(ColumnConstants.FUNDING_START_DATE, "v_funding_start_date"); + date_column(ColumnConstants.ORIGINAL_COMPLETION_DATE, "v_original_completion_date"); + date_column(ColumnConstants.PROPOSED_APPROVAL_DATE, "v_actual_proposed_date"); + date_column(ColumnConstants.PLEDGES_DETAIL_START_DATE, "v_pledges_funding_start_date"); + date_column(ColumnConstants.PLEDGES_DETAIL_END_DATE, "v_pledges_funding_end_date"); + date_column(ColumnConstants.PROPOSED_COMPLETION_DATE, "v_proposed_completion_date"); + date_column(ColumnConstants.PROPOSED_START_DATE, "v_proposed_start_date"); + + degenerate_dimension(ColumnConstants.PROJECT_RESULTS_AVAILABLE, "v_project_results_available", boolDimension); + no_entity(ColumnConstants.PROJECT_RESULTS_LINK, "v_project_results_link"); + no_entity(ColumnConstants.PROJECT_JOINT_DECISION, "v_project_joint_decision"); + no_entity(ColumnConstants.PROJECT_MONITORING, "v_project_monitoring"); + no_entity(ColumnConstants.PROJECT_SUSTAINABILITY, "v_project_sustainability"); + no_entity(ColumnConstants.PROJECT_PROBLEMS, "v_project_problems"); + degenerate_dimension(ColumnConstants.VULNERABLE_GROUP, "v_vulnerable_group", catsDimension); + + addPledgeColumns(); + + addTrivialMeasures(); + addUnfilteredTrivialMeasures(); + addFundingFlowMeasures(); + addTaggedMeasures(); + addFilteredTrivialMeasures(); + addComputedLinearMeasures(); + addSscMeasures(); + addFormulaMeasures(); + + addDividingMeasure(MeasureConstants.PLEDGES_PERCENTAGE_OF_DISBURSEMENT, MeasureConstants.ACTUAL_DISBURSEMENTS, false); + addMeasure(new ForecastExecutionRateMeasure(MeasureConstants.FORECAST_EXECUTION_RATE)); + addColumn(new NiComputedColumn<>(ColumnConstants.ACTIVITY_COUNT, null, GeneratedIntegerBehaviour.ENTITIES_COUNT_BEHAVIOUR, columnDescriptions.get(ColumnConstants.ACTIVITY_COUNT))); + + subDimensions.initialize(getColumns()); + + donorFundingColumn = new AmpFundingColumn(AmpFundingColumn.ENTITY_DONOR_FUNDING, "v_ni_donor_funding", subDimensions); + pledgeFundingColumn = new AmpFundingColumn(AmpFundingColumn.ENTITY_PLEDGE_FUNDING, "v_ni_pledges_funding", subDimensions); + componentFundingColumn = new AmpFundingColumn(AmpFundingColumn.ENTITY_COMPONENT_FUNDING, "v_ni_component_funding", subDimensions); + gpiFundingColumn = new AmpFundingColumn(AmpFundingColumn.ENTITY_GPI_FUNDING, "v_ni_gpi_funding", subDimensions); + regionalFundingColumn = new AmpFundingColumn(AmpFundingColumn.ENTITY_REGIONAL_FUNDING, + "v_ni_regional_funding", subDimensions); + }catch (Exception exception) { - logger.info("Error occurred: "+e.getMessage(),e); + logger.info("Error occurred in ampreportschema: "+ exception.getMessage(),exception); } - no_dimension(ColumnConstants.DONOR_CONTACT_ORGANIZATION, "v_donor_cont_org"); - no_entity(ColumnConstants.ENVIRONMENT, "v_environment", DG_EDITOR_POSTPROCESSOR); - no_entity(ColumnConstants.EQUAL_OPPORTUNITY, "v_equalopportunity", DG_EDITOR_POSTPROCESSOR); - no_entity(ColumnConstants.ISSUES___MEASURES___ACTORS, "v_issues_measure_actors", DG_EDITOR_POSTPROCESSOR); - degenerate_dimension(ColumnConstants.EXPENDITURE_CLASS, "v_expenditure_class", catsDimension); - degenerate_dimension(ColumnConstants.FINANCIAL_INSTRUMENT, "v_financial_instrument", catsDimension); - degenerate_dimension(ColumnConstants.FINANCING_INSTRUMENT, "v_financing_instrument", catsDimension); - degenerate_dimension(ColumnConstants.FUNDING_STATUS, "v_funding_status", catsDimension); - degenerate_dimension(ColumnConstants.HUMANITARIAN_AID, "v_humanitarian_aid", boolDimension); - degenerate_dimension(ColumnConstants.MULTI_STAKEHOLDER_PARTNERSHIP, "v_multi_stakeholder_partnership", - boolDimension); - degenerate_dimension(ColumnConstants.IMPLEMENTATION_LEVEL, "v_implementation_level", catsDimension); - degenerate_dimension(ColumnConstants.PERFORMANCE_ALERT_TYPE, "v_performance_alert_type", - PERF_TYPE_DIM, PERFORMANCE_ALERT_POSTPROCESSOR); - degenerate_dimension(ColumnConstants.PERFORMANCE_ALERT_LEVEL, "v_performance_alert_level", catsDimension); - degenerate_dimension(ColumnConstants.INDIRECT_ON_BUDGET, "v_indirect_on_budget", boolDimension); - degenerate_dimension(ColumnConstants.INSTITUTIONS, "v_institutions", catsDimension, true); - no_dimension(ColumnConstants.LINE_MINISTRY_OBSERVATIONS, "v_line_ministry_observations"); - no_dimension(ColumnConstants.LINE_MINISTRY_OBSERVATIONS_ACTORS, "v_line_ministry_observations_actors"); - date_column(ColumnConstants.LINE_MINISTRY_OBSERVATIONS_DATE, "v_line_ministry_observations_date"); - no_dimension(ColumnConstants.LINE_MINISTRY_OBSERVATIONS_MEASURES, "v_line_ministry_observations_measures"); - no_dimension(ColumnConstants.MEASURES_TAKEN, "v_measures_taken"); - no_entity(ColumnConstants.MINORITIES, "v_minorities", DG_EDITOR_POSTPROCESSOR); - degenerate_dimension(ColumnConstants.MODALITIES, "v_modalities", catsDimension, true); - degenerate_dimension(ColumnConstants.MODE_OF_PAYMENT, "v_mode_of_payment", catsDimension); - degenerate_dimension(ColumnConstants.ACTIVITY_BUDGET, "v_activity_budget", catsDimension, true); - no_dimension(ColumnConstants.ORGANIZATIONS_AND_PROJECT_ID, "v_project_id"); - degenerate_dimension(ColumnConstants.PAYMENT_CAPITAL___RECURRENT, "v_mode_of_payment_capital_recurrent", catsDimension); - degenerate_dimension(ColumnConstants.PROCUREMENT_SYSTEM, "v_procurement_system", catsDimension, true); - degenerate_dimension(ColumnConstants.PROJECT_CATEGORY, "v_project_category", catsDimension, true); - no_entity(ColumnConstants.PROJECT_COMMENTS, "v_project_comments", DG_EDITOR_POSTPROCESSOR); - no_entity(ColumnConstants.PROJECT_DESCRIPTION, "v_description", DG_EDITOR_POSTPROCESSOR); - no_entity(ColumnConstants.PROJECT_IMPACT, "v_proj_impact", DG_EDITOR_POSTPROCESSOR); - no_entity(ColumnConstants.RESULTS, "v_results", DG_EDITOR_POSTPROCESSOR); - no_entity(ColumnConstants.PURPOSE, "v_purposes", DG_EDITOR_POSTPROCESSOR); - no_entity(ColumnConstants.PROGRAM_DESCRIPTION, "v_program_description", DG_EDITOR_POSTPROCESSOR); - - addIndicatorColumns(); - - degenerate_dimension(ColumnConstants.PROJECT_IMPLEMENTING_UNIT, "v_project_impl_unit", catsDimension); - no_entity(ColumnConstants.PROJECT_MANAGEMENT, "v_project_management", DG_EDITOR_POSTPROCESSOR); - no_dimension(ColumnConstants.REGIONAL_OBSERVATIONS, "v_regional_observations"); - no_dimension(ColumnConstants.REGIONAL_OBSERVATIONS_ACTORS, "v_regional_observations_actors"); - date_column(ColumnConstants.REGIONAL_OBSERVATIONS_DATE, "v_regional_observations_date"); - no_dimension(ColumnConstants.REGIONAL_OBSERVATIONS_MEASURES, "v_regional_observations_measures"); - - single_dimension(ColumnConstants.RELATED_PLEDGES, "v_related_pledges", PLEDGES_LEVEL_COLUMN); - - single_dimension(ColumnConstants.RELATED_PROJECTS, "v_ni_pledges_projects", ACT_LEVEL_COLUMN); - no_dimension(ColumnConstants.SECTOR_MINISTRY_CONTACT_ORGANIZATION, "v_sect_min_cont_org"); - degenerate_dimension(ColumnConstants.SSC_MODALITIES, "v_ssc_modalities", catsDimension); - degenerate_dimension(ColumnConstants.STATUS, "v_status", catsDimension, true); - no_dimension(ColumnConstants.STRUCTURES_COLUMN, "v_structures"); - degenerate_dimension(ColumnConstants.TYPE_OF_ASSISTANCE, "v_terms_assist", catsDimension); - degenerate_dimension(ColumnConstants.TYPE_OF_COOPERATION, "v_type_of_cooperation", catsDimension); - degenerate_dimension(ColumnConstants.TYPE_OF_IMPLEMENTATION, "v_type_of_implementation", catsDimension, - true); - no_dimension(ColumnConstants.APPROVAL_STATUS, "v_approval_status"); - degenerate_dimension(ColumnConstants.CONCESSIONALITY_LEVEL, "v_concessionality_level", catsDimension); - no_dimension(ColumnConstants.VALIDATION_STATUS, "v_validation_status"); - - degenerate_dimension(ColumnConstants.FUNDING_ID, "v_funding_id", fundingDimension); - - // views with only 2 columns - no_entity(ColumnConstants.DRAFT, "v_drafts"); - degenerate_dimension(ColumnConstants.AC_CHAPTER, "v_ac_chapters", catsDimension, true); - degenerate_dimension(ColumnConstants.ACCESSION_INSTRUMENT, "v_accession_instruments", catsDimension, true); - degenerate_dimension(ColumnConstants.ACTIVITY_CREATED_BY, "v_activity_creator", usersDimension); - no_entity(ColumnConstants.SUB_PROGRAM, "v_activity_subprogram"); - no_entity(ColumnConstants.AUDIT_SYSTEM, "v_audit_system", true); - no_entity(ColumnConstants.BUDGET_CODE_PROJECT_ID, "v_budget_code_project_id"); - degenerate_dimension(ColumnConstants.BUDGET_DEPARTMENT, "v_budget_department", departmentsDimension); - single_dimension(ColumnConstants.BUDGET_SECTOR, "v_budget_sector", RAW_SCT_LEVEL_COLUMN); - degenerate_dimension(ColumnConstants.CAPITAL_EXPENDITURE, "v_capital_and_exp", boolDimension); - no_entity(ColumnConstants.CRIS_NUMBER, "v_cris_number"); - no_entity(ColumnConstants.IATI_IDENTIFIER, "v_iati_identifier"); - no_entity(ColumnConstants.CURRENT_COMPLETION_DATE_COMMENTS, "v_actual_completion_date_comments"); - no_entity(ColumnConstants.DONOR_CONTACT_EMAIL, "v_donor_cont_email"); - no_entity(ColumnConstants.DONOR_CONTACT_FAX, "v_donor_cont_fax"); - no_entity(ColumnConstants.DONOR_CONTACT_NAME, "v_donor_cont_name"); - no_entity(ColumnConstants.DONOR_CONTACT_PHONE, "v_donor_cont_phone"); - no_entity(ColumnConstants.DONOR_CONTACT_TITLE, "v_donor_cont_title"); - no_entity(ColumnConstants.FINAL_DATE_FOR_DISBURSEMENTS_COMMENTS, "v_disbursements_date_comments"); - no_entity(ColumnConstants.FUNDING_ORGANIZATION_ID, "v_funding_org_id"); - no_entity(ColumnConstants.FY, "v_budget_extras_fy"); - - no_entity(ColumnConstants.GOVERNMENT_AGREEMENT_NUMBER, "v_gov_agreement_number"); - no_entity(ColumnConstants.GPI_1_Q6, "v_ni_gpi_indicator_1_q6"); - no_entity(ColumnConstants.GPI_1_Q6_DESCRIPTION, "v_ni_gpi_indicator_1_q6_description"); - no_entity(ColumnConstants.GPI_1_Q7, "v_ni_gpi_indicator_1_q7"); - no_entity(ColumnConstants.GPI_1_Q8, "v_ni_gpi_indicator_1_q8"); - no_entity(ColumnConstants.GPI_1_Q9, "v_ni_gpi_indicator_1_q9"); - no_entity(ColumnConstants.GPI_1_Q10, "v_ni_gpi_indicator_1_q10"); - no_entity(ColumnConstants.GPI_1_Q10_DESCRIPTION, "v_ni_gpi_indicator_1_q10_description"); - degenerate_dimension(ColumnConstants.HAS_EXECUTING_AGENCY, "v_has_executing_agency", boolDimension); - no_entity(ColumnConstants.IMPLEMENTING_EXECUTING_AGENCY_CONTACT_EMAIL, "v_impl_ex_cont_email"); - no_entity(ColumnConstants.IMPLEMENTING_EXECUTING_AGENCY_CONTACT_FAX, "v_impl_ex_cont_fax"); - no_entity(ColumnConstants.IMPLEMENTING_EXECUTING_AGENCY_CONTACT_NAME, "v_impl_ex_cont_name"); - no_entity(ColumnConstants.IMPLEMENTING_EXECUTING_AGENCY_CONTACT_ORGANIZATION, "v_impl_ex_cont_org"); - no_entity(ColumnConstants.IMPLEMENTING_EXECUTING_AGENCY_CONTACT_PHONE, "v_impl_ex_cont_phone"); - no_entity(ColumnConstants.IMPLEMENTING_EXECUTING_AGENCY_CONTACT_TITLE, "v_impl_ex_cont_title"); - degenerate_dimension(ColumnConstants.JOINT_CRITERIA, "v_yes_no_joint_criteria", boolDimension); - degenerate_dimension(ColumnConstants.GOVERNMENT_APPROVAL_PROCEDURES, "v_yes_no_government_approval_proc", boolDimension); - no_entity(ColumnConstants.MINISTRY_CODE, "v_minsitry_code"); - no_entity(ColumnConstants.MINISTRY_OF_FINANCE_CONTACT_EMAIL, "v_mofed_cont_email"); - no_entity(ColumnConstants.MINISTRY_OF_FINANCE_CONTACT_FAX, "v_mofed_cont_fax"); - no_entity(ColumnConstants.MINISTRY_OF_FINANCE_CONTACT_NAME, "v_mofed_cont_name"); - no_entity(ColumnConstants.MINISTRY_OF_FINANCE_CONTACT_ORGANIZATION, "v_mofed_cont_org"); - no_entity(ColumnConstants.MINISTRY_OF_FINANCE_CONTACT_PHONE, "v_mofed_cont_phone"); - no_entity(ColumnConstants.MINISTRY_OF_FINANCE_CONTACT_TITLE, "v_mofed_cont_title"); - degenerate_dimension(ColumnConstants.MULTI_DONOR, "v_multi_donor", boolDimension); - no_entity(ColumnConstants.PROJECT_CODE, "v_project_code"); - no_entity(ColumnConstants.PROJECT_COORDINATOR_CONTACT_EMAIL, "v_proj_coordr_cont_email"); - no_entity(ColumnConstants.PROJECT_COORDINATOR_CONTACT_FAX, "v_proj_coordr_cont_fax"); - no_entity(ColumnConstants.PROJECT_COORDINATOR_CONTACT_NAME, "v_proj_coordr_cont_name"); - no_entity(ColumnConstants.PROJECT_COORDINATOR_CONTACT_ORGANIZATION, "v_proj_coordr_cont_org"); - no_entity(ColumnConstants.PROJECT_COORDINATOR_CONTACT_PHONE, "v_proj_coordr_cont_phone"); - no_entity(ColumnConstants.PROJECT_COORDINATOR_CONTACT_TITLE, "v_proj_coordr_cont_title"); - no_entity(ColumnConstants.PROPOSED_PROJECT_LIFE, "v_proposed_project_life"); - no_entity(ColumnConstants.REPORTING_SYSTEM, "v_reporting_system", true); - no_entity(ColumnConstants.SECTOR_MINISTRY_CONTACT_EMAIL, "v_sect_min_cont_email"); - no_entity(ColumnConstants.SECTOR_MINISTRY_CONTACT_FAX, "v_sect_min_cont_fax"); - no_entity(ColumnConstants.SECTOR_MINISTRY_CONTACT_NAME, "v_sect_min_cont_name"); - no_entity(ColumnConstants.SECTOR_MINISTRY_CONTACT_PHONE, "v_sect_min_cont_phone"); - no_entity(ColumnConstants.SECTOR_MINISTRY_CONTACT_TITLE, "v_sect_min_cont_title"); - no_entity(ColumnConstants.SUB_VOTE, "v_subvote"); - no_entity(ColumnConstants.VOTE, "v_vote"); - - single_dimension(ColumnConstants.BENEFICIARY_AGENCY__DEPARTMENT_DIVISION, "v_beneficiary_agency_info", BA_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); - single_dimension(ColumnConstants.CONTRACTING_AGENCY_DEPARTMENT_DIVISION, "v_contracting_agency_info", CA_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); - single_dimension(ColumnConstants.EXECUTING_AGENCY_DEPARTMENT_DIVISION, "v_executing_agency_info", EA_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); - single_dimension(ColumnConstants.IMPLEMENTING_AGENCY_DEPARTMENT_DIVISION, "v_implementing_agency_info", IA_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); - single_dimension(ColumnConstants.REGIONAL_GROUP_DEPARTMENT_DIVISION, "v_regional_group_info", RG_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); - single_dimension(ColumnConstants.RESPONSIBLE_ORGANIZATION_DEPARTMENT_DIVISION, "v_responsible_org_info", RO_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); - single_dimension(ColumnConstants.SECTOR_GROUP_DEPARTMENT_DIVISION, "v_sector_group_info", SG_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); - - single_dimension(ColumnConstants.DONOR_AGENCY, "v_ni_donor_orgs", DONOR_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); - single_dimension(ColumnConstants.DONOR_GROUP, "v_ni_donor_orgsgroups", DONOR_DIM_USG.getLevelColumn(LEVEL_ORGANISATION_GROUP)); - single_dimension(ColumnConstants.DONOR_TYPE, "v_ni_donor_orgstypes", DONOR_DIM_USG.getLevelColumn(LEVEL_ORGANISATION_TYPE)); - single_dimension(ColumnConstants.DONOR_BUDGET_CODE, "v_ni_donor_orgbudget_code", - DONOR_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); - single_dimension(ColumnConstants.DONOR_COUNTRY, "v_ni_donor_orgs_country", - DN_COUNTRY_DIM_USG.getLevelColumn(0)); - - single_dimension(ColumnConstants.DONOR_ACRONYM, "v_ni_donor_orgsacronyms", DONOR_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); - - with_percentage(ColumnConstants.IMPLEMENTING_AGENCY, "v_implementing_agency", IA_DIM_USG, LEVEL_ORGANISATION); - with_percentage(ColumnConstants.IMPLEMENTING_AGENCY_GROUPS, "v_implementing_agency_groups", IA_DIM_USG, LEVEL_ORGANISATION_GROUP); - with_percentage(ColumnConstants.IMPLEMENTING_AGENCY_TYPE, "v_implementing_agency_type", IA_DIM_USG, LEVEL_ORGANISATION_TYPE); - - with_percentage(ColumnConstants.BENEFICIARY_AGENCY, "v_beneficiary_agency", BA_DIM_USG, LEVEL_ORGANISATION); - with_percentage(ColumnConstants.BENEFICIARY_AGENCY_GROUPS, "v_beneficiary_agency_groups", BA_DIM_USG, LEVEL_ORGANISATION_GROUP); - with_percentage(ColumnConstants.BENEFICIARY_AGENCY_TYPE, "v_beneficiary_agency_type", BA_DIM_USG, - LEVEL_ORGANISATION_TYPE); - with_percentage(ColumnConstants.BENEFICIARY_AGENCY_COUNTRY, "v_beneficiary_agency_country", - BA_COUNTRY_DIM_USG, ADM_LEVEL_0); - - - with_percentage(ColumnConstants.EXECUTING_AGENCY, "v_executing_agency", EA_DIM_USG, LEVEL_ORGANISATION); - with_percentage(ColumnConstants.EXECUTING_AGENCY_GROUPS, "v_executing_agency_groups", EA_DIM_USG, LEVEL_ORGANISATION_GROUP); - with_percentage(ColumnConstants.EXECUTING_AGENCY_TYPE, "v_executing_agency_type", EA_DIM_USG, LEVEL_ORGANISATION_TYPE); - with_percentage(ColumnConstants.EXECUTING_AGENCY_COUNTRY, "v_executing_agency_country", - EA_COUNTRY_DIM_USG, ADM_LEVEL_0); - - with_percentage(ColumnConstants.RESPONSIBLE_ORGANIZATION, "v_responsible_organisation", RO_DIM_USG, LEVEL_ORGANISATION); - with_percentage(ColumnConstants.RESPONSIBLE_ORGANIZATION_GROUPS, "v_responsible_org_groups", RO_DIM_USG, LEVEL_ORGANISATION_GROUP); - with_percentage(ColumnConstants.RESPONSIBLE_ORGANIZATION_TYPE, "v_responsible_org_type", RO_DIM_USG, - LEVEL_ORGANISATION_TYPE); - - with_percentage(ColumnConstants.CONTRACTING_AGENCY, "v_contracting_agency", CA_DIM_USG, LEVEL_ORGANISATION); - single_dimension(ColumnConstants.CONTRACTING_AGENCY_ACRONYM, "v_contracting_agency_acronym", CA_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); - with_percentage(ColumnConstants.CONTRACTING_AGENCY_GROUPS, "v_contracting_agency_groups", CA_DIM_USG, LEVEL_ORGANISATION_GROUP); - with_percentage(ColumnConstants.CONTRACTING_AGENCY_TYPE, "v_contracting_agency_type", CA_DIM_USG, - LEVEL_ORGANISATION_TYPE); - - with_percentage(ColumnConstants.REGIONAL_GROUP, "v_regional_group", RG_DIM_USG, LEVEL_ORGANISATION_GROUP); - - with_percentage(ColumnConstants.SECTOR_GROUP, "v_sector_group", SG_DIM_USG, LEVEL_ORGANISATION_GROUP); - - single_dimension(ColumnConstants.PRIMARY_SECTOR_CODE_OFFICIAL, "v_sector_code_official", PS_DIM_USG - .getLevelColumn(LEVEL_ROOT)); - with_percentage(ColumnConstants.PRIMARY_SECTOR, "v_sectors", PS_DIM_USG, LEVEL_ROOT); - with_percentage(ColumnConstants.PRIMARY_SECTOR_SUB_SECTOR, "v_sub_sectors", PS_DIM_USG, LEVEL_SUBSECTOR); - with_percentage(ColumnConstants.PRIMARY_SECTOR_SUB_SUB_SECTOR, "v_sub_sub_sectors", PS_DIM_USG, LEVEL_SUBSUBSECTOR); - - with_percentage(ColumnConstants.SECONDARY_SECTOR, "v_secondary_sectors", SS_DIM_USG, LEVEL_ROOT); - with_percentage(ColumnConstants.SECONDARY_SECTOR_SUB_SECTOR, "v_secondary_sub_sectors", SS_DIM_USG, LEVEL_SUBSECTOR); - with_percentage(ColumnConstants.SECONDARY_SECTOR_SUB_SUB_SECTOR, "v_secondary_sub_sub_sectors", SS_DIM_USG, LEVEL_SUBSUBSECTOR); - - with_percentage(ColumnConstants.TERTIARY_SECTOR, "v_tertiary_sectors", TS_DIM_USG, LEVEL_ROOT); - with_percentage(ColumnConstants.TERTIARY_SECTOR_SUB_SECTOR, "v_tertiary_sub_sectors", TS_DIM_USG, - LEVEL_SUBSECTOR); - with_percentage(ColumnConstants.TERTIARY_SECTOR_SUB_SUB_SECTOR, "v_tertiary_sub_sub_sectors", TS_DIM_USG, - LEVEL_SUBSUBSECTOR); - - with_percentage(ColumnConstants.QUATERNARY_SECTOR, "v_quaternary_sectors", Q4S_DIM_USG, LEVEL_ROOT); - with_percentage(ColumnConstants.QUATERNARY_SECTOR_SUB_SECTOR, "v_quaternary_sub_sectors", Q4S_DIM_USG, - LEVEL_SUBSECTOR); - with_percentage(ColumnConstants.QUATERNARY_SECTOR_SUB_SUB_SECTOR, "v_quaternary_sub_sub_sectors", Q4S_DIM_USG, - LEVEL_SUBSUBSECTOR); - - with_percentage(ColumnConstants.QUINARY_SECTOR, "v_quinary_sectors", Q5S_DIM_USG, LEVEL_ROOT); - with_percentage(ColumnConstants.QUINARY_SECTOR_SUB_SECTOR, "v_quinary_sub_sectors", Q5S_DIM_USG, - LEVEL_SUBSECTOR); - with_percentage(ColumnConstants.QUINARY_SECTOR_SUB_SUB_SECTOR, "v_quinary_sub_sub_sectors", Q5S_DIM_USG, - LEVEL_SUBSUBSECTOR); - - with_percentage(ColumnConstants.SECTOR_TAG, "v_sectors", TAG_S_DIM_USG, LEVEL_ROOT); - with_percentage(ColumnConstants.SECTOR_TAG_SUB_SECTOR, "v_tag_sub_sectors", TAG_S_DIM_USG, LEVEL_SUBSECTOR); - with_percentage(ColumnConstants.SECTOR_TAG_SUB_SUB_SECTOR, "v_tag_sub_sub_sectors", TAG_S_DIM_USG, - LEVEL_SUBSUBSECTOR); - - with_percentage(ColumnConstants.PRIMARY_PROGRAM_LEVEL_0, "v_primaryprogram_level_0", PP_DIM_USG, LEVEL_0); - with_percentage(ColumnConstants.PRIMARY_PROGRAM_LEVEL_1, "v_primaryprogram_level_1", PP_DIM_USG, LEVEL_1); - with_percentage(ColumnConstants.PRIMARY_PROGRAM_LEVEL_2, "v_primaryprogram_level_2", PP_DIM_USG, LEVEL_2); - with_percentage(ColumnConstants.PRIMARY_PROGRAM_LEVEL_3, "v_primaryprogram_level_3", PP_DIM_USG, LEVEL_3); - with_percentage(ColumnConstants.PRIMARY_PROGRAM_LEVEL_4, "v_primaryprogram_level_4", PP_DIM_USG, LEVEL_4); - with_percentage(ColumnConstants.PRIMARY_PROGRAM_LEVEL_5, "v_primaryprogram_level_5", PP_DIM_USG, LEVEL_5); - with_percentage(ColumnConstants.PRIMARY_PROGRAM_LEVEL_6, "v_primaryprogram_level_6", PP_DIM_USG, LEVEL_6); - with_percentage(ColumnConstants.PRIMARY_PROGRAM_LEVEL_7, "v_primaryprogram_level_7", PP_DIM_USG, LEVEL_7); - with_percentage(ColumnConstants.PRIMARY_PROGRAM_LEVEL_8, "v_primaryprogram_level_8", PP_DIM_USG, LEVEL_8); - - with_percentage(ColumnConstants.INDIRECT_PRIMARY_PROGRAM_LEVEL_0, "v_indirect_primaryprogram_level_0", - IPP_DIM_USG, LEVEL_0); - with_percentage(ColumnConstants.INDIRECT_PRIMARY_PROGRAM_LEVEL_1, "v_indirect_primaryprogram_level_1", - IPP_DIM_USG, LEVEL_1); - with_percentage(ColumnConstants.INDIRECT_PRIMARY_PROGRAM_LEVEL_2, "v_indirect_primaryprogram_level_2", - IPP_DIM_USG, LEVEL_2); - with_percentage(ColumnConstants.INDIRECT_PRIMARY_PROGRAM_LEVEL_3, "v_indirect_primaryprogram_level_3", - IPP_DIM_USG, LEVEL_3); - with_percentage(ColumnConstants.INDIRECT_PRIMARY_PROGRAM_LEVEL_4, "v_indirect_primaryprogram_level_4", - IPP_DIM_USG, LEVEL_4); - with_percentage(ColumnConstants.INDIRECT_PRIMARY_PROGRAM_LEVEL_5, "v_indirect_primaryprogram_level_5", - IPP_DIM_USG, LEVEL_5); - with_percentage(ColumnConstants.INDIRECT_PRIMARY_PROGRAM_LEVEL_6, "v_indirect_primaryprogram_level_6", - IPP_DIM_USG, LEVEL_6); - with_percentage(ColumnConstants.INDIRECT_PRIMARY_PROGRAM_LEVEL_7, "v_indirect_primaryprogram_level_7", - IPP_DIM_USG, LEVEL_7); - with_percentage(ColumnConstants.INDIRECT_PRIMARY_PROGRAM_LEVEL_8, "v_indirect_primaryprogram_level_8", - IPP_DIM_USG, LEVEL_8); - - with_percentage(ColumnConstants.SECONDARY_PROGRAM_LEVEL_0, "v_secondaryprogram_level_0", SP_DIM_USG, LEVEL_0); - with_percentage(ColumnConstants.SECONDARY_PROGRAM_LEVEL_1, "v_secondaryprogram_level_1", SP_DIM_USG, LEVEL_1); - with_percentage(ColumnConstants.SECONDARY_PROGRAM_LEVEL_2, "v_secondaryprogram_level_2", SP_DIM_USG, LEVEL_2); - with_percentage(ColumnConstants.SECONDARY_PROGRAM_LEVEL_3, "v_secondaryprogram_level_3", SP_DIM_USG, LEVEL_3); - with_percentage(ColumnConstants.SECONDARY_PROGRAM_LEVEL_4, "v_secondaryprogram_level_4", SP_DIM_USG, LEVEL_4); - with_percentage(ColumnConstants.SECONDARY_PROGRAM_LEVEL_5, "v_secondaryprogram_level_5", SP_DIM_USG, LEVEL_5); - with_percentage(ColumnConstants.SECONDARY_PROGRAM_LEVEL_6, "v_secondaryprogram_level_6", SP_DIM_USG, LEVEL_6); - with_percentage(ColumnConstants.SECONDARY_PROGRAM_LEVEL_7, "v_secondaryprogram_level_7", SP_DIM_USG, LEVEL_7); - with_percentage(ColumnConstants.SECONDARY_PROGRAM_LEVEL_8, "v_secondaryprogram_level_8", SP_DIM_USG, LEVEL_8); - - with_percentage(ColumnConstants.TERTIARY_PROGRAM_LEVEL_0, "v_tertiaryprogram_level_0", TP_DIM_USG, LEVEL_0); - with_percentage(ColumnConstants.TERTIARY_PROGRAM_LEVEL_1, "v_tertiaryprogram_level_1", TP_DIM_USG, LEVEL_1); - with_percentage(ColumnConstants.TERTIARY_PROGRAM_LEVEL_2, "v_tertiaryprogram_level_2", TP_DIM_USG, LEVEL_2); - with_percentage(ColumnConstants.TERTIARY_PROGRAM_LEVEL_3, "v_tertiaryprogram_level_3", TP_DIM_USG, LEVEL_3); - with_percentage(ColumnConstants.TERTIARY_PROGRAM_LEVEL_4, "v_tertiaryprogram_level_4", TP_DIM_USG, LEVEL_4); - with_percentage(ColumnConstants.TERTIARY_PROGRAM_LEVEL_5, "v_tertiaryprogram_level_5", TP_DIM_USG, LEVEL_5); - with_percentage(ColumnConstants.TERTIARY_PROGRAM_LEVEL_6, "v_tertiaryprogram_level_6", TP_DIM_USG, LEVEL_6); - with_percentage(ColumnConstants.TERTIARY_PROGRAM_LEVEL_7, "v_tertiaryprogram_level_7", TP_DIM_USG, LEVEL_7); - with_percentage(ColumnConstants.TERTIARY_PROGRAM_LEVEL_8, "v_tertiaryprogram_level_8", TP_DIM_USG, LEVEL_8); - - with_percentage(ColumnConstants.NATIONAL_PLANNING_OBJECTIVES_LEVEL_0, "v_nationalobjectives_level_0", - NPO_DIM_USG, LEVEL_0); - with_percentage(ColumnConstants.NATIONAL_PLANNING_OBJECTIVES_LEVEL_1, "v_nationalobjectives_level_1", NPO_DIM_USG, LEVEL_1); - with_percentage(ColumnConstants.NATIONAL_PLANNING_OBJECTIVES_LEVEL_2, "v_nationalobjectives_level_2", NPO_DIM_USG, LEVEL_2); - with_percentage(ColumnConstants.NATIONAL_PLANNING_OBJECTIVES_LEVEL_3, "v_nationalobjectives_level_3", NPO_DIM_USG, LEVEL_3); - with_percentage(ColumnConstants.NATIONAL_PLANNING_OBJECTIVES_LEVEL_4, "v_nationalobjectives_level_4", NPO_DIM_USG, LEVEL_4); - with_percentage(ColumnConstants.NATIONAL_PLANNING_OBJECTIVES_LEVEL_5, "v_nationalobjectives_level_5", NPO_DIM_USG, LEVEL_5); - with_percentage(ColumnConstants.NATIONAL_PLANNING_OBJECTIVES_LEVEL_6, "v_nationalobjectives_level_6", NPO_DIM_USG, LEVEL_6); - with_percentage(ColumnConstants.NATIONAL_PLANNING_OBJECTIVES_LEVEL_7, "v_nationalobjectives_level_7", NPO_DIM_USG, LEVEL_7); - with_percentage(ColumnConstants.NATIONAL_PLANNING_OBJECTIVES_LEVEL_8, "v_nationalobjectives_level_8", NPO_DIM_USG, LEVEL_8); - - with_percentage(ColumnConstants.LOCATION_ADM_LEVEL_0, "v_adm_level_0", LOC_DIM_USG, ADM_LEVEL_0); - with_percentage(ColumnConstants.LOCATION_ADM_LEVEL_1, "v_adm_level_1", LOC_DIM_USG, ADM_LEVEL_1); - with_percentage(ColumnConstants.LOCATION_ADM_LEVEL_2, "v_adm_level_2", LOC_DIM_USG, ADM_LEVEL_2); - with_percentage(ColumnConstants.LOCATION_ADM_LEVEL_3, "v_adm_level_3", LOC_DIM_USG, ADM_LEVEL_3); - with_percentage(ColumnConstants.LOCATION_ADM_LEVEL_4, "v_adm_level_4", LOC_DIM_USG, ADM_LEVEL_4); - with_percentage(ColumnConstants.LOCATION, "v_raw_locations", LOC_DIM_USG, LEVEL_RAW); - with_percentage(ColumnConstants.GEOCODE, "v_geocodes", LOC_DIM_USG, LEVEL_RAW); - degenerate_dimension(ColumnConstants.RAW_LOCATION, "v_raw_locations", RAW_LOCS_DIMENSION); - - single_dimension(ColumnConstants.REGIONAL_REGION, "v_adm_level_1", LOC_DIM_USG.getLevelColumn(ADM_LEVEL_1)); - - single_dimension(ColumnConstants.GRACE_PERIOD, "v_grace_period", DONOR_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); - date_column(ColumnConstants.MATURITY, "v_maturity", DONOR_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); - date_column(ColumnConstants.RATIFICATION_DATE, "v_ratification_date", DONOR_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); - single_dimension(ColumnConstants.INTEREST_RATE, "v_interest_rate", DONOR_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); - - addMtefColumns(); - addPseudoComputedColumns(); - addColumn(new PPCColumn(ColumnConstants.PROPOSED_PROJECT_AMOUNT, "v_proposed_cost")); - amountColumns.add(ColumnConstants.PROPOSED_PROJECT_AMOUNT); - addColumn(new PPCColumn(ColumnConstants.REVISED_PROJECT_AMOUNT, "v_revised_project_cost")); - amountColumns.add(ColumnConstants.REVISED_PROJECT_AMOUNT); - - date_column(ColumnConstants.ACTIVITY_CREATED_ON, "v_creation_date"); - date_column(ColumnConstants.ACTIVITY_UPDATED_ON, "v_updated_date"); - date_column(ColumnConstants.ACTUAL_APPROVAL_DATE, "v_actual_approval_date"); - date_column(ColumnConstants.ACTUAL_COMPLETION_DATE, "v_actual_completion_date"); - date_column(ColumnConstants.ACTUAL_START_DATE, "v_actual_start_date"); - date_column(ColumnConstants.DONOR_COMMITMENT_DATE, "v_donor_commitment_date"); - date_column(ColumnConstants.FINAL_DATE_FOR_CONTRACTING, "v_contracting_date"); - date_column(ColumnConstants.FINAL_DATE_FOR_DISBURSEMENTS, "v_disbursements_date"); - date_column(ColumnConstants.FUNDING_CLASSIFICATION_DATE, "v_funding_classification_date"); - date_column(ColumnConstants.EFFECTIVE_FUNDING_DATE, "v_effective_funding_date"); - date_column(ColumnConstants.FUNDING_CLOSING_DATE, "v_funding_closing_date"); - date_column(ColumnConstants.FUNDING_END_DATE, "v_funding_end_date"); - date_column(ColumnConstants.FUNDING_START_DATE, "v_funding_start_date"); - date_column(ColumnConstants.ORIGINAL_COMPLETION_DATE, "v_original_completion_date"); - date_column(ColumnConstants.PROPOSED_APPROVAL_DATE, "v_actual_proposed_date"); - date_column(ColumnConstants.PLEDGES_DETAIL_START_DATE, "v_pledges_funding_start_date"); - date_column(ColumnConstants.PLEDGES_DETAIL_END_DATE, "v_pledges_funding_end_date"); - date_column(ColumnConstants.PROPOSED_COMPLETION_DATE, "v_proposed_completion_date"); - date_column(ColumnConstants.PROPOSED_START_DATE, "v_proposed_start_date"); - - degenerate_dimension(ColumnConstants.PROJECT_RESULTS_AVAILABLE, "v_project_results_available", boolDimension); - no_entity(ColumnConstants.PROJECT_RESULTS_LINK, "v_project_results_link"); - no_entity(ColumnConstants.PROJECT_JOINT_DECISION, "v_project_joint_decision"); - no_entity(ColumnConstants.PROJECT_MONITORING, "v_project_monitoring"); - no_entity(ColumnConstants.PROJECT_SUSTAINABILITY, "v_project_sustainability"); - no_entity(ColumnConstants.PROJECT_PROBLEMS, "v_project_problems"); - degenerate_dimension(ColumnConstants.VULNERABLE_GROUP, "v_vulnerable_group", catsDimension); - - addPledgeColumns(); - - addTrivialMeasures(); - addUnfilteredTrivialMeasures(); - addFundingFlowMeasures(); - addTaggedMeasures(); - addFilteredTrivialMeasures(); - addComputedLinearMeasures(); - addSscMeasures(); - addFormulaMeasures(); - - addDividingMeasure(MeasureConstants.PLEDGES_PERCENTAGE_OF_DISBURSEMENT, MeasureConstants.ACTUAL_DISBURSEMENTS, false); - addMeasure(new ForecastExecutionRateMeasure(MeasureConstants.FORECAST_EXECUTION_RATE)); - addColumn(new NiComputedColumn<>(ColumnConstants.ACTIVITY_COUNT, null, GeneratedIntegerBehaviour.ENTITIES_COUNT_BEHAVIOUR, columnDescriptions.get(ColumnConstants.ACTIVITY_COUNT))); - - subDimensions.initialize(getColumns()); - - donorFundingColumn = new AmpFundingColumn(AmpFundingColumn.ENTITY_DONOR_FUNDING, "v_ni_donor_funding", subDimensions); - pledgeFundingColumn = new AmpFundingColumn(AmpFundingColumn.ENTITY_PLEDGE_FUNDING, "v_ni_pledges_funding", subDimensions); - componentFundingColumn = new AmpFundingColumn(AmpFundingColumn.ENTITY_COMPONENT_FUNDING, "v_ni_component_funding", subDimensions); - gpiFundingColumn = new AmpFundingColumn(AmpFundingColumn.ENTITY_GPI_FUNDING, "v_ni_gpi_funding", subDimensions); - regionalFundingColumn = new AmpFundingColumn(AmpFundingColumn.ENTITY_REGIONAL_FUNDING, - "v_ni_regional_funding", subDimensions); } private void addIndicatorColumns() { From db057cd202e3b8ea54a91025f367535e0f154b22 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Wed, 30 Aug 2023 23:29:33 +0300 Subject: [PATCH 021/307] AMP-30711 Add login and register to trubudget --- .../amp/nireports/amp/AmpReportsSchema.java | 765 +++++++++--------- .../aim/startup/AMPStartupListener.java | 2 +- 2 files changed, 383 insertions(+), 384 deletions(-) diff --git a/amp/WEB-INF/src/org/dgfoundation/amp/nireports/amp/AmpReportsSchema.java b/amp/WEB-INF/src/org/dgfoundation/amp/nireports/amp/AmpReportsSchema.java index 2567d3b3393..61555b7ed59 100644 --- a/amp/WEB-INF/src/org/dgfoundation/amp/nireports/amp/AmpReportsSchema.java +++ b/amp/WEB-INF/src/org/dgfoundation/amp/nireports/amp/AmpReportsSchema.java @@ -324,394 +324,393 @@ public static AmpReportsSchema getInstance() { * the constructor defines all the columns and measures of the schema. Since this involves scanning the database quite a lot, this constructor is SLOW */ protected AmpReportsSchema() { + single_dimension(ColumnConstants.PROJECT_TITLE, "v_titles", ACT_LEVEL_COLUMN); + no_dimension(ColumnConstants.ACTIVITY_ID, "v_activity_ids"); + no_dimension(ColumnConstants.TEAM, "v_teams"); + no_entity(ColumnConstants.OBJECTIVE, "v_objectives", DG_EDITOR_POSTPROCESSOR); + no_entity(ColumnConstants.MULTI_STAKEHOLDER_PARTNERS, "v_multi_stakeholder_partners", DG_EDITOR_POSTPROCESSOR); + no_dimension(ColumnConstants.ISSUES, "v_issues"); + date_column(ColumnConstants.ISSUE_DATE, "v_issue_date"); + + no_dimension(ColumnConstants.ACTIVITY_PLEDGES_TITLE, "v_activity_pledges_title"); + no_dimension(ColumnConstants.ACTIVITY_UPDATED_BY, "v_activity_modified_by"); + no_dimension(ColumnConstants.ACTORS, "v_actors"); + + single_dimension(ColumnConstants.AGREEMENT_CODE, "v_agreement_code", AGR_LEVEL_COLUMN); + single_dimension(ColumnConstants.AGREEMENT_TITLE_CODE, "v_agreement_title_code", AGR_LEVEL_COLUMN); + date_column(ColumnConstants.AGREEMENT_CLOSE_DATE, "v_agreement_close_date", AGR_LEVEL_COLUMN); + date_column(ColumnConstants.AGREEMENT_SIGNATURE_DATE, "v_agreement_signature_date", AGR_LEVEL_COLUMN); + date_column(ColumnConstants.AGREEMENT_EFFECTIVE_DATE, "v_agreement_effective_date", AGR_LEVEL_COLUMN); + date_column(ColumnConstants.AGREEMENT_PARLIAMENTARY_APPROVAL_DATE, "v_agreement_parlimentary_date", AGR_LEVEL_COLUMN); + + no_dimension(ColumnConstants.AMP_ID, "v_amp_id"); + single_dimension(ColumnConstants.BUDGET_ORGANIZATION, "v_budget_organization", RAW_ORG_LEVEL_COLUMN); + single_dimension(ColumnConstants.BUDGET_PROGRAM, "v_budget_program", RAW_PRG_LEVEL_COLUMN); + degenerate_dimension(ColumnConstants.BUDGET_STRUCTURE, "v_budget_structure", boolDimension); + + no_dimension(ColumnConstants.COMPONENT_DESCRIPTION, "v_component_description"); + single_dimension(ColumnConstants.COMPONENT_FUNDING_ORGANIZATION, + "v_component_funding_organization_name", CFO_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); + single_dimension(ColumnConstants.COMPONENT_SECOND_RESPONSIBLE_ORGANIZATION, + "v_component_second_responsible_organization_name", CSRO_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); + degenerate_dimension(ColumnConstants.COMPONENT_NAME, "v_components", COMPS_DIMENSION); + degenerate_dimension(ColumnConstants.COMPONENT_TYPE, "v_component_type", COMP_TYPES_DIMENSION); + no_dimension(ColumnConstants.DESCRIPTION_OF_COMPONENT_FUNDING, "v_component_funding_description"); + + degenerate_dimension(ColumnConstants.DISASTER_RESPONSE_MARKER, "v_disaster_response_marker", boolDimension); try { - single_dimension(ColumnConstants.PROJECT_TITLE, "v_titles", ACT_LEVEL_COLUMN); - no_dimension(ColumnConstants.ACTIVITY_ID, "v_activity_ids"); - no_dimension(ColumnConstants.TEAM, "v_teams"); - no_entity(ColumnConstants.OBJECTIVE, "v_objectives", DG_EDITOR_POSTPROCESSOR); - no_entity(ColumnConstants.MULTI_STAKEHOLDER_PARTNERS, "v_multi_stakeholder_partners", DG_EDITOR_POSTPROCESSOR); - no_dimension(ColumnConstants.ISSUES, "v_issues"); - date_column(ColumnConstants.ISSUE_DATE, "v_issue_date"); - - no_dimension(ColumnConstants.ACTIVITY_PLEDGES_TITLE, "v_activity_pledges_title"); - no_dimension(ColumnConstants.ACTIVITY_UPDATED_BY, "v_activity_modified_by"); - no_dimension(ColumnConstants.ACTORS, "v_actors"); - - single_dimension(ColumnConstants.AGREEMENT_CODE, "v_agreement_code", AGR_LEVEL_COLUMN); - single_dimension(ColumnConstants.AGREEMENT_TITLE_CODE, "v_agreement_title_code", AGR_LEVEL_COLUMN); - date_column(ColumnConstants.AGREEMENT_CLOSE_DATE, "v_agreement_close_date", AGR_LEVEL_COLUMN); - date_column(ColumnConstants.AGREEMENT_SIGNATURE_DATE, "v_agreement_signature_date", AGR_LEVEL_COLUMN); - date_column(ColumnConstants.AGREEMENT_EFFECTIVE_DATE, "v_agreement_effective_date", AGR_LEVEL_COLUMN); - date_column(ColumnConstants.AGREEMENT_PARLIAMENTARY_APPROVAL_DATE, "v_agreement_parlimentary_date", AGR_LEVEL_COLUMN); - - no_dimension(ColumnConstants.AMP_ID, "v_amp_id"); - single_dimension(ColumnConstants.BUDGET_ORGANIZATION, "v_budget_organization", RAW_ORG_LEVEL_COLUMN); - single_dimension(ColumnConstants.BUDGET_PROGRAM, "v_budget_program", RAW_PRG_LEVEL_COLUMN); - degenerate_dimension(ColumnConstants.BUDGET_STRUCTURE, "v_budget_structure", boolDimension); - - no_dimension(ColumnConstants.COMPONENT_DESCRIPTION, "v_component_description"); - single_dimension(ColumnConstants.COMPONENT_FUNDING_ORGANIZATION, - "v_component_funding_organization_name", CFO_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); - single_dimension(ColumnConstants.COMPONENT_SECOND_RESPONSIBLE_ORGANIZATION, - "v_component_second_responsible_organization_name", CSRO_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); - degenerate_dimension(ColumnConstants.COMPONENT_NAME, "v_components", COMPS_DIMENSION); - degenerate_dimension(ColumnConstants.COMPONENT_TYPE, "v_component_type", COMP_TYPES_DIMENSION); - no_dimension(ColumnConstants.DESCRIPTION_OF_COMPONENT_FUNDING, "v_component_funding_description"); - - degenerate_dimension(ColumnConstants.DISASTER_RESPONSE_MARKER, "v_disaster_response_marker", boolDimension); - no_entity(ColumnConstants.DISBURSEMENT_ID, "v_disbursement_id"); - no_dimension(ColumnConstants.DONOR_CONTACT_ORGANIZATION, "v_donor_cont_org"); - no_entity(ColumnConstants.ENVIRONMENT, "v_environment", DG_EDITOR_POSTPROCESSOR); - no_entity(ColumnConstants.EQUAL_OPPORTUNITY, "v_equalopportunity", DG_EDITOR_POSTPROCESSOR); - no_entity(ColumnConstants.ISSUES___MEASURES___ACTORS, "v_issues_measure_actors", DG_EDITOR_POSTPROCESSOR); - degenerate_dimension(ColumnConstants.EXPENDITURE_CLASS, "v_expenditure_class", catsDimension); - degenerate_dimension(ColumnConstants.FINANCIAL_INSTRUMENT, "v_financial_instrument", catsDimension); - degenerate_dimension(ColumnConstants.FINANCING_INSTRUMENT, "v_financing_instrument", catsDimension); - degenerate_dimension(ColumnConstants.FUNDING_STATUS, "v_funding_status", catsDimension); - degenerate_dimension(ColumnConstants.HUMANITARIAN_AID, "v_humanitarian_aid", boolDimension); - degenerate_dimension(ColumnConstants.MULTI_STAKEHOLDER_PARTNERSHIP, "v_multi_stakeholder_partnership", - boolDimension); - degenerate_dimension(ColumnConstants.IMPLEMENTATION_LEVEL, "v_implementation_level", catsDimension); - degenerate_dimension(ColumnConstants.PERFORMANCE_ALERT_TYPE, "v_performance_alert_type", - PERF_TYPE_DIM, PERFORMANCE_ALERT_POSTPROCESSOR); - degenerate_dimension(ColumnConstants.PERFORMANCE_ALERT_LEVEL, "v_performance_alert_level", catsDimension); - degenerate_dimension(ColumnConstants.INDIRECT_ON_BUDGET, "v_indirect_on_budget", boolDimension); - degenerate_dimension(ColumnConstants.INSTITUTIONS, "v_institutions", catsDimension, true); - no_dimension(ColumnConstants.LINE_MINISTRY_OBSERVATIONS, "v_line_ministry_observations"); - no_dimension(ColumnConstants.LINE_MINISTRY_OBSERVATIONS_ACTORS, "v_line_ministry_observations_actors"); - date_column(ColumnConstants.LINE_MINISTRY_OBSERVATIONS_DATE, "v_line_ministry_observations_date"); - no_dimension(ColumnConstants.LINE_MINISTRY_OBSERVATIONS_MEASURES, "v_line_ministry_observations_measures"); - no_dimension(ColumnConstants.MEASURES_TAKEN, "v_measures_taken"); - no_entity(ColumnConstants.MINORITIES, "v_minorities", DG_EDITOR_POSTPROCESSOR); - degenerate_dimension(ColumnConstants.MODALITIES, "v_modalities", catsDimension, true); - degenerate_dimension(ColumnConstants.MODE_OF_PAYMENT, "v_mode_of_payment", catsDimension); - degenerate_dimension(ColumnConstants.ACTIVITY_BUDGET, "v_activity_budget", catsDimension, true); - no_dimension(ColumnConstants.ORGANIZATIONS_AND_PROJECT_ID, "v_project_id"); - degenerate_dimension(ColumnConstants.PAYMENT_CAPITAL___RECURRENT, "v_mode_of_payment_capital_recurrent", catsDimension); - degenerate_dimension(ColumnConstants.PROCUREMENT_SYSTEM, "v_procurement_system", catsDimension, true); - degenerate_dimension(ColumnConstants.PROJECT_CATEGORY, "v_project_category", catsDimension, true); - no_entity(ColumnConstants.PROJECT_COMMENTS, "v_project_comments", DG_EDITOR_POSTPROCESSOR); - no_entity(ColumnConstants.PROJECT_DESCRIPTION, "v_description", DG_EDITOR_POSTPROCESSOR); - no_entity(ColumnConstants.PROJECT_IMPACT, "v_proj_impact", DG_EDITOR_POSTPROCESSOR); - no_entity(ColumnConstants.RESULTS, "v_results", DG_EDITOR_POSTPROCESSOR); - no_entity(ColumnConstants.PURPOSE, "v_purposes", DG_EDITOR_POSTPROCESSOR); - no_entity(ColumnConstants.PROGRAM_DESCRIPTION, "v_program_description", DG_EDITOR_POSTPROCESSOR); - - addIndicatorColumns(); - - degenerate_dimension(ColumnConstants.PROJECT_IMPLEMENTING_UNIT, "v_project_impl_unit", catsDimension); - no_entity(ColumnConstants.PROJECT_MANAGEMENT, "v_project_management", DG_EDITOR_POSTPROCESSOR); - no_dimension(ColumnConstants.REGIONAL_OBSERVATIONS, "v_regional_observations"); - no_dimension(ColumnConstants.REGIONAL_OBSERVATIONS_ACTORS, "v_regional_observations_actors"); - date_column(ColumnConstants.REGIONAL_OBSERVATIONS_DATE, "v_regional_observations_date"); - no_dimension(ColumnConstants.REGIONAL_OBSERVATIONS_MEASURES, "v_regional_observations_measures"); - - single_dimension(ColumnConstants.RELATED_PLEDGES, "v_related_pledges", PLEDGES_LEVEL_COLUMN); - - single_dimension(ColumnConstants.RELATED_PROJECTS, "v_ni_pledges_projects", ACT_LEVEL_COLUMN); - no_dimension(ColumnConstants.SECTOR_MINISTRY_CONTACT_ORGANIZATION, "v_sect_min_cont_org"); - degenerate_dimension(ColumnConstants.SSC_MODALITIES, "v_ssc_modalities", catsDimension); - degenerate_dimension(ColumnConstants.STATUS, "v_status", catsDimension, true); - no_dimension(ColumnConstants.STRUCTURES_COLUMN, "v_structures"); - degenerate_dimension(ColumnConstants.TYPE_OF_ASSISTANCE, "v_terms_assist", catsDimension); - degenerate_dimension(ColumnConstants.TYPE_OF_COOPERATION, "v_type_of_cooperation", catsDimension); - degenerate_dimension(ColumnConstants.TYPE_OF_IMPLEMENTATION, "v_type_of_implementation", catsDimension, - true); - no_dimension(ColumnConstants.APPROVAL_STATUS, "v_approval_status"); - degenerate_dimension(ColumnConstants.CONCESSIONALITY_LEVEL, "v_concessionality_level", catsDimension); - no_dimension(ColumnConstants.VALIDATION_STATUS, "v_validation_status"); - - degenerate_dimension(ColumnConstants.FUNDING_ID, "v_funding_id", fundingDimension); - - // views with only 2 columns - no_entity(ColumnConstants.DRAFT, "v_drafts"); - degenerate_dimension(ColumnConstants.AC_CHAPTER, "v_ac_chapters", catsDimension, true); - degenerate_dimension(ColumnConstants.ACCESSION_INSTRUMENT, "v_accession_instruments", catsDimension, true); - degenerate_dimension(ColumnConstants.ACTIVITY_CREATED_BY, "v_activity_creator", usersDimension); - no_entity(ColumnConstants.SUB_PROGRAM, "v_activity_subprogram"); - no_entity(ColumnConstants.AUDIT_SYSTEM, "v_audit_system", true); - no_entity(ColumnConstants.BUDGET_CODE_PROJECT_ID, "v_budget_code_project_id"); - degenerate_dimension(ColumnConstants.BUDGET_DEPARTMENT, "v_budget_department", departmentsDimension); - single_dimension(ColumnConstants.BUDGET_SECTOR, "v_budget_sector", RAW_SCT_LEVEL_COLUMN); - degenerate_dimension(ColumnConstants.CAPITAL_EXPENDITURE, "v_capital_and_exp", boolDimension); - no_entity(ColumnConstants.CRIS_NUMBER, "v_cris_number"); - no_entity(ColumnConstants.IATI_IDENTIFIER, "v_iati_identifier"); - no_entity(ColumnConstants.CURRENT_COMPLETION_DATE_COMMENTS, "v_actual_completion_date_comments"); - no_entity(ColumnConstants.DONOR_CONTACT_EMAIL, "v_donor_cont_email"); - no_entity(ColumnConstants.DONOR_CONTACT_FAX, "v_donor_cont_fax"); - no_entity(ColumnConstants.DONOR_CONTACT_NAME, "v_donor_cont_name"); - no_entity(ColumnConstants.DONOR_CONTACT_PHONE, "v_donor_cont_phone"); - no_entity(ColumnConstants.DONOR_CONTACT_TITLE, "v_donor_cont_title"); - no_entity(ColumnConstants.FINAL_DATE_FOR_DISBURSEMENTS_COMMENTS, "v_disbursements_date_comments"); - no_entity(ColumnConstants.FUNDING_ORGANIZATION_ID, "v_funding_org_id"); - no_entity(ColumnConstants.FY, "v_budget_extras_fy"); - - no_entity(ColumnConstants.GOVERNMENT_AGREEMENT_NUMBER, "v_gov_agreement_number"); - no_entity(ColumnConstants.GPI_1_Q6, "v_ni_gpi_indicator_1_q6"); - no_entity(ColumnConstants.GPI_1_Q6_DESCRIPTION, "v_ni_gpi_indicator_1_q6_description"); - no_entity(ColumnConstants.GPI_1_Q7, "v_ni_gpi_indicator_1_q7"); - no_entity(ColumnConstants.GPI_1_Q8, "v_ni_gpi_indicator_1_q8"); - no_entity(ColumnConstants.GPI_1_Q9, "v_ni_gpi_indicator_1_q9"); - no_entity(ColumnConstants.GPI_1_Q10, "v_ni_gpi_indicator_1_q10"); - no_entity(ColumnConstants.GPI_1_Q10_DESCRIPTION, "v_ni_gpi_indicator_1_q10_description"); - degenerate_dimension(ColumnConstants.HAS_EXECUTING_AGENCY, "v_has_executing_agency", boolDimension); - no_entity(ColumnConstants.IMPLEMENTING_EXECUTING_AGENCY_CONTACT_EMAIL, "v_impl_ex_cont_email"); - no_entity(ColumnConstants.IMPLEMENTING_EXECUTING_AGENCY_CONTACT_FAX, "v_impl_ex_cont_fax"); - no_entity(ColumnConstants.IMPLEMENTING_EXECUTING_AGENCY_CONTACT_NAME, "v_impl_ex_cont_name"); - no_entity(ColumnConstants.IMPLEMENTING_EXECUTING_AGENCY_CONTACT_ORGANIZATION, "v_impl_ex_cont_org"); - no_entity(ColumnConstants.IMPLEMENTING_EXECUTING_AGENCY_CONTACT_PHONE, "v_impl_ex_cont_phone"); - no_entity(ColumnConstants.IMPLEMENTING_EXECUTING_AGENCY_CONTACT_TITLE, "v_impl_ex_cont_title"); - degenerate_dimension(ColumnConstants.JOINT_CRITERIA, "v_yes_no_joint_criteria", boolDimension); - degenerate_dimension(ColumnConstants.GOVERNMENT_APPROVAL_PROCEDURES, "v_yes_no_government_approval_proc", boolDimension); - no_entity(ColumnConstants.MINISTRY_CODE, "v_minsitry_code"); - no_entity(ColumnConstants.MINISTRY_OF_FINANCE_CONTACT_EMAIL, "v_mofed_cont_email"); - no_entity(ColumnConstants.MINISTRY_OF_FINANCE_CONTACT_FAX, "v_mofed_cont_fax"); - no_entity(ColumnConstants.MINISTRY_OF_FINANCE_CONTACT_NAME, "v_mofed_cont_name"); - no_entity(ColumnConstants.MINISTRY_OF_FINANCE_CONTACT_ORGANIZATION, "v_mofed_cont_org"); - no_entity(ColumnConstants.MINISTRY_OF_FINANCE_CONTACT_PHONE, "v_mofed_cont_phone"); - no_entity(ColumnConstants.MINISTRY_OF_FINANCE_CONTACT_TITLE, "v_mofed_cont_title"); - degenerate_dimension(ColumnConstants.MULTI_DONOR, "v_multi_donor", boolDimension); - no_entity(ColumnConstants.PROJECT_CODE, "v_project_code"); - no_entity(ColumnConstants.PROJECT_COORDINATOR_CONTACT_EMAIL, "v_proj_coordr_cont_email"); - no_entity(ColumnConstants.PROJECT_COORDINATOR_CONTACT_FAX, "v_proj_coordr_cont_fax"); - no_entity(ColumnConstants.PROJECT_COORDINATOR_CONTACT_NAME, "v_proj_coordr_cont_name"); - no_entity(ColumnConstants.PROJECT_COORDINATOR_CONTACT_ORGANIZATION, "v_proj_coordr_cont_org"); - no_entity(ColumnConstants.PROJECT_COORDINATOR_CONTACT_PHONE, "v_proj_coordr_cont_phone"); - no_entity(ColumnConstants.PROJECT_COORDINATOR_CONTACT_TITLE, "v_proj_coordr_cont_title"); - no_entity(ColumnConstants.PROPOSED_PROJECT_LIFE, "v_proposed_project_life"); - no_entity(ColumnConstants.REPORTING_SYSTEM, "v_reporting_system", true); - no_entity(ColumnConstants.SECTOR_MINISTRY_CONTACT_EMAIL, "v_sect_min_cont_email"); - no_entity(ColumnConstants.SECTOR_MINISTRY_CONTACT_FAX, "v_sect_min_cont_fax"); - no_entity(ColumnConstants.SECTOR_MINISTRY_CONTACT_NAME, "v_sect_min_cont_name"); - no_entity(ColumnConstants.SECTOR_MINISTRY_CONTACT_PHONE, "v_sect_min_cont_phone"); - no_entity(ColumnConstants.SECTOR_MINISTRY_CONTACT_TITLE, "v_sect_min_cont_title"); - no_entity(ColumnConstants.SUB_VOTE, "v_subvote"); - no_entity(ColumnConstants.VOTE, "v_vote"); - - single_dimension(ColumnConstants.BENEFICIARY_AGENCY__DEPARTMENT_DIVISION, "v_beneficiary_agency_info", BA_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); - single_dimension(ColumnConstants.CONTRACTING_AGENCY_DEPARTMENT_DIVISION, "v_contracting_agency_info", CA_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); - single_dimension(ColumnConstants.EXECUTING_AGENCY_DEPARTMENT_DIVISION, "v_executing_agency_info", EA_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); - single_dimension(ColumnConstants.IMPLEMENTING_AGENCY_DEPARTMENT_DIVISION, "v_implementing_agency_info", IA_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); - single_dimension(ColumnConstants.REGIONAL_GROUP_DEPARTMENT_DIVISION, "v_regional_group_info", RG_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); - single_dimension(ColumnConstants.RESPONSIBLE_ORGANIZATION_DEPARTMENT_DIVISION, "v_responsible_org_info", RO_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); - single_dimension(ColumnConstants.SECTOR_GROUP_DEPARTMENT_DIVISION, "v_sector_group_info", SG_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); - - single_dimension(ColumnConstants.DONOR_AGENCY, "v_ni_donor_orgs", DONOR_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); - single_dimension(ColumnConstants.DONOR_GROUP, "v_ni_donor_orgsgroups", DONOR_DIM_USG.getLevelColumn(LEVEL_ORGANISATION_GROUP)); - single_dimension(ColumnConstants.DONOR_TYPE, "v_ni_donor_orgstypes", DONOR_DIM_USG.getLevelColumn(LEVEL_ORGANISATION_TYPE)); - single_dimension(ColumnConstants.DONOR_BUDGET_CODE, "v_ni_donor_orgbudget_code", - DONOR_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); - single_dimension(ColumnConstants.DONOR_COUNTRY, "v_ni_donor_orgs_country", - DN_COUNTRY_DIM_USG.getLevelColumn(0)); - - single_dimension(ColumnConstants.DONOR_ACRONYM, "v_ni_donor_orgsacronyms", DONOR_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); - - with_percentage(ColumnConstants.IMPLEMENTING_AGENCY, "v_implementing_agency", IA_DIM_USG, LEVEL_ORGANISATION); - with_percentage(ColumnConstants.IMPLEMENTING_AGENCY_GROUPS, "v_implementing_agency_groups", IA_DIM_USG, LEVEL_ORGANISATION_GROUP); - with_percentage(ColumnConstants.IMPLEMENTING_AGENCY_TYPE, "v_implementing_agency_type", IA_DIM_USG, LEVEL_ORGANISATION_TYPE); - - with_percentage(ColumnConstants.BENEFICIARY_AGENCY, "v_beneficiary_agency", BA_DIM_USG, LEVEL_ORGANISATION); - with_percentage(ColumnConstants.BENEFICIARY_AGENCY_GROUPS, "v_beneficiary_agency_groups", BA_DIM_USG, LEVEL_ORGANISATION_GROUP); - with_percentage(ColumnConstants.BENEFICIARY_AGENCY_TYPE, "v_beneficiary_agency_type", BA_DIM_USG, - LEVEL_ORGANISATION_TYPE); - with_percentage(ColumnConstants.BENEFICIARY_AGENCY_COUNTRY, "v_beneficiary_agency_country", - BA_COUNTRY_DIM_USG, ADM_LEVEL_0); - - - with_percentage(ColumnConstants.EXECUTING_AGENCY, "v_executing_agency", EA_DIM_USG, LEVEL_ORGANISATION); - with_percentage(ColumnConstants.EXECUTING_AGENCY_GROUPS, "v_executing_agency_groups", EA_DIM_USG, LEVEL_ORGANISATION_GROUP); - with_percentage(ColumnConstants.EXECUTING_AGENCY_TYPE, "v_executing_agency_type", EA_DIM_USG, LEVEL_ORGANISATION_TYPE); - with_percentage(ColumnConstants.EXECUTING_AGENCY_COUNTRY, "v_executing_agency_country", - EA_COUNTRY_DIM_USG, ADM_LEVEL_0); - - with_percentage(ColumnConstants.RESPONSIBLE_ORGANIZATION, "v_responsible_organisation", RO_DIM_USG, LEVEL_ORGANISATION); - with_percentage(ColumnConstants.RESPONSIBLE_ORGANIZATION_GROUPS, "v_responsible_org_groups", RO_DIM_USG, LEVEL_ORGANISATION_GROUP); - with_percentage(ColumnConstants.RESPONSIBLE_ORGANIZATION_TYPE, "v_responsible_org_type", RO_DIM_USG, - LEVEL_ORGANISATION_TYPE); - - with_percentage(ColumnConstants.CONTRACTING_AGENCY, "v_contracting_agency", CA_DIM_USG, LEVEL_ORGANISATION); - single_dimension(ColumnConstants.CONTRACTING_AGENCY_ACRONYM, "v_contracting_agency_acronym", CA_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); - with_percentage(ColumnConstants.CONTRACTING_AGENCY_GROUPS, "v_contracting_agency_groups", CA_DIM_USG, LEVEL_ORGANISATION_GROUP); - with_percentage(ColumnConstants.CONTRACTING_AGENCY_TYPE, "v_contracting_agency_type", CA_DIM_USG, - LEVEL_ORGANISATION_TYPE); - - with_percentage(ColumnConstants.REGIONAL_GROUP, "v_regional_group", RG_DIM_USG, LEVEL_ORGANISATION_GROUP); - - with_percentage(ColumnConstants.SECTOR_GROUP, "v_sector_group", SG_DIM_USG, LEVEL_ORGANISATION_GROUP); - - single_dimension(ColumnConstants.PRIMARY_SECTOR_CODE_OFFICIAL, "v_sector_code_official", PS_DIM_USG - .getLevelColumn(LEVEL_ROOT)); - with_percentage(ColumnConstants.PRIMARY_SECTOR, "v_sectors", PS_DIM_USG, LEVEL_ROOT); - with_percentage(ColumnConstants.PRIMARY_SECTOR_SUB_SECTOR, "v_sub_sectors", PS_DIM_USG, LEVEL_SUBSECTOR); - with_percentage(ColumnConstants.PRIMARY_SECTOR_SUB_SUB_SECTOR, "v_sub_sub_sectors", PS_DIM_USG, LEVEL_SUBSUBSECTOR); - - with_percentage(ColumnConstants.SECONDARY_SECTOR, "v_secondary_sectors", SS_DIM_USG, LEVEL_ROOT); - with_percentage(ColumnConstants.SECONDARY_SECTOR_SUB_SECTOR, "v_secondary_sub_sectors", SS_DIM_USG, LEVEL_SUBSECTOR); - with_percentage(ColumnConstants.SECONDARY_SECTOR_SUB_SUB_SECTOR, "v_secondary_sub_sub_sectors", SS_DIM_USG, LEVEL_SUBSUBSECTOR); - - with_percentage(ColumnConstants.TERTIARY_SECTOR, "v_tertiary_sectors", TS_DIM_USG, LEVEL_ROOT); - with_percentage(ColumnConstants.TERTIARY_SECTOR_SUB_SECTOR, "v_tertiary_sub_sectors", TS_DIM_USG, - LEVEL_SUBSECTOR); - with_percentage(ColumnConstants.TERTIARY_SECTOR_SUB_SUB_SECTOR, "v_tertiary_sub_sub_sectors", TS_DIM_USG, - LEVEL_SUBSUBSECTOR); - - with_percentage(ColumnConstants.QUATERNARY_SECTOR, "v_quaternary_sectors", Q4S_DIM_USG, LEVEL_ROOT); - with_percentage(ColumnConstants.QUATERNARY_SECTOR_SUB_SECTOR, "v_quaternary_sub_sectors", Q4S_DIM_USG, - LEVEL_SUBSECTOR); - with_percentage(ColumnConstants.QUATERNARY_SECTOR_SUB_SUB_SECTOR, "v_quaternary_sub_sub_sectors", Q4S_DIM_USG, - LEVEL_SUBSUBSECTOR); - - with_percentage(ColumnConstants.QUINARY_SECTOR, "v_quinary_sectors", Q5S_DIM_USG, LEVEL_ROOT); - with_percentage(ColumnConstants.QUINARY_SECTOR_SUB_SECTOR, "v_quinary_sub_sectors", Q5S_DIM_USG, - LEVEL_SUBSECTOR); - with_percentage(ColumnConstants.QUINARY_SECTOR_SUB_SUB_SECTOR, "v_quinary_sub_sub_sectors", Q5S_DIM_USG, - LEVEL_SUBSUBSECTOR); - - with_percentage(ColumnConstants.SECTOR_TAG, "v_sectors", TAG_S_DIM_USG, LEVEL_ROOT); - with_percentage(ColumnConstants.SECTOR_TAG_SUB_SECTOR, "v_tag_sub_sectors", TAG_S_DIM_USG, LEVEL_SUBSECTOR); - with_percentage(ColumnConstants.SECTOR_TAG_SUB_SUB_SECTOR, "v_tag_sub_sub_sectors", TAG_S_DIM_USG, - LEVEL_SUBSUBSECTOR); - - with_percentage(ColumnConstants.PRIMARY_PROGRAM_LEVEL_0, "v_primaryprogram_level_0", PP_DIM_USG, LEVEL_0); - with_percentage(ColumnConstants.PRIMARY_PROGRAM_LEVEL_1, "v_primaryprogram_level_1", PP_DIM_USG, LEVEL_1); - with_percentage(ColumnConstants.PRIMARY_PROGRAM_LEVEL_2, "v_primaryprogram_level_2", PP_DIM_USG, LEVEL_2); - with_percentage(ColumnConstants.PRIMARY_PROGRAM_LEVEL_3, "v_primaryprogram_level_3", PP_DIM_USG, LEVEL_3); - with_percentage(ColumnConstants.PRIMARY_PROGRAM_LEVEL_4, "v_primaryprogram_level_4", PP_DIM_USG, LEVEL_4); - with_percentage(ColumnConstants.PRIMARY_PROGRAM_LEVEL_5, "v_primaryprogram_level_5", PP_DIM_USG, LEVEL_5); - with_percentage(ColumnConstants.PRIMARY_PROGRAM_LEVEL_6, "v_primaryprogram_level_6", PP_DIM_USG, LEVEL_6); - with_percentage(ColumnConstants.PRIMARY_PROGRAM_LEVEL_7, "v_primaryprogram_level_7", PP_DIM_USG, LEVEL_7); - with_percentage(ColumnConstants.PRIMARY_PROGRAM_LEVEL_8, "v_primaryprogram_level_8", PP_DIM_USG, LEVEL_8); - - with_percentage(ColumnConstants.INDIRECT_PRIMARY_PROGRAM_LEVEL_0, "v_indirect_primaryprogram_level_0", - IPP_DIM_USG, LEVEL_0); - with_percentage(ColumnConstants.INDIRECT_PRIMARY_PROGRAM_LEVEL_1, "v_indirect_primaryprogram_level_1", - IPP_DIM_USG, LEVEL_1); - with_percentage(ColumnConstants.INDIRECT_PRIMARY_PROGRAM_LEVEL_2, "v_indirect_primaryprogram_level_2", - IPP_DIM_USG, LEVEL_2); - with_percentage(ColumnConstants.INDIRECT_PRIMARY_PROGRAM_LEVEL_3, "v_indirect_primaryprogram_level_3", - IPP_DIM_USG, LEVEL_3); - with_percentage(ColumnConstants.INDIRECT_PRIMARY_PROGRAM_LEVEL_4, "v_indirect_primaryprogram_level_4", - IPP_DIM_USG, LEVEL_4); - with_percentage(ColumnConstants.INDIRECT_PRIMARY_PROGRAM_LEVEL_5, "v_indirect_primaryprogram_level_5", - IPP_DIM_USG, LEVEL_5); - with_percentage(ColumnConstants.INDIRECT_PRIMARY_PROGRAM_LEVEL_6, "v_indirect_primaryprogram_level_6", - IPP_DIM_USG, LEVEL_6); - with_percentage(ColumnConstants.INDIRECT_PRIMARY_PROGRAM_LEVEL_7, "v_indirect_primaryprogram_level_7", - IPP_DIM_USG, LEVEL_7); - with_percentage(ColumnConstants.INDIRECT_PRIMARY_PROGRAM_LEVEL_8, "v_indirect_primaryprogram_level_8", - IPP_DIM_USG, LEVEL_8); - - with_percentage(ColumnConstants.SECONDARY_PROGRAM_LEVEL_0, "v_secondaryprogram_level_0", SP_DIM_USG, LEVEL_0); - with_percentage(ColumnConstants.SECONDARY_PROGRAM_LEVEL_1, "v_secondaryprogram_level_1", SP_DIM_USG, LEVEL_1); - with_percentage(ColumnConstants.SECONDARY_PROGRAM_LEVEL_2, "v_secondaryprogram_level_2", SP_DIM_USG, LEVEL_2); - with_percentage(ColumnConstants.SECONDARY_PROGRAM_LEVEL_3, "v_secondaryprogram_level_3", SP_DIM_USG, LEVEL_3); - with_percentage(ColumnConstants.SECONDARY_PROGRAM_LEVEL_4, "v_secondaryprogram_level_4", SP_DIM_USG, LEVEL_4); - with_percentage(ColumnConstants.SECONDARY_PROGRAM_LEVEL_5, "v_secondaryprogram_level_5", SP_DIM_USG, LEVEL_5); - with_percentage(ColumnConstants.SECONDARY_PROGRAM_LEVEL_6, "v_secondaryprogram_level_6", SP_DIM_USG, LEVEL_6); - with_percentage(ColumnConstants.SECONDARY_PROGRAM_LEVEL_7, "v_secondaryprogram_level_7", SP_DIM_USG, LEVEL_7); - with_percentage(ColumnConstants.SECONDARY_PROGRAM_LEVEL_8, "v_secondaryprogram_level_8", SP_DIM_USG, LEVEL_8); - - with_percentage(ColumnConstants.TERTIARY_PROGRAM_LEVEL_0, "v_tertiaryprogram_level_0", TP_DIM_USG, LEVEL_0); - with_percentage(ColumnConstants.TERTIARY_PROGRAM_LEVEL_1, "v_tertiaryprogram_level_1", TP_DIM_USG, LEVEL_1); - with_percentage(ColumnConstants.TERTIARY_PROGRAM_LEVEL_2, "v_tertiaryprogram_level_2", TP_DIM_USG, LEVEL_2); - with_percentage(ColumnConstants.TERTIARY_PROGRAM_LEVEL_3, "v_tertiaryprogram_level_3", TP_DIM_USG, LEVEL_3); - with_percentage(ColumnConstants.TERTIARY_PROGRAM_LEVEL_4, "v_tertiaryprogram_level_4", TP_DIM_USG, LEVEL_4); - with_percentage(ColumnConstants.TERTIARY_PROGRAM_LEVEL_5, "v_tertiaryprogram_level_5", TP_DIM_USG, LEVEL_5); - with_percentage(ColumnConstants.TERTIARY_PROGRAM_LEVEL_6, "v_tertiaryprogram_level_6", TP_DIM_USG, LEVEL_6); - with_percentage(ColumnConstants.TERTIARY_PROGRAM_LEVEL_7, "v_tertiaryprogram_level_7", TP_DIM_USG, LEVEL_7); - with_percentage(ColumnConstants.TERTIARY_PROGRAM_LEVEL_8, "v_tertiaryprogram_level_8", TP_DIM_USG, LEVEL_8); - - with_percentage(ColumnConstants.NATIONAL_PLANNING_OBJECTIVES_LEVEL_0, "v_nationalobjectives_level_0", - NPO_DIM_USG, LEVEL_0); - with_percentage(ColumnConstants.NATIONAL_PLANNING_OBJECTIVES_LEVEL_1, "v_nationalobjectives_level_1", NPO_DIM_USG, LEVEL_1); - with_percentage(ColumnConstants.NATIONAL_PLANNING_OBJECTIVES_LEVEL_2, "v_nationalobjectives_level_2", NPO_DIM_USG, LEVEL_2); - with_percentage(ColumnConstants.NATIONAL_PLANNING_OBJECTIVES_LEVEL_3, "v_nationalobjectives_level_3", NPO_DIM_USG, LEVEL_3); - with_percentage(ColumnConstants.NATIONAL_PLANNING_OBJECTIVES_LEVEL_4, "v_nationalobjectives_level_4", NPO_DIM_USG, LEVEL_4); - with_percentage(ColumnConstants.NATIONAL_PLANNING_OBJECTIVES_LEVEL_5, "v_nationalobjectives_level_5", NPO_DIM_USG, LEVEL_5); - with_percentage(ColumnConstants.NATIONAL_PLANNING_OBJECTIVES_LEVEL_6, "v_nationalobjectives_level_6", NPO_DIM_USG, LEVEL_6); - with_percentage(ColumnConstants.NATIONAL_PLANNING_OBJECTIVES_LEVEL_7, "v_nationalobjectives_level_7", NPO_DIM_USG, LEVEL_7); - with_percentage(ColumnConstants.NATIONAL_PLANNING_OBJECTIVES_LEVEL_8, "v_nationalobjectives_level_8", NPO_DIM_USG, LEVEL_8); - - with_percentage(ColumnConstants.LOCATION_ADM_LEVEL_0, "v_adm_level_0", LOC_DIM_USG, ADM_LEVEL_0); - with_percentage(ColumnConstants.LOCATION_ADM_LEVEL_1, "v_adm_level_1", LOC_DIM_USG, ADM_LEVEL_1); - with_percentage(ColumnConstants.LOCATION_ADM_LEVEL_2, "v_adm_level_2", LOC_DIM_USG, ADM_LEVEL_2); - with_percentage(ColumnConstants.LOCATION_ADM_LEVEL_3, "v_adm_level_3", LOC_DIM_USG, ADM_LEVEL_3); - with_percentage(ColumnConstants.LOCATION_ADM_LEVEL_4, "v_adm_level_4", LOC_DIM_USG, ADM_LEVEL_4); - with_percentage(ColumnConstants.LOCATION, "v_raw_locations", LOC_DIM_USG, LEVEL_RAW); - with_percentage(ColumnConstants.GEOCODE, "v_geocodes", LOC_DIM_USG, LEVEL_RAW); - degenerate_dimension(ColumnConstants.RAW_LOCATION, "v_raw_locations", RAW_LOCS_DIMENSION); - - single_dimension(ColumnConstants.REGIONAL_REGION, "v_adm_level_1", LOC_DIM_USG.getLevelColumn(ADM_LEVEL_1)); - - single_dimension(ColumnConstants.GRACE_PERIOD, "v_grace_period", DONOR_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); - date_column(ColumnConstants.MATURITY, "v_maturity", DONOR_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); - date_column(ColumnConstants.RATIFICATION_DATE, "v_ratification_date", DONOR_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); - single_dimension(ColumnConstants.INTEREST_RATE, "v_interest_rate", DONOR_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); - - addMtefColumns(); - addPseudoComputedColumns(); - addColumn(new PPCColumn(ColumnConstants.PROPOSED_PROJECT_AMOUNT, "v_proposed_cost")); - amountColumns.add(ColumnConstants.PROPOSED_PROJECT_AMOUNT); - addColumn(new PPCColumn(ColumnConstants.REVISED_PROJECT_AMOUNT, "v_revised_project_cost")); - amountColumns.add(ColumnConstants.REVISED_PROJECT_AMOUNT); - - date_column(ColumnConstants.ACTIVITY_CREATED_ON, "v_creation_date"); - date_column(ColumnConstants.ACTIVITY_UPDATED_ON, "v_updated_date"); - date_column(ColumnConstants.ACTUAL_APPROVAL_DATE, "v_actual_approval_date"); - date_column(ColumnConstants.ACTUAL_COMPLETION_DATE, "v_actual_completion_date"); - date_column(ColumnConstants.ACTUAL_START_DATE, "v_actual_start_date"); - date_column(ColumnConstants.DONOR_COMMITMENT_DATE, "v_donor_commitment_date"); - date_column(ColumnConstants.FINAL_DATE_FOR_CONTRACTING, "v_contracting_date"); - date_column(ColumnConstants.FINAL_DATE_FOR_DISBURSEMENTS, "v_disbursements_date"); - date_column(ColumnConstants.FUNDING_CLASSIFICATION_DATE, "v_funding_classification_date"); - date_column(ColumnConstants.EFFECTIVE_FUNDING_DATE, "v_effective_funding_date"); - date_column(ColumnConstants.FUNDING_CLOSING_DATE, "v_funding_closing_date"); - date_column(ColumnConstants.FUNDING_END_DATE, "v_funding_end_date"); - date_column(ColumnConstants.FUNDING_START_DATE, "v_funding_start_date"); - date_column(ColumnConstants.ORIGINAL_COMPLETION_DATE, "v_original_completion_date"); - date_column(ColumnConstants.PROPOSED_APPROVAL_DATE, "v_actual_proposed_date"); - date_column(ColumnConstants.PLEDGES_DETAIL_START_DATE, "v_pledges_funding_start_date"); - date_column(ColumnConstants.PLEDGES_DETAIL_END_DATE, "v_pledges_funding_end_date"); - date_column(ColumnConstants.PROPOSED_COMPLETION_DATE, "v_proposed_completion_date"); - date_column(ColumnConstants.PROPOSED_START_DATE, "v_proposed_start_date"); - - degenerate_dimension(ColumnConstants.PROJECT_RESULTS_AVAILABLE, "v_project_results_available", boolDimension); - no_entity(ColumnConstants.PROJECT_RESULTS_LINK, "v_project_results_link"); - no_entity(ColumnConstants.PROJECT_JOINT_DECISION, "v_project_joint_decision"); - no_entity(ColumnConstants.PROJECT_MONITORING, "v_project_monitoring"); - no_entity(ColumnConstants.PROJECT_SUSTAINABILITY, "v_project_sustainability"); - no_entity(ColumnConstants.PROJECT_PROBLEMS, "v_project_problems"); - degenerate_dimension(ColumnConstants.VULNERABLE_GROUP, "v_vulnerable_group", catsDimension); - - addPledgeColumns(); - - addTrivialMeasures(); - addUnfilteredTrivialMeasures(); - addFundingFlowMeasures(); - addTaggedMeasures(); - addFilteredTrivialMeasures(); - addComputedLinearMeasures(); - addSscMeasures(); - addFormulaMeasures(); - - addDividingMeasure(MeasureConstants.PLEDGES_PERCENTAGE_OF_DISBURSEMENT, MeasureConstants.ACTUAL_DISBURSEMENTS, false); - addMeasure(new ForecastExecutionRateMeasure(MeasureConstants.FORECAST_EXECUTION_RATE)); - addColumn(new NiComputedColumn<>(ColumnConstants.ACTIVITY_COUNT, null, GeneratedIntegerBehaviour.ENTITIES_COUNT_BEHAVIOUR, columnDescriptions.get(ColumnConstants.ACTIVITY_COUNT))); - - subDimensions.initialize(getColumns()); - - donorFundingColumn = new AmpFundingColumn(AmpFundingColumn.ENTITY_DONOR_FUNDING, "v_ni_donor_funding", subDimensions); - pledgeFundingColumn = new AmpFundingColumn(AmpFundingColumn.ENTITY_PLEDGE_FUNDING, "v_ni_pledges_funding", subDimensions); - componentFundingColumn = new AmpFundingColumn(AmpFundingColumn.ENTITY_COMPONENT_FUNDING, "v_ni_component_funding", subDimensions); - gpiFundingColumn = new AmpFundingColumn(AmpFundingColumn.ENTITY_GPI_FUNDING, "v_ni_gpi_funding", subDimensions); - regionalFundingColumn = new AmpFundingColumn(AmpFundingColumn.ENTITY_REGIONAL_FUNDING, - "v_ni_regional_funding", subDimensions); - }catch (Exception exception) + }catch (Exception e) { - logger.info("Error occurred in ampreportschema: "+ exception.getMessage(),exception); + e.printStackTrace(); } + no_dimension(ColumnConstants.DONOR_CONTACT_ORGANIZATION, "v_donor_cont_org"); + no_entity(ColumnConstants.ENVIRONMENT, "v_environment", DG_EDITOR_POSTPROCESSOR); + no_entity(ColumnConstants.EQUAL_OPPORTUNITY, "v_equalopportunity", DG_EDITOR_POSTPROCESSOR); + no_entity(ColumnConstants.ISSUES___MEASURES___ACTORS, "v_issues_measure_actors", DG_EDITOR_POSTPROCESSOR); + degenerate_dimension(ColumnConstants.EXPENDITURE_CLASS, "v_expenditure_class", catsDimension); + degenerate_dimension(ColumnConstants.FINANCIAL_INSTRUMENT, "v_financial_instrument", catsDimension); + degenerate_dimension(ColumnConstants.FINANCING_INSTRUMENT, "v_financing_instrument", catsDimension); + degenerate_dimension(ColumnConstants.FUNDING_STATUS, "v_funding_status", catsDimension); + degenerate_dimension(ColumnConstants.HUMANITARIAN_AID, "v_humanitarian_aid", boolDimension); + degenerate_dimension(ColumnConstants.MULTI_STAKEHOLDER_PARTNERSHIP, "v_multi_stakeholder_partnership", + boolDimension); + degenerate_dimension(ColumnConstants.IMPLEMENTATION_LEVEL, "v_implementation_level", catsDimension); + degenerate_dimension(ColumnConstants.PERFORMANCE_ALERT_TYPE, "v_performance_alert_type", + PERF_TYPE_DIM, PERFORMANCE_ALERT_POSTPROCESSOR); + degenerate_dimension(ColumnConstants.PERFORMANCE_ALERT_LEVEL, "v_performance_alert_level", catsDimension); + degenerate_dimension(ColumnConstants.INDIRECT_ON_BUDGET, "v_indirect_on_budget", boolDimension); + degenerate_dimension(ColumnConstants.INSTITUTIONS, "v_institutions", catsDimension, true); + no_dimension(ColumnConstants.LINE_MINISTRY_OBSERVATIONS, "v_line_ministry_observations"); + no_dimension(ColumnConstants.LINE_MINISTRY_OBSERVATIONS_ACTORS, "v_line_ministry_observations_actors"); + date_column(ColumnConstants.LINE_MINISTRY_OBSERVATIONS_DATE, "v_line_ministry_observations_date"); + no_dimension(ColumnConstants.LINE_MINISTRY_OBSERVATIONS_MEASURES, "v_line_ministry_observations_measures"); + no_dimension(ColumnConstants.MEASURES_TAKEN, "v_measures_taken"); + no_entity(ColumnConstants.MINORITIES, "v_minorities", DG_EDITOR_POSTPROCESSOR); + degenerate_dimension(ColumnConstants.MODALITIES, "v_modalities", catsDimension, true); + degenerate_dimension(ColumnConstants.MODE_OF_PAYMENT, "v_mode_of_payment", catsDimension); + degenerate_dimension(ColumnConstants.ACTIVITY_BUDGET, "v_activity_budget", catsDimension, true); + no_dimension(ColumnConstants.ORGANIZATIONS_AND_PROJECT_ID, "v_project_id"); + degenerate_dimension(ColumnConstants.PAYMENT_CAPITAL___RECURRENT, "v_mode_of_payment_capital_recurrent", catsDimension); + degenerate_dimension(ColumnConstants.PROCUREMENT_SYSTEM, "v_procurement_system", catsDimension, true); + degenerate_dimension(ColumnConstants.PROJECT_CATEGORY, "v_project_category", catsDimension, true); + no_entity(ColumnConstants.PROJECT_COMMENTS, "v_project_comments", DG_EDITOR_POSTPROCESSOR); + no_entity(ColumnConstants.PROJECT_DESCRIPTION, "v_description", DG_EDITOR_POSTPROCESSOR); + no_entity(ColumnConstants.PROJECT_IMPACT, "v_proj_impact", DG_EDITOR_POSTPROCESSOR); + no_entity(ColumnConstants.RESULTS, "v_results", DG_EDITOR_POSTPROCESSOR); + no_entity(ColumnConstants.PURPOSE, "v_purposes", DG_EDITOR_POSTPROCESSOR); + no_entity(ColumnConstants.PROGRAM_DESCRIPTION, "v_program_description", DG_EDITOR_POSTPROCESSOR); + + addIndicatorColumns(); + + degenerate_dimension(ColumnConstants.PROJECT_IMPLEMENTING_UNIT, "v_project_impl_unit", catsDimension); + no_entity(ColumnConstants.PROJECT_MANAGEMENT, "v_project_management", DG_EDITOR_POSTPROCESSOR); + no_dimension(ColumnConstants.REGIONAL_OBSERVATIONS, "v_regional_observations"); + no_dimension(ColumnConstants.REGIONAL_OBSERVATIONS_ACTORS, "v_regional_observations_actors"); + date_column(ColumnConstants.REGIONAL_OBSERVATIONS_DATE, "v_regional_observations_date"); + no_dimension(ColumnConstants.REGIONAL_OBSERVATIONS_MEASURES, "v_regional_observations_measures"); + + single_dimension(ColumnConstants.RELATED_PLEDGES, "v_related_pledges", PLEDGES_LEVEL_COLUMN); + + single_dimension(ColumnConstants.RELATED_PROJECTS, "v_ni_pledges_projects", ACT_LEVEL_COLUMN); + no_dimension(ColumnConstants.SECTOR_MINISTRY_CONTACT_ORGANIZATION, "v_sect_min_cont_org"); + degenerate_dimension(ColumnConstants.SSC_MODALITIES, "v_ssc_modalities", catsDimension); + degenerate_dimension(ColumnConstants.STATUS, "v_status", catsDimension, true); + no_dimension(ColumnConstants.STRUCTURES_COLUMN, "v_structures"); + degenerate_dimension(ColumnConstants.TYPE_OF_ASSISTANCE, "v_terms_assist", catsDimension); + degenerate_dimension(ColumnConstants.TYPE_OF_COOPERATION, "v_type_of_cooperation", catsDimension); + degenerate_dimension(ColumnConstants.TYPE_OF_IMPLEMENTATION, "v_type_of_implementation", catsDimension, + true); + no_dimension(ColumnConstants.APPROVAL_STATUS, "v_approval_status"); + degenerate_dimension(ColumnConstants.CONCESSIONALITY_LEVEL, "v_concessionality_level", catsDimension); + no_dimension(ColumnConstants.VALIDATION_STATUS, "v_validation_status"); + + degenerate_dimension(ColumnConstants.FUNDING_ID, "v_funding_id", fundingDimension); + + // views with only 2 columns + no_entity(ColumnConstants.DRAFT, "v_drafts"); + degenerate_dimension(ColumnConstants.AC_CHAPTER, "v_ac_chapters", catsDimension, true); + degenerate_dimension(ColumnConstants.ACCESSION_INSTRUMENT, "v_accession_instruments", catsDimension, true); + degenerate_dimension(ColumnConstants.ACTIVITY_CREATED_BY, "v_activity_creator", usersDimension); + no_entity(ColumnConstants.SUB_PROGRAM, "v_activity_subprogram"); + no_entity(ColumnConstants.AUDIT_SYSTEM, "v_audit_system", true); + no_entity(ColumnConstants.BUDGET_CODE_PROJECT_ID, "v_budget_code_project_id"); + degenerate_dimension(ColumnConstants.BUDGET_DEPARTMENT, "v_budget_department", departmentsDimension); + single_dimension(ColumnConstants.BUDGET_SECTOR, "v_budget_sector", RAW_SCT_LEVEL_COLUMN); + degenerate_dimension(ColumnConstants.CAPITAL_EXPENDITURE, "v_capital_and_exp", boolDimension); + no_entity(ColumnConstants.CRIS_NUMBER, "v_cris_number"); + no_entity(ColumnConstants.IATI_IDENTIFIER, "v_iati_identifier"); + no_entity(ColumnConstants.CURRENT_COMPLETION_DATE_COMMENTS, "v_actual_completion_date_comments"); + no_entity(ColumnConstants.DONOR_CONTACT_EMAIL, "v_donor_cont_email"); + no_entity(ColumnConstants.DONOR_CONTACT_FAX, "v_donor_cont_fax"); + no_entity(ColumnConstants.DONOR_CONTACT_NAME, "v_donor_cont_name"); + no_entity(ColumnConstants.DONOR_CONTACT_PHONE, "v_donor_cont_phone"); + no_entity(ColumnConstants.DONOR_CONTACT_TITLE, "v_donor_cont_title"); + no_entity(ColumnConstants.FINAL_DATE_FOR_DISBURSEMENTS_COMMENTS, "v_disbursements_date_comments"); + no_entity(ColumnConstants.FUNDING_ORGANIZATION_ID, "v_funding_org_id"); + no_entity(ColumnConstants.FY, "v_budget_extras_fy"); + + no_entity(ColumnConstants.GOVERNMENT_AGREEMENT_NUMBER, "v_gov_agreement_number"); + no_entity(ColumnConstants.GPI_1_Q6, "v_ni_gpi_indicator_1_q6"); + no_entity(ColumnConstants.GPI_1_Q6_DESCRIPTION, "v_ni_gpi_indicator_1_q6_description"); + no_entity(ColumnConstants.GPI_1_Q7, "v_ni_gpi_indicator_1_q7"); + no_entity(ColumnConstants.GPI_1_Q8, "v_ni_gpi_indicator_1_q8"); + no_entity(ColumnConstants.GPI_1_Q9, "v_ni_gpi_indicator_1_q9"); + no_entity(ColumnConstants.GPI_1_Q10, "v_ni_gpi_indicator_1_q10"); + no_entity(ColumnConstants.GPI_1_Q10_DESCRIPTION, "v_ni_gpi_indicator_1_q10_description"); + degenerate_dimension(ColumnConstants.HAS_EXECUTING_AGENCY, "v_has_executing_agency", boolDimension); + no_entity(ColumnConstants.IMPLEMENTING_EXECUTING_AGENCY_CONTACT_EMAIL, "v_impl_ex_cont_email"); + no_entity(ColumnConstants.IMPLEMENTING_EXECUTING_AGENCY_CONTACT_FAX, "v_impl_ex_cont_fax"); + no_entity(ColumnConstants.IMPLEMENTING_EXECUTING_AGENCY_CONTACT_NAME, "v_impl_ex_cont_name"); + no_entity(ColumnConstants.IMPLEMENTING_EXECUTING_AGENCY_CONTACT_ORGANIZATION, "v_impl_ex_cont_org"); + no_entity(ColumnConstants.IMPLEMENTING_EXECUTING_AGENCY_CONTACT_PHONE, "v_impl_ex_cont_phone"); + no_entity(ColumnConstants.IMPLEMENTING_EXECUTING_AGENCY_CONTACT_TITLE, "v_impl_ex_cont_title"); + degenerate_dimension(ColumnConstants.JOINT_CRITERIA, "v_yes_no_joint_criteria", boolDimension); + degenerate_dimension(ColumnConstants.GOVERNMENT_APPROVAL_PROCEDURES, "v_yes_no_government_approval_proc", boolDimension); + no_entity(ColumnConstants.MINISTRY_CODE, "v_minsitry_code"); + no_entity(ColumnConstants.MINISTRY_OF_FINANCE_CONTACT_EMAIL, "v_mofed_cont_email"); + no_entity(ColumnConstants.MINISTRY_OF_FINANCE_CONTACT_FAX, "v_mofed_cont_fax"); + no_entity(ColumnConstants.MINISTRY_OF_FINANCE_CONTACT_NAME, "v_mofed_cont_name"); + no_entity(ColumnConstants.MINISTRY_OF_FINANCE_CONTACT_ORGANIZATION, "v_mofed_cont_org"); + no_entity(ColumnConstants.MINISTRY_OF_FINANCE_CONTACT_PHONE, "v_mofed_cont_phone"); + no_entity(ColumnConstants.MINISTRY_OF_FINANCE_CONTACT_TITLE, "v_mofed_cont_title"); + degenerate_dimension(ColumnConstants.MULTI_DONOR, "v_multi_donor", boolDimension); + no_entity(ColumnConstants.PROJECT_CODE, "v_project_code"); + no_entity(ColumnConstants.PROJECT_COORDINATOR_CONTACT_EMAIL, "v_proj_coordr_cont_email"); + no_entity(ColumnConstants.PROJECT_COORDINATOR_CONTACT_FAX, "v_proj_coordr_cont_fax"); + no_entity(ColumnConstants.PROJECT_COORDINATOR_CONTACT_NAME, "v_proj_coordr_cont_name"); + no_entity(ColumnConstants.PROJECT_COORDINATOR_CONTACT_ORGANIZATION, "v_proj_coordr_cont_org"); + no_entity(ColumnConstants.PROJECT_COORDINATOR_CONTACT_PHONE, "v_proj_coordr_cont_phone"); + no_entity(ColumnConstants.PROJECT_COORDINATOR_CONTACT_TITLE, "v_proj_coordr_cont_title"); + no_entity(ColumnConstants.PROPOSED_PROJECT_LIFE, "v_proposed_project_life"); + no_entity(ColumnConstants.REPORTING_SYSTEM, "v_reporting_system", true); + no_entity(ColumnConstants.SECTOR_MINISTRY_CONTACT_EMAIL, "v_sect_min_cont_email"); + no_entity(ColumnConstants.SECTOR_MINISTRY_CONTACT_FAX, "v_sect_min_cont_fax"); + no_entity(ColumnConstants.SECTOR_MINISTRY_CONTACT_NAME, "v_sect_min_cont_name"); + no_entity(ColumnConstants.SECTOR_MINISTRY_CONTACT_PHONE, "v_sect_min_cont_phone"); + no_entity(ColumnConstants.SECTOR_MINISTRY_CONTACT_TITLE, "v_sect_min_cont_title"); + no_entity(ColumnConstants.SUB_VOTE, "v_subvote"); + no_entity(ColumnConstants.VOTE, "v_vote"); + + single_dimension(ColumnConstants.BENEFICIARY_AGENCY__DEPARTMENT_DIVISION, "v_beneficiary_agency_info", BA_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); + single_dimension(ColumnConstants.CONTRACTING_AGENCY_DEPARTMENT_DIVISION, "v_contracting_agency_info", CA_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); + single_dimension(ColumnConstants.EXECUTING_AGENCY_DEPARTMENT_DIVISION, "v_executing_agency_info", EA_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); + single_dimension(ColumnConstants.IMPLEMENTING_AGENCY_DEPARTMENT_DIVISION, "v_implementing_agency_info", IA_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); + single_dimension(ColumnConstants.REGIONAL_GROUP_DEPARTMENT_DIVISION, "v_regional_group_info", RG_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); + single_dimension(ColumnConstants.RESPONSIBLE_ORGANIZATION_DEPARTMENT_DIVISION, "v_responsible_org_info", RO_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); + single_dimension(ColumnConstants.SECTOR_GROUP_DEPARTMENT_DIVISION, "v_sector_group_info", SG_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); + + single_dimension(ColumnConstants.DONOR_AGENCY, "v_ni_donor_orgs", DONOR_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); + single_dimension(ColumnConstants.DONOR_GROUP, "v_ni_donor_orgsgroups", DONOR_DIM_USG.getLevelColumn(LEVEL_ORGANISATION_GROUP)); + single_dimension(ColumnConstants.DONOR_TYPE, "v_ni_donor_orgstypes", DONOR_DIM_USG.getLevelColumn(LEVEL_ORGANISATION_TYPE)); + single_dimension(ColumnConstants.DONOR_BUDGET_CODE, "v_ni_donor_orgbudget_code", + DONOR_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); + single_dimension(ColumnConstants.DONOR_COUNTRY, "v_ni_donor_orgs_country", + DN_COUNTRY_DIM_USG.getLevelColumn(0)); + + single_dimension(ColumnConstants.DONOR_ACRONYM, "v_ni_donor_orgsacronyms", DONOR_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); + + with_percentage(ColumnConstants.IMPLEMENTING_AGENCY, "v_implementing_agency", IA_DIM_USG, LEVEL_ORGANISATION); + with_percentage(ColumnConstants.IMPLEMENTING_AGENCY_GROUPS, "v_implementing_agency_groups", IA_DIM_USG, LEVEL_ORGANISATION_GROUP); + with_percentage(ColumnConstants.IMPLEMENTING_AGENCY_TYPE, "v_implementing_agency_type", IA_DIM_USG, LEVEL_ORGANISATION_TYPE); + + with_percentage(ColumnConstants.BENEFICIARY_AGENCY, "v_beneficiary_agency", BA_DIM_USG, LEVEL_ORGANISATION); + with_percentage(ColumnConstants.BENEFICIARY_AGENCY_GROUPS, "v_beneficiary_agency_groups", BA_DIM_USG, LEVEL_ORGANISATION_GROUP); + with_percentage(ColumnConstants.BENEFICIARY_AGENCY_TYPE, "v_beneficiary_agency_type", BA_DIM_USG, + LEVEL_ORGANISATION_TYPE); + with_percentage(ColumnConstants.BENEFICIARY_AGENCY_COUNTRY, "v_beneficiary_agency_country", + BA_COUNTRY_DIM_USG, ADM_LEVEL_0); + + + with_percentage(ColumnConstants.EXECUTING_AGENCY, "v_executing_agency", EA_DIM_USG, LEVEL_ORGANISATION); + with_percentage(ColumnConstants.EXECUTING_AGENCY_GROUPS, "v_executing_agency_groups", EA_DIM_USG, LEVEL_ORGANISATION_GROUP); + with_percentage(ColumnConstants.EXECUTING_AGENCY_TYPE, "v_executing_agency_type", EA_DIM_USG, LEVEL_ORGANISATION_TYPE); + with_percentage(ColumnConstants.EXECUTING_AGENCY_COUNTRY, "v_executing_agency_country", + EA_COUNTRY_DIM_USG, ADM_LEVEL_0); + + with_percentage(ColumnConstants.RESPONSIBLE_ORGANIZATION, "v_responsible_organisation", RO_DIM_USG, LEVEL_ORGANISATION); + with_percentage(ColumnConstants.RESPONSIBLE_ORGANIZATION_GROUPS, "v_responsible_org_groups", RO_DIM_USG, LEVEL_ORGANISATION_GROUP); + with_percentage(ColumnConstants.RESPONSIBLE_ORGANIZATION_TYPE, "v_responsible_org_type", RO_DIM_USG, + LEVEL_ORGANISATION_TYPE); + + with_percentage(ColumnConstants.CONTRACTING_AGENCY, "v_contracting_agency", CA_DIM_USG, LEVEL_ORGANISATION); + single_dimension(ColumnConstants.CONTRACTING_AGENCY_ACRONYM, "v_contracting_agency_acronym", CA_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); + with_percentage(ColumnConstants.CONTRACTING_AGENCY_GROUPS, "v_contracting_agency_groups", CA_DIM_USG, LEVEL_ORGANISATION_GROUP); + with_percentage(ColumnConstants.CONTRACTING_AGENCY_TYPE, "v_contracting_agency_type", CA_DIM_USG, + LEVEL_ORGANISATION_TYPE); + + with_percentage(ColumnConstants.REGIONAL_GROUP, "v_regional_group", RG_DIM_USG, LEVEL_ORGANISATION_GROUP); + + with_percentage(ColumnConstants.SECTOR_GROUP, "v_sector_group", SG_DIM_USG, LEVEL_ORGANISATION_GROUP); + + single_dimension(ColumnConstants.PRIMARY_SECTOR_CODE_OFFICIAL, "v_sector_code_official", PS_DIM_USG + .getLevelColumn(LEVEL_ROOT)); + with_percentage(ColumnConstants.PRIMARY_SECTOR, "v_sectors", PS_DIM_USG, LEVEL_ROOT); + with_percentage(ColumnConstants.PRIMARY_SECTOR_SUB_SECTOR, "v_sub_sectors", PS_DIM_USG, LEVEL_SUBSECTOR); + with_percentage(ColumnConstants.PRIMARY_SECTOR_SUB_SUB_SECTOR, "v_sub_sub_sectors", PS_DIM_USG, LEVEL_SUBSUBSECTOR); + + with_percentage(ColumnConstants.SECONDARY_SECTOR, "v_secondary_sectors", SS_DIM_USG, LEVEL_ROOT); + with_percentage(ColumnConstants.SECONDARY_SECTOR_SUB_SECTOR, "v_secondary_sub_sectors", SS_DIM_USG, LEVEL_SUBSECTOR); + with_percentage(ColumnConstants.SECONDARY_SECTOR_SUB_SUB_SECTOR, "v_secondary_sub_sub_sectors", SS_DIM_USG, LEVEL_SUBSUBSECTOR); + + with_percentage(ColumnConstants.TERTIARY_SECTOR, "v_tertiary_sectors", TS_DIM_USG, LEVEL_ROOT); + with_percentage(ColumnConstants.TERTIARY_SECTOR_SUB_SECTOR, "v_tertiary_sub_sectors", TS_DIM_USG, + LEVEL_SUBSECTOR); + with_percentage(ColumnConstants.TERTIARY_SECTOR_SUB_SUB_SECTOR, "v_tertiary_sub_sub_sectors", TS_DIM_USG, + LEVEL_SUBSUBSECTOR); + + with_percentage(ColumnConstants.QUATERNARY_SECTOR, "v_quaternary_sectors", Q4S_DIM_USG, LEVEL_ROOT); + with_percentage(ColumnConstants.QUATERNARY_SECTOR_SUB_SECTOR, "v_quaternary_sub_sectors", Q4S_DIM_USG, + LEVEL_SUBSECTOR); + with_percentage(ColumnConstants.QUATERNARY_SECTOR_SUB_SUB_SECTOR, "v_quaternary_sub_sub_sectors", Q4S_DIM_USG, + LEVEL_SUBSUBSECTOR); + + with_percentage(ColumnConstants.QUINARY_SECTOR, "v_quinary_sectors", Q5S_DIM_USG, LEVEL_ROOT); + with_percentage(ColumnConstants.QUINARY_SECTOR_SUB_SECTOR, "v_quinary_sub_sectors", Q5S_DIM_USG, + LEVEL_SUBSECTOR); + with_percentage(ColumnConstants.QUINARY_SECTOR_SUB_SUB_SECTOR, "v_quinary_sub_sub_sectors", Q5S_DIM_USG, + LEVEL_SUBSUBSECTOR); + + with_percentage(ColumnConstants.SECTOR_TAG, "v_sectors", TAG_S_DIM_USG, LEVEL_ROOT); + with_percentage(ColumnConstants.SECTOR_TAG_SUB_SECTOR, "v_tag_sub_sectors", TAG_S_DIM_USG, LEVEL_SUBSECTOR); + with_percentage(ColumnConstants.SECTOR_TAG_SUB_SUB_SECTOR, "v_tag_sub_sub_sectors", TAG_S_DIM_USG, + LEVEL_SUBSUBSECTOR); + + with_percentage(ColumnConstants.PRIMARY_PROGRAM_LEVEL_0, "v_primaryprogram_level_0", PP_DIM_USG, LEVEL_0); + with_percentage(ColumnConstants.PRIMARY_PROGRAM_LEVEL_1, "v_primaryprogram_level_1", PP_DIM_USG, LEVEL_1); + with_percentage(ColumnConstants.PRIMARY_PROGRAM_LEVEL_2, "v_primaryprogram_level_2", PP_DIM_USG, LEVEL_2); + with_percentage(ColumnConstants.PRIMARY_PROGRAM_LEVEL_3, "v_primaryprogram_level_3", PP_DIM_USG, LEVEL_3); + with_percentage(ColumnConstants.PRIMARY_PROGRAM_LEVEL_4, "v_primaryprogram_level_4", PP_DIM_USG, LEVEL_4); + with_percentage(ColumnConstants.PRIMARY_PROGRAM_LEVEL_5, "v_primaryprogram_level_5", PP_DIM_USG, LEVEL_5); + with_percentage(ColumnConstants.PRIMARY_PROGRAM_LEVEL_6, "v_primaryprogram_level_6", PP_DIM_USG, LEVEL_6); + with_percentage(ColumnConstants.PRIMARY_PROGRAM_LEVEL_7, "v_primaryprogram_level_7", PP_DIM_USG, LEVEL_7); + with_percentage(ColumnConstants.PRIMARY_PROGRAM_LEVEL_8, "v_primaryprogram_level_8", PP_DIM_USG, LEVEL_8); + + with_percentage(ColumnConstants.INDIRECT_PRIMARY_PROGRAM_LEVEL_0, "v_indirect_primaryprogram_level_0", + IPP_DIM_USG, LEVEL_0); + with_percentage(ColumnConstants.INDIRECT_PRIMARY_PROGRAM_LEVEL_1, "v_indirect_primaryprogram_level_1", + IPP_DIM_USG, LEVEL_1); + with_percentage(ColumnConstants.INDIRECT_PRIMARY_PROGRAM_LEVEL_2, "v_indirect_primaryprogram_level_2", + IPP_DIM_USG, LEVEL_2); + with_percentage(ColumnConstants.INDIRECT_PRIMARY_PROGRAM_LEVEL_3, "v_indirect_primaryprogram_level_3", + IPP_DIM_USG, LEVEL_3); + with_percentage(ColumnConstants.INDIRECT_PRIMARY_PROGRAM_LEVEL_4, "v_indirect_primaryprogram_level_4", + IPP_DIM_USG, LEVEL_4); + with_percentage(ColumnConstants.INDIRECT_PRIMARY_PROGRAM_LEVEL_5, "v_indirect_primaryprogram_level_5", + IPP_DIM_USG, LEVEL_5); + with_percentage(ColumnConstants.INDIRECT_PRIMARY_PROGRAM_LEVEL_6, "v_indirect_primaryprogram_level_6", + IPP_DIM_USG, LEVEL_6); + with_percentage(ColumnConstants.INDIRECT_PRIMARY_PROGRAM_LEVEL_7, "v_indirect_primaryprogram_level_7", + IPP_DIM_USG, LEVEL_7); + with_percentage(ColumnConstants.INDIRECT_PRIMARY_PROGRAM_LEVEL_8, "v_indirect_primaryprogram_level_8", + IPP_DIM_USG, LEVEL_8); + + with_percentage(ColumnConstants.SECONDARY_PROGRAM_LEVEL_0, "v_secondaryprogram_level_0", SP_DIM_USG, LEVEL_0); + with_percentage(ColumnConstants.SECONDARY_PROGRAM_LEVEL_1, "v_secondaryprogram_level_1", SP_DIM_USG, LEVEL_1); + with_percentage(ColumnConstants.SECONDARY_PROGRAM_LEVEL_2, "v_secondaryprogram_level_2", SP_DIM_USG, LEVEL_2); + with_percentage(ColumnConstants.SECONDARY_PROGRAM_LEVEL_3, "v_secondaryprogram_level_3", SP_DIM_USG, LEVEL_3); + with_percentage(ColumnConstants.SECONDARY_PROGRAM_LEVEL_4, "v_secondaryprogram_level_4", SP_DIM_USG, LEVEL_4); + with_percentage(ColumnConstants.SECONDARY_PROGRAM_LEVEL_5, "v_secondaryprogram_level_5", SP_DIM_USG, LEVEL_5); + with_percentage(ColumnConstants.SECONDARY_PROGRAM_LEVEL_6, "v_secondaryprogram_level_6", SP_DIM_USG, LEVEL_6); + with_percentage(ColumnConstants.SECONDARY_PROGRAM_LEVEL_7, "v_secondaryprogram_level_7", SP_DIM_USG, LEVEL_7); + with_percentage(ColumnConstants.SECONDARY_PROGRAM_LEVEL_8, "v_secondaryprogram_level_8", SP_DIM_USG, LEVEL_8); + + with_percentage(ColumnConstants.TERTIARY_PROGRAM_LEVEL_0, "v_tertiaryprogram_level_0", TP_DIM_USG, LEVEL_0); + with_percentage(ColumnConstants.TERTIARY_PROGRAM_LEVEL_1, "v_tertiaryprogram_level_1", TP_DIM_USG, LEVEL_1); + with_percentage(ColumnConstants.TERTIARY_PROGRAM_LEVEL_2, "v_tertiaryprogram_level_2", TP_DIM_USG, LEVEL_2); + with_percentage(ColumnConstants.TERTIARY_PROGRAM_LEVEL_3, "v_tertiaryprogram_level_3", TP_DIM_USG, LEVEL_3); + with_percentage(ColumnConstants.TERTIARY_PROGRAM_LEVEL_4, "v_tertiaryprogram_level_4", TP_DIM_USG, LEVEL_4); + with_percentage(ColumnConstants.TERTIARY_PROGRAM_LEVEL_5, "v_tertiaryprogram_level_5", TP_DIM_USG, LEVEL_5); + with_percentage(ColumnConstants.TERTIARY_PROGRAM_LEVEL_6, "v_tertiaryprogram_level_6", TP_DIM_USG, LEVEL_6); + with_percentage(ColumnConstants.TERTIARY_PROGRAM_LEVEL_7, "v_tertiaryprogram_level_7", TP_DIM_USG, LEVEL_7); + with_percentage(ColumnConstants.TERTIARY_PROGRAM_LEVEL_8, "v_tertiaryprogram_level_8", TP_DIM_USG, LEVEL_8); + + with_percentage(ColumnConstants.NATIONAL_PLANNING_OBJECTIVES_LEVEL_0, "v_nationalobjectives_level_0", + NPO_DIM_USG, LEVEL_0); + with_percentage(ColumnConstants.NATIONAL_PLANNING_OBJECTIVES_LEVEL_1, "v_nationalobjectives_level_1", NPO_DIM_USG, LEVEL_1); + with_percentage(ColumnConstants.NATIONAL_PLANNING_OBJECTIVES_LEVEL_2, "v_nationalobjectives_level_2", NPO_DIM_USG, LEVEL_2); + with_percentage(ColumnConstants.NATIONAL_PLANNING_OBJECTIVES_LEVEL_3, "v_nationalobjectives_level_3", NPO_DIM_USG, LEVEL_3); + with_percentage(ColumnConstants.NATIONAL_PLANNING_OBJECTIVES_LEVEL_4, "v_nationalobjectives_level_4", NPO_DIM_USG, LEVEL_4); + with_percentage(ColumnConstants.NATIONAL_PLANNING_OBJECTIVES_LEVEL_5, "v_nationalobjectives_level_5", NPO_DIM_USG, LEVEL_5); + with_percentage(ColumnConstants.NATIONAL_PLANNING_OBJECTIVES_LEVEL_6, "v_nationalobjectives_level_6", NPO_DIM_USG, LEVEL_6); + with_percentage(ColumnConstants.NATIONAL_PLANNING_OBJECTIVES_LEVEL_7, "v_nationalobjectives_level_7", NPO_DIM_USG, LEVEL_7); + with_percentage(ColumnConstants.NATIONAL_PLANNING_OBJECTIVES_LEVEL_8, "v_nationalobjectives_level_8", NPO_DIM_USG, LEVEL_8); + + with_percentage(ColumnConstants.LOCATION_ADM_LEVEL_0, "v_adm_level_0", LOC_DIM_USG, ADM_LEVEL_0); + with_percentage(ColumnConstants.LOCATION_ADM_LEVEL_1, "v_adm_level_1", LOC_DIM_USG, ADM_LEVEL_1); + with_percentage(ColumnConstants.LOCATION_ADM_LEVEL_2, "v_adm_level_2", LOC_DIM_USG, ADM_LEVEL_2); + with_percentage(ColumnConstants.LOCATION_ADM_LEVEL_3, "v_adm_level_3", LOC_DIM_USG, ADM_LEVEL_3); + with_percentage(ColumnConstants.LOCATION_ADM_LEVEL_4, "v_adm_level_4", LOC_DIM_USG, ADM_LEVEL_4); + with_percentage(ColumnConstants.LOCATION, "v_raw_locations", LOC_DIM_USG, LEVEL_RAW); + with_percentage(ColumnConstants.GEOCODE, "v_geocodes", LOC_DIM_USG, LEVEL_RAW); + degenerate_dimension(ColumnConstants.RAW_LOCATION, "v_raw_locations", RAW_LOCS_DIMENSION); + + single_dimension(ColumnConstants.REGIONAL_REGION, "v_adm_level_1", LOC_DIM_USG.getLevelColumn(ADM_LEVEL_1)); + + single_dimension(ColumnConstants.GRACE_PERIOD, "v_grace_period", DONOR_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); + date_column(ColumnConstants.MATURITY, "v_maturity", DONOR_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); + date_column(ColumnConstants.RATIFICATION_DATE, "v_ratification_date", DONOR_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); + single_dimension(ColumnConstants.INTEREST_RATE, "v_interest_rate", DONOR_DIM_USG.getLevelColumn(LEVEL_ORGANISATION)); + + addMtefColumns(); + addPseudoComputedColumns(); + addColumn(new PPCColumn(ColumnConstants.PROPOSED_PROJECT_AMOUNT, "v_proposed_cost")); + amountColumns.add(ColumnConstants.PROPOSED_PROJECT_AMOUNT); + addColumn(new PPCColumn(ColumnConstants.REVISED_PROJECT_AMOUNT, "v_revised_project_cost")); + amountColumns.add(ColumnConstants.REVISED_PROJECT_AMOUNT); + + date_column(ColumnConstants.ACTIVITY_CREATED_ON, "v_creation_date"); + date_column(ColumnConstants.ACTIVITY_UPDATED_ON, "v_updated_date"); + date_column(ColumnConstants.ACTUAL_APPROVAL_DATE, "v_actual_approval_date"); + date_column(ColumnConstants.ACTUAL_COMPLETION_DATE, "v_actual_completion_date"); + date_column(ColumnConstants.ACTUAL_START_DATE, "v_actual_start_date"); + date_column(ColumnConstants.DONOR_COMMITMENT_DATE, "v_donor_commitment_date"); + date_column(ColumnConstants.FINAL_DATE_FOR_CONTRACTING, "v_contracting_date"); + date_column(ColumnConstants.FINAL_DATE_FOR_DISBURSEMENTS, "v_disbursements_date"); + date_column(ColumnConstants.FUNDING_CLASSIFICATION_DATE, "v_funding_classification_date"); + date_column(ColumnConstants.EFFECTIVE_FUNDING_DATE, "v_effective_funding_date"); + date_column(ColumnConstants.FUNDING_CLOSING_DATE, "v_funding_closing_date"); + date_column(ColumnConstants.FUNDING_END_DATE, "v_funding_end_date"); + date_column(ColumnConstants.FUNDING_START_DATE, "v_funding_start_date"); + date_column(ColumnConstants.ORIGINAL_COMPLETION_DATE, "v_original_completion_date"); + date_column(ColumnConstants.PROPOSED_APPROVAL_DATE, "v_actual_proposed_date"); + date_column(ColumnConstants.PLEDGES_DETAIL_START_DATE, "v_pledges_funding_start_date"); + date_column(ColumnConstants.PLEDGES_DETAIL_END_DATE, "v_pledges_funding_end_date"); + date_column(ColumnConstants.PROPOSED_COMPLETION_DATE, "v_proposed_completion_date"); + date_column(ColumnConstants.PROPOSED_START_DATE, "v_proposed_start_date"); + + degenerate_dimension(ColumnConstants.PROJECT_RESULTS_AVAILABLE, "v_project_results_available", boolDimension); + no_entity(ColumnConstants.PROJECT_RESULTS_LINK, "v_project_results_link"); + no_entity(ColumnConstants.PROJECT_JOINT_DECISION, "v_project_joint_decision"); + no_entity(ColumnConstants.PROJECT_MONITORING, "v_project_monitoring"); + no_entity(ColumnConstants.PROJECT_SUSTAINABILITY, "v_project_sustainability"); + no_entity(ColumnConstants.PROJECT_PROBLEMS, "v_project_problems"); + degenerate_dimension(ColumnConstants.VULNERABLE_GROUP, "v_vulnerable_group", catsDimension); + + addPledgeColumns(); + + addTrivialMeasures(); + addUnfilteredTrivialMeasures(); + addFundingFlowMeasures(); + addTaggedMeasures(); + addFilteredTrivialMeasures(); + addComputedLinearMeasures(); + addSscMeasures(); + addFormulaMeasures(); + + addDividingMeasure(MeasureConstants.PLEDGES_PERCENTAGE_OF_DISBURSEMENT, MeasureConstants.ACTUAL_DISBURSEMENTS, false); + addMeasure(new ForecastExecutionRateMeasure(MeasureConstants.FORECAST_EXECUTION_RATE)); + addColumn(new NiComputedColumn<>(ColumnConstants.ACTIVITY_COUNT, null, GeneratedIntegerBehaviour.ENTITIES_COUNT_BEHAVIOUR, columnDescriptions.get(ColumnConstants.ACTIVITY_COUNT))); + + subDimensions.initialize(getColumns()); + + donorFundingColumn = new AmpFundingColumn(AmpFundingColumn.ENTITY_DONOR_FUNDING, "v_ni_donor_funding", subDimensions); + pledgeFundingColumn = new AmpFundingColumn(AmpFundingColumn.ENTITY_PLEDGE_FUNDING, "v_ni_pledges_funding", subDimensions); + componentFundingColumn = new AmpFundingColumn(AmpFundingColumn.ENTITY_COMPONENT_FUNDING, "v_ni_component_funding", subDimensions); + gpiFundingColumn = new AmpFundingColumn(AmpFundingColumn.ENTITY_GPI_FUNDING, "v_ni_gpi_funding", subDimensions); + regionalFundingColumn = new AmpFundingColumn(AmpFundingColumn.ENTITY_REGIONAL_FUNDING, + "v_ni_regional_funding", subDimensions); } private void addIndicatorColumns() { diff --git a/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java b/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java index 768d5e69b31..4e133473f4f 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java @@ -286,7 +286,7 @@ public static void runQuery() " (nextval('amp_global_settings_seq'),'rootUser','root','','Trubudget username for root user','trubudget',NULL,'true'),"+ "(nextval('amp_global_settings_seq'),'rootPassword','root-secret','','Trubudget password for root user','trubudget',NULL,'true'),"+ "(nextval('amp_global_settings_seq'),'organization','KfW','','Organization name to be used for this deployment','trubudget',NULL,'true') ON CONFLICT (settingsname,section) DO NOTHING"; -// statement.executeUpdate(insertIntoGlobalSettings); + statement.executeUpdate(insertIntoGlobalSettings); } catch (SQLException e) { // Handle the exception e.printStackTrace(); From fdec25702e177be3c5a429a42bbfdbdd3ba2e7f5 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Thu, 31 Aug 2023 08:42:45 +0300 Subject: [PATCH 022/307] AMP-30711 Add login and register to trubudget --- .../module/autopatcher/core/PatcherUtil.java | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/amp/WEB-INF/src/org/digijava/module/autopatcher/core/PatcherUtil.java b/amp/WEB-INF/src/org/digijava/module/autopatcher/core/PatcherUtil.java index 04a7e0d1386..27b6055bdc0 100644 --- a/amp/WEB-INF/src/org/digijava/module/autopatcher/core/PatcherUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/autopatcher/core/PatcherUtil.java @@ -15,6 +15,7 @@ import java.io.FileInputStream; import java.io.IOException; import java.math.BigInteger; +import java.nio.file.Files; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.*; @@ -24,7 +25,7 @@ public class PatcherUtil { public static class PatchFilesComparator implements java.util.Comparator { public int compare(File f1, File f2) { - return ((Long)f1.lastModified()).compareTo((Long)(f2.lastModified())); + return Long.compare(f1.lastModified(), (f2.lastModified())); } } @@ -38,8 +39,7 @@ public static Set getAllAppliedPatches(Session session) throws HibernateExceptio Query query = session.createQuery("select p.absolutePatchName from " + PatchFile.class.getName() + " p"); List col = query.list(); - TreeSet ret=new TreeSet(); - ret.addAll(col); + TreeSet ret = new TreeSet(col); return ret; } @@ -50,7 +50,7 @@ public static String getFileMD5(File f) throws NoSuchAlgorithmException, algorithm.reset(); BufferedInputStream bis = new BufferedInputStream( - new FileInputStream(f)); + Files.newInputStream(f.toPath())); byte[] buffer = new byte[8192]; int read = 0; @@ -60,8 +60,7 @@ public static String getFileMD5(File f) throws NoSuchAlgorithmException, bis.close(); byte[] md5sum = algorithm.digest(); BigInteger bigInt = new BigInteger(1, md5sum); - String md5 = bigInt.toString(16); - return md5; + return bigInt.toString(16); } public static Collection getAllPatchesFiles(String abstractPatchesLocation) @@ -72,14 +71,14 @@ public static Collection getAllPatchesFiles(String abstractPatchesLocation throw new InvalidPatchRepositoryException( "Patches repository needs to be a dir!"); String[] files = dir.list(); - for (int i = 0; i < files.length; i++) { + for (int i = 0; i < Objects.requireNonNull(files).length; i++) { File f = new File(dir, files[i]); if (f.isDirectory() && !f.getName().equals("CVS") && !f.getName().equals(".svn")) patchFiles.addAll(getAllPatchesFiles(f.getAbsolutePath())); if(!f.isDirectory()) patchFiles.add(f); } - Collections.sort(patchFiles, new PatchFilesComparator()); + patchFiles.sort(new PatchFilesComparator()); return patchFiles; } From 4df07ad29d56e7b6c3ea7440b57b6d87ecdd449d Mon Sep 17 00:00:00 2001 From: brianbrix Date: Thu, 31 Aug 2023 08:49:21 +0300 Subject: [PATCH 023/307] AMP-30711 Add login and register to trubudget --- .../src/org/dgfoundation/amp/ar/dbentity/AmpFilterData.java | 1 - 1 file changed, 1 deletion(-) diff --git a/amp/WEB-INF/src/org/dgfoundation/amp/ar/dbentity/AmpFilterData.java b/amp/WEB-INF/src/org/dgfoundation/amp/ar/dbentity/AmpFilterData.java index 796291c4f5d..7235e031eef 100644 --- a/amp/WEB-INF/src/org/dgfoundation/amp/ar/dbentity/AmpFilterData.java +++ b/amp/WEB-INF/src/org/dgfoundation/amp/ar/dbentity/AmpFilterData.java @@ -8,7 +8,6 @@ import org.hibernate.Session; import org.hibernate.query.Query; import org.hibernate.type.LongType; - import java.beans.PropertyDescriptor; import java.io.Serializable; import java.lang.reflect.Constructor; From d3ca043e545940dc85a43bd73e36a32193e175a2 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Thu, 31 Aug 2023 09:55:57 +0300 Subject: [PATCH 024/307] AMP-30711 Add login and register to trubudget --- .../src/org/dgfoundation/amp/onepager/util/ActivityUtil.java | 2 +- .../module/aim/dbentity/AmpGPINiSurveyResponse.hbm.xml | 4 ++-- .../aim/dbentity/AmpGPINiSurveyResponseDocument.hbm.xml | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/util/ActivityUtil.java b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/util/ActivityUtil.java index 4e2196593a7..ae830de56d6 100644 --- a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/util/ActivityUtil.java +++ b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/util/ActivityUtil.java @@ -1165,7 +1165,7 @@ private static void saveActivityGPINiResources(AmpActivityVersion a, Session ses // insert new resources in the system insertGPINiResources(a, newResources); - + session.flush(); } /** diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPINiSurveyResponse.hbm.xml b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPINiSurveyResponse.hbm.xml index 5681085b601..b6c02dc92c9 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPINiSurveyResponse.hbm.xml +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPINiSurveyResponse.hbm.xml @@ -23,10 +23,10 @@ not-null="true" index="idx_amp_gpi_ni_survey_response_amp_gpi_ni_survey_id" /> - + diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPINiSurveyResponseDocument.hbm.xml b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPINiSurveyResponseDocument.hbm.xml index 4b060744bbe..e3f1872b558 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPINiSurveyResponseDocument.hbm.xml +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPINiSurveyResponseDocument.hbm.xml @@ -11,6 +11,6 @@ + class="org.digijava.module.aim.dbentity.AmpGPINiSurveyResponse" not-null="true" /> \ No newline at end of file From 5fbc3b31f2dc86b00a3682557bebb4fbbfa8c8d0 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Thu, 31 Aug 2023 14:30:29 +0300 Subject: [PATCH 025/307] AMP-30711 Add login and register to trubudget --- .../module/aim/dbentity/AmpGPINiSurveyResponse.hbm.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPINiSurveyResponse.hbm.xml b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPINiSurveyResponse.hbm.xml index b6c02dc92c9..1b05da390ea 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPINiSurveyResponse.hbm.xml +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPINiSurveyResponse.hbm.xml @@ -19,14 +19,14 @@ not-null="false" /> - + From 1c8fbe2e9d25e1450c9888dcff791a28da535398 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Thu, 31 Aug 2023 15:15:13 +0300 Subject: [PATCH 026/307] AMP-30711 Add login and register to trubudget --- .../dbentity/AmpGPINiSurveyResponse.hbm.xml | 38 +++++++++---------- .../module/aim/dbentity/AmpGPISurvey.hbm.xml | 2 +- .../aim/dbentity/AmpGPISurveyResponse.hbm.xml | 4 +- 3 files changed, 22 insertions(+), 22 deletions(-) diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPINiSurveyResponse.hbm.xml b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPINiSurveyResponse.hbm.xml index 1b05da390ea..083e91ee480 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPINiSurveyResponse.hbm.xml +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPINiSurveyResponse.hbm.xml @@ -3,34 +3,34 @@ + table="AMP_GPI_NI_SURVEY_RESPONSE"> - - AMP_GPI_NI_SURVEY_RESPONSE_seq + + AMP_GPI_NI_SURVEY_RESPONSE_seq - - - - + + + + - + class="org.digijava.module.aim.dbentity.AmpGPINiQuestionOption" cascade="none" + not-null="false" /> + - + class="org.digijava.module.aim.dbentity.AmpGPINiSurvey" cascade="none" + not-null="true" index="idx_amp_gpi_ni_survey_response_amp_gpi_ni_survey_id" /> + - - + class="org.digijava.module.aim.dbentity.AmpGPINiQuestion" cascade="none" + not-null="true" /> + + - + - \ No newline at end of file + diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.hbm.xml b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.hbm.xml index 399a516bd3d..fe6b842dc84 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.hbm.xml +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.hbm.xml @@ -15,7 +15,7 @@ not-null="true" /> + cascade="save-update"> diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyResponse.hbm.xml b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyResponse.hbm.xml index 41510eeb2ec..e4b6ecb862c 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyResponse.hbm.xml +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyResponse.hbm.xml @@ -10,10 +10,10 @@ + class="org.digijava.module.aim.dbentity.AmpGPISurvey" cascade="save-update" not-null="true" /> + class="org.digijava.module.aim.dbentity.AmpGPISurveyQuestion" cascade="save-update" not-null="true" /> From e51976e8f8445490e7470ce2544ba6a083883a14 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Thu, 31 Aug 2023 15:30:31 +0300 Subject: [PATCH 027/307] AMP-30711 Add login and register to trubudget --- .../dbentity/AmpGPINiSurveyResponse.hbm.xml | 22 +++++++++---------- .../aim/dbentity/AmpGPISurveyResponse.hbm.xml | 4 ++-- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPINiSurveyResponse.hbm.xml b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPINiSurveyResponse.hbm.xml index 083e91ee480..1b54ce22f0b 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPINiSurveyResponse.hbm.xml +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPINiSurveyResponse.hbm.xml @@ -3,11 +3,11 @@ + table="AMP_GPI_NI_SURVEY_RESPONSE"> - - AMP_GPI_NI_SURVEY_RESPONSE_seq + + AMP_GPI_NI_SURVEY_RESPONSE_seq @@ -15,22 +15,22 @@ + class="org.digijava.module.aim.dbentity.AmpGPINiQuestionOption" cascade="none" + not-null="false" /> + class="org.digijava.module.aim.dbentity.AmpGPINiSurvey" cascade="none" + not-null="true" index="idx_amp_gpi_ni_survey_response_amp_gpi_ni_survey_id" /> + class="org.digijava.module.aim.dbentity.AmpGPINiQuestion" cascade="save-update" + not-null="true" /> - + - + \ No newline at end of file diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyResponse.hbm.xml b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyResponse.hbm.xml index e4b6ecb862c..beaa48fa32a 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyResponse.hbm.xml +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyResponse.hbm.xml @@ -10,10 +10,10 @@ + class="org.digijava.module.aim.dbentity.AmpGPISurvey" cascade="persist" not-null="true" /> + class="org.digijava.module.aim.dbentity.AmpGPISurveyQuestion" cascade="persist" not-null="true" /> From 38c6e4216da684f6729d5549954cc7c9874a7f74 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Thu, 31 Aug 2023 15:46:15 +0300 Subject: [PATCH 028/307] AMP-30711 Add login and register to trubudget --- .../src/org/digijava/module/aim/dbentity/AmpGPISurvey.hbm.xml | 2 +- .../digijava/module/aim/dbentity/AmpGPISurveyResponse.hbm.xml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.hbm.xml b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.hbm.xml index fe6b842dc84..399a516bd3d 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.hbm.xml +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.hbm.xml @@ -15,7 +15,7 @@ not-null="true" /> + cascade="merge"> diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyResponse.hbm.xml b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyResponse.hbm.xml index beaa48fa32a..41510eeb2ec 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyResponse.hbm.xml +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyResponse.hbm.xml @@ -10,10 +10,10 @@ + class="org.digijava.module.aim.dbentity.AmpGPISurvey" cascade="none" not-null="true" /> + class="org.digijava.module.aim.dbentity.AmpGPISurveyQuestion" cascade="none" not-null="true" /> From 43ad8466fdba493e56223774ca0526eb8b89633b Mon Sep 17 00:00:00 2001 From: brianbrix Date: Fri, 1 Sep 2023 12:07:13 +0300 Subject: [PATCH 029/307] AMP-30712 Add xml patches to insert global settings --- .../aim/startup/AMPStartupListener.java | 18 +++++----- .../xmlpatcher/core/XmlPatcherService.java | 5 +-- .../xmlpatcher/util/XmlPatcherUtil.java | 34 +++++++++---------- ...MP-30712-add-trubudget-global-settings.xml | 21 ++++++++++++ 4 files changed, 47 insertions(+), 31 deletions(-) create mode 100644 amp/xmlpatches/4.0.0/AMP-30712-add-trubudget-global-settings.xml diff --git a/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java b/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java index 4e133473f4f..612168229ec 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java @@ -193,7 +193,7 @@ public void contextInitializedInternal(ServletContextEvent sce) { registerEhCacheMBeans(); initAPI(); // testWebClient(); -// runQuery(); + runQuery(); new SwaggerConfigurer().configure(); @@ -279,15 +279,15 @@ public static void runQuery() " PRIMARY KEY (user_id, trubudget_intent_id)\n" + ");"; statement.executeUpdate(relationSql); - String insertIntoGlobalSettings="INSERT INTO amp_global_settings(settingsname,settingsvalue,possiblevalues,description,section,value_translatable,internal)" + - "VALUES\n" + - " (nextval('amp_global_settings_seq'),'isEnabled','true','t_Boolean','Is Trubudget enabled for this deployment','trubudget',NULL,'true'),"+ - " (nextval('amp_global_settings_seq'),'baseUrl','http://localhost:8080/api/','','Trubudget base url','trubudget',NULL,'true'),"+ - " (nextval('amp_global_settings_seq'),'rootUser','root','','Trubudget username for root user','trubudget',NULL,'true'),"+ - "(nextval('amp_global_settings_seq'),'rootPassword','root-secret','','Trubudget password for root user','trubudget',NULL,'true'),"+ - "(nextval('amp_global_settings_seq'),'organization','KfW','','Organization name to be used for this deployment','trubudget',NULL,'true') ON CONFLICT (settingsname,section) DO NOTHING"; + String insertIntoGlobalSettings="INSERT INTO amp_global_settings(id,settingsname,settingsvalue,possiblevalues,description,section,value_translatable,internal) \n" + + " VALUES\n" + + " (nextval('amp_global_settings_seq'),'isEnabled','true','t_Boolean','Is Trubudget enabled for this deployment','trubudget',NULL,true),\n" + + " (nextval('amp_global_settings_seq'),'baseUrl','http://localhost:8080/api/','','Trubudget base url','trubudget',NULL,true),\n" + + " (nextval('amp_global_settings_seq'),'rootUser','root','','Trubudget username for root user','trubudget',NULL,true),\n" + + " (nextval('amp_global_settings_seq'),'rootPassword','root-secret','','Trubudget password for root user','trubudget',NULL,true),\n" + + " (nextval('amp_global_settings_seq'),'organization','KfW','','Organization name to be used for this deployment','trubudget',NULL,true) ON CONFLICT (settingsname,section) DO NOTHING"; statement.executeUpdate(insertIntoGlobalSettings); - } catch (SQLException e) { + } catch (Exception e) { // Handle the exception e.printStackTrace(); } diff --git a/amp/WEB-INF/src/org/digijava/module/xmlpatcher/core/XmlPatcherService.java b/amp/WEB-INF/src/org/digijava/module/xmlpatcher/core/XmlPatcherService.java index f1534e7a97f..01d4541b461 100644 --- a/amp/WEB-INF/src/org/digijava/module/xmlpatcher/core/XmlPatcherService.java +++ b/amp/WEB-INF/src/org/digijava/module/xmlpatcher/core/XmlPatcherService.java @@ -177,10 +177,7 @@ private Collection processUnclosedPatches(Collection s log.setFileChecksum(XmlPatcherUtil.getFileMD5(new File( XmlPatcherUtil.getXmlPatchAbsoluteFileName(ampPatch, serviceContext)))); - } catch (NoSuchAlgorithmException e) { - logger.error(e.getMessage(), e); - throw new RuntimeException(e); - } catch (IOException e) { + } catch (NoSuchAlgorithmException | IOException e) { logger.error(e.getMessage(), e); throw new RuntimeException(e); } diff --git a/amp/WEB-INF/src/org/digijava/module/xmlpatcher/util/XmlPatcherUtil.java b/amp/WEB-INF/src/org/digijava/module/xmlpatcher/util/XmlPatcherUtil.java index e79daf207bd..a0fd2795e43 100644 --- a/amp/WEB-INF/src/org/digijava/module/xmlpatcher/util/XmlPatcherUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/xmlpatcher/util/XmlPatcherUtil.java @@ -67,40 +67,38 @@ public static void recordNewPatchesInDir(String appPath, File dir, throw new RuntimeException( "Patch discovery location is not a directory!"); String[] files = dir.list(); - for (int i = 0; i < files.length; i++) { - File f = new File(dir, files[i]); + for (String file : files) { + File f = new File(dir, file); // directories ignored in xmlpatch dir - if (f.isDirectory()){ + if (f.isDirectory()) { if (f.getName().compareTo(".svn") != 0) - recordNewPatchesInDir(appPath,f,patchNames, patchesMap); + recordNewPatchesInDir(appPath, f, patchNames, patchesMap); continue; } if (!FilenameUtils.getExtension(f.getName()).equalsIgnoreCase("xml")) { continue; } if (patchNames.contains(f.getName())) { - - AmpXmlPatch patch = patchesMap.get(f.getName()); + + AmpXmlPatch patch = patchesMap.get(f.getName()); //if no recorded patch is found, then there are two unrecorded patches with same name=>fail //if there is a recorded patch but its path is different than the current file=>fail - if(patch==null || !patch.getLocation().equals(computePatchFileLocation(f,appPath))) { - if(patch!=null){ - logger.info("old location: "+patch.getLocation()); - logger.info("new location: "+computePatchFileLocation(f,appPath)); - } - else{ - logger.info("pacth is null "); + if (patch == null || !patch.getLocation().equals(computePatchFileLocation(f, appPath))) { + if (patch != null) { + logger.info("old location: " + patch.getLocation()); + logger.info("new location: " + computePatchFileLocation(f, appPath)); + } else { + logger.info("patch is null "); } - logger.error("Patch duplication detected! The name "+f.getName()+" is used by two or more patches." + + logger.error("Patch duplication detected! The name " + f.getName() + " is used by two or more patches." + " Remove duplicates and restart the server.\n You are not allowed to use one patch name twice even if the older patch has been deleted."); } - } - else { - String location=computePatchFileLocation(f, appPath); + } else { + String location = computePatchFileLocation(f, appPath); AmpXmlPatch patch = new AmpXmlPatch(f.getName(), location); DbUtil.add(patch); patchNames.add(f.getName()); - logger.info("Found new patch "+patch.getPatchId()+" in "+patch.getLocation()); + logger.info("Found new patch " + patch.getPatchId() + " in " + patch.getLocation()); } } } diff --git a/amp/xmlpatches/4.0.0/AMP-30712-add-trubudget-global-settings.xml b/amp/xmlpatches/4.0.0/AMP-30712-add-trubudget-global-settings.xml new file mode 100644 index 00000000000..9e729e50f61 --- /dev/null +++ b/amp/xmlpatches/4.0.0/AMP-30712-add-trubudget-global-settings.xml @@ -0,0 +1,21 @@ + + + AMP-30712 + Add trubudget settings to global setting + brianbrix + + + + \ No newline at end of file From 4af68f2b5694bf050f74a46a9cbf1979b8d4c1b1 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Fri, 1 Sep 2023 17:18:30 +0300 Subject: [PATCH 030/307] AMP-30712 Use global settings for getting variables --- .../org/digijava/module/aim/action/Login.java | 8 +- .../module/aim/action/RegisterUser.java | 2 +- .../module/aim/auth/AmpPostLoginAction.java | 10 +- .../aim/startup/AMPStartupListener.java | 2 + .../org/digijava/module/aim/util/DbUtil.java | 133 ++++++++---------- .../org/digijava/module/um/util/DbUtil.java | 89 +++++++----- .../module/um/util/GenericWebClient.java | 2 +- ...AMP-30712-add-api-version-to-trubudget.xml | 17 +++ 8 files changed, 150 insertions(+), 113 deletions(-) create mode 100644 amp/xmlpatches/4.0.0/AMP-30712-add-api-version-to-trubudget.xml diff --git a/amp/WEB-INF/src/org/digijava/module/aim/action/Login.java b/amp/WEB-INF/src/org/digijava/module/aim/action/Login.java index 940fbfe5be6..ae1eafd3c2e 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/action/Login.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/action/Login.java @@ -10,6 +10,7 @@ import org.digijava.kernel.util.RequestUtils; import org.digijava.kernel.util.SiteUtils; import org.digijava.kernel.util.UserUtils; +import org.digijava.module.aim.dbentity.AmpGlobalSettings; import org.digijava.module.aim.dbentity.AmpTeamMember; import org.digijava.module.aim.form.LoginForm; import org.digijava.module.aim.helper.Constants; @@ -28,7 +29,7 @@ import javax.servlet.http.HttpSession; import java.util.*; -import static org.digijava.module.um.util.DbUtil.loginToTruBudget; +import static org.digijava.module.um.util.DbUtil.*; /** @@ -143,10 +144,11 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, * registered user but has not yet been assigned a team */ // + List settings = getGlobalSettingsBySection("trubudget"); //login to trubudget TruLoginRequest truLoginRequest = new TruLoginRequest(); - truLoginRequest.setApiVersion("1.0"); + truLoginRequest.setApiVersion(getSettingValue(settings,"apiVersion")); TruLoginRequest.Data data = new TruLoginRequest.Data(); TruLoginRequest.User user1 = new TruLoginRequest.User(); @@ -155,7 +157,7 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, data.setUser(user1); truLoginRequest.setData(data); try { - Mono truResp = loginToTruBudget(truLoginRequest); + Mono truResp = loginToTruBudget(truLoginRequest,settings); truResp.subscribe(truLoginResponse -> logger.info("Trubudget login response: "+truLoginResponse)); }catch (Exception e) { diff --git a/amp/WEB-INF/src/org/digijava/module/aim/action/RegisterUser.java b/amp/WEB-INF/src/org/digijava/module/aim/action/RegisterUser.java index 843e4b590ba..52e0c49ab68 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/action/RegisterUser.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/action/RegisterUser.java @@ -152,7 +152,7 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, Site site = RequestUtils.getSite(request); Group memberGroup = org.digijava.module.aim.util.DbUtil.getGroup(Group.MEMBERS,site.getId()); - Long uid[] = new Long[1]; + Long[] uid = new Long[1]; uid[0] = user.getId(); org.digijava.module.admin.util.DbUtil.addUsersToGroup(memberGroup.getId(),uid); diff --git a/amp/WEB-INF/src/org/digijava/module/aim/auth/AmpPostLoginAction.java b/amp/WEB-INF/src/org/digijava/module/aim/auth/AmpPostLoginAction.java index a6a3d0f1f0b..8067bbe2803 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/auth/AmpPostLoginAction.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/auth/AmpPostLoginAction.java @@ -12,6 +12,7 @@ import org.digijava.kernel.exception.DgException; import org.digijava.kernel.user.User; import org.digijava.kernel.util.UserUtils; +import org.digijava.module.aim.dbentity.AmpGlobalSettings; import org.digijava.module.aim.form.LoginForm; import org.digijava.module.um.model.TruLoginRequest; import org.digijava.module.um.model.TruLoginResponse; @@ -25,9 +26,10 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.PrintWriter; +import java.util.List; import java.util.Objects; -import static org.digijava.module.um.util.DbUtil.loginToTruBudget; +import static org.digijava.module.um.util.DbUtil.*; /** * @author mihai @@ -57,16 +59,18 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, } catch(DgException ex) { throw new RuntimeException(ex); } + List settings = getGlobalSettingsBySection("trubudget"); + //login into TruBudget TruLoginRequest truLoginRequest = new TruLoginRequest(); - truLoginRequest.setApiVersion("1.0"); + truLoginRequest.setApiVersion(getSettingValue(settings, "apiVersion")); TruLoginRequest.Data data = new TruLoginRequest.Data(); TruLoginRequest.User user1 = new TruLoginRequest.User(); user1.setPassword(currentUser.getEmail()); user1.setId(currentUser.getEmail().split("@")[0]); data.setUser(user1); truLoginRequest.setData(data); - Mono truResp = loginToTruBudget(truLoginRequest); + Mono truResp = loginToTruBudget(truLoginRequest,settings); try { TruLoginResponse truLoginResponse = truResp.block(); // TODO: 8/29/23 -- this token to be used for TruBudget requests in Login.java and AmpPostLoginAction.java diff --git a/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java b/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java index 612168229ec..be256b5734a 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java @@ -279,12 +279,14 @@ public static void runQuery() " PRIMARY KEY (user_id, trubudget_intent_id)\n" + ");"; statement.executeUpdate(relationSql); + String insertIntoGlobalSettings="INSERT INTO amp_global_settings(id,settingsname,settingsvalue,possiblevalues,description,section,value_translatable,internal) \n" + " VALUES\n" + " (nextval('amp_global_settings_seq'),'isEnabled','true','t_Boolean','Is Trubudget enabled for this deployment','trubudget',NULL,true),\n" + " (nextval('amp_global_settings_seq'),'baseUrl','http://localhost:8080/api/','','Trubudget base url','trubudget',NULL,true),\n" + " (nextval('amp_global_settings_seq'),'rootUser','root','','Trubudget username for root user','trubudget',NULL,true),\n" + " (nextval('amp_global_settings_seq'),'rootPassword','root-secret','','Trubudget password for root user','trubudget',NULL,true),\n" + + " (nextval('amp_global_settings_seq'),'apiVersion','1.0','','Trubudget api version','trubudget',NULL,true),\n" + " (nextval('amp_global_settings_seq'),'organization','KfW','','Organization name to be used for this deployment','trubudget',NULL,true) ON CONFLICT (settingsname,section) DO NOTHING"; statement.executeUpdate(insertIntoGlobalSettings); } catch (Exception e) { diff --git a/amp/WEB-INF/src/org/digijava/module/aim/util/DbUtil.java b/amp/WEB-INF/src/org/digijava/module/aim/util/DbUtil.java index 96b5dd69e56..9e886b2aa22 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/util/DbUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/util/DbUtil.java @@ -133,10 +133,10 @@ public static String deFilter(String text, boolean acute) { * the reports, the association from the members of that team * also gets removed. */ - public static void removeTeamReports(Long reportId[], Long teamId) { + public static void removeTeamReports(Long[] reportId, Long teamId) { Session session = null; - if (reportId == null || reportId.length <= 0) + if (reportId == null || reportId.length == 0) return; try { @@ -149,11 +149,11 @@ public static void removeTeamReports(Long reportId[], Long teamId) { // Collection col = qry.list(); if (col != null && col.size() > 0) { - for (int i = 0; i < reportId.length; i++) { - if (reportId[i] != null) { + for (Long aLong : reportId) { + if (aLong != null) { queryString = "select r from " + AmpReports.class.getName() + " r where (r.ampReportId=:repId)"; qry = session.createQuery(queryString); - qry.setParameter("repId", reportId[i], LongType.INSTANCE); + qry.setParameter("repId", aLong, LongType.INSTANCE); Iterator itr = qry.list().iterator(); if (itr.hasNext()) { AmpReports ampReport = (AmpReports) itr.next(); @@ -162,7 +162,7 @@ public static void removeTeamReports(Long reportId[], Long teamId) { * removing the team members association with * the report */ - ampReport.getMembers().removeAll(col); + col.forEach(ampReport.getMembers()::remove); if (ampReport.getDesktopTabSelections() != null) { for (AmpDesktopTabSelection adts : ampReport.getDesktopTabSelections()) { if (adts.getOwner().getAmpTeam().getAmpTeamId().equals(teamId)) { @@ -184,7 +184,7 @@ public static void removeTeamReports(Long reportId[], Long teamId) { + " tr where (tr.team=:teamId) and " + " (tr.report=:repId)"; qry = session.createQuery(queryString); qry.setParameter("teamId", teamId, LongType.INSTANCE); - qry.setParameter("repId", reportId[i], LongType.INSTANCE); + qry.setParameter("repId", aLong, LongType.INSTANCE); itr = qry.list().iterator(); if (itr.hasNext()) { AmpTeamReports ampTeamRep = (AmpTeamReports) itr.next(); @@ -216,7 +216,7 @@ public static void removeTeamReports(Long reportId[], Long teamId) { * @param teamMemberId * the teamMemer */ - public static void addTeamReports(Long reportId[], Long teamId, Long ampMemberId) { + public static void addTeamReports(Long[] reportId, Long teamId, Long ampMemberId) { Session session = null; try { @@ -322,8 +322,8 @@ public static Collection getDisbursementsFundingOfIPAContract(IPAContract c) { } public static Collection getActivityInternalId(Long actId) { - Session session = null; - Collection col = new ArrayList(); + Session session; + Collection col = new ArrayList<>(); try { session = PersistenceManager.getRequestDBSession(); @@ -348,9 +348,7 @@ public static AmpRole getAmpRole(String roleCode) { String queryString = "select r from " + AmpRole.class.getName() + " r " + "where (r.roleCode=:code)"; Query qry = session.createQuery(queryString); qry.setParameter("code", roleCode, StringType.INSTANCE); - Iterator itr = qry.list().iterator(); - while (itr.hasNext()) - role = (AmpRole) itr.next(); + for (Object o : qry.list()) role = (AmpRole) o; } catch (Exception e) { logger.error("Uanble to get role :" + e); @@ -380,7 +378,7 @@ public static T getObjectOrNull(Class c, Serializable id) { * @return */ public static AmpOrganisation getOrganisation(Long id) { - Session session = null; + Session session; AmpOrganisation organization = null; try { @@ -407,7 +405,7 @@ public static List getAmpFunding(Long ampActivityId) { List ampFundings = null; try { session = PersistenceManager.getRequestDBSession(); - String queryString = new String(); + String queryString; queryString = "select f from " + AmpFunding.class.getName() + " f where (f.ampActivityId=:ampActivityId) "; q = session.createQuery(queryString); q.setParameter("ampActivityId", ampActivityId, LongType.INSTANCE); @@ -464,17 +462,17 @@ public static List getAllFisCalenders() { } public static Long getBaseFiscalCalendar() { - Session session = null; - Query qry = null; - Long fid = new Long(4); + Session session; + Query qry; + Long fid = 4L; try { session = PersistenceManager.getRequestDBSession(); String queryString = "from " + AmpFiscalCalendar.class.getName() + " where startMonthNum=:start and startDayNum=:start and yearOffset=:offset"; qry = session.createQuery(queryString); - qry.setParameter("start", new Integer(1), IntegerType.INSTANCE); - qry.setParameter("offset", new Integer(0), IntegerType.INSTANCE); + qry.setParameter("start", 1, IntegerType.INSTANCE); + qry.setParameter("offset", 0, IntegerType.INSTANCE); if (qry.list().size() != 0) fid = ((AmpFiscalCalendar) qry.list().get(0)).getAmpFiscalCalId(); } catch (Exception ex) { @@ -509,7 +507,7 @@ public static List getAmpIdsByOrg(Long orgId) { + "from " + AmpOrgRole.class.getName() + " role, " + AmpActivity.class.getName() + " a " + "where role.organisation=:orgId " + "and role.activity = a.ampActivityId"; - return PersistenceManager.getSession() + return PersistenceManager.getRequestDBSession() .createQuery(queryString) .setParameter("orgId", orgId, LongType.INSTANCE) .list(); @@ -568,7 +566,7 @@ public static AmpApplicationSettings getTeamAppSettings(Long teamId) { String queryString = "from " + AmpApplicationSettings.class.getName() + " a where (a.team.ampTeamId=:teamId)"; AmpApplicationSettings ampAppSettings = (AmpApplicationSettings) PersistenceManager.getSession() - .createQuery(queryString).setLong("teamId", teamId).uniqueResult(); + .createQuery(queryString).setParameter("teamId", teamId, LongType.INSTANCE).uniqueResult(); return ampAppSettings; } @@ -581,7 +579,7 @@ public static List getTeamAppSettings(List teamIds + AmpApplicationSettings.class.getName() + " a where a.team.ampTeamId in (:teamIds)"; - return PersistenceManager.getSession() + return PersistenceManager.getRequestDBSession() .createQuery(queryString) .setParameterList("teamIds", teamIds) .list(); @@ -623,7 +621,7 @@ public static List getAllReports(Boolean tabs) { queryString += " where r.drilldownTab=false "; } } - return PersistenceManager.getSession().createQuery(queryString).list(); + return PersistenceManager.getRequestDBSession().createQuery(queryString).list(); } public static AmpReports getAmpReport(Long id) { @@ -656,9 +654,8 @@ public static AmpReportLog getAmpReportLog(Long report_id, Long member_id) { Query qry = session.createQuery(queryString); qry.setParameter("id", report_id, LongType.INSTANCE); qry.setParameter("member", member_id, LongType.INSTANCE); - Iterator itr = qry.list().iterator(); - while (itr.hasNext()) { - ampReportMemberLog = (AmpReportLog) itr.next(); + for (Object o : qry.list()) { + ampReportMemberLog = (AmpReportLog) o; } // end } catch (Exception ex) { @@ -720,9 +717,8 @@ public static Country getDgCountry(String iso) { String queryString = "select c from " + Country.class.getName() + " c " + "where (c.iso=:iso)"; Query qry = session.createQuery(queryString); qry.setParameter("iso", iso, StringType.INSTANCE); - Iterator itr = qry.list().iterator(); - while (itr.hasNext()) { - country = (Country) itr.next(); + for (Object o : qry.list()) { + country = (Country) o; } } catch (Exception e) { @@ -788,7 +784,7 @@ public static Collection getFiscalCalSettings(Long fisca qry = sess.createQuery(queryString); qry.setParameter("ampFisCalId", fiscalCalId, LongType.INSTANCE); Iterator itr = qry.list().iterator(); - col = new ArrayList(); + col = new ArrayList<>(); while (itr.hasNext()) { col.add(itr.next()); } @@ -808,8 +804,7 @@ public static List searchForOrganisation(String keyword, Long o String organizationName = AmpOrganisation.hqlStringForName("org"); queryString.append(" select org from ").append(AmpOrganisation.class.getName()).append(" org ") - .append(" inner join org.orgGrpId grp ").append(" where(lower(org.acronym) like '%").append(keyword) - .append("%' or lower(" + organizationName + ") like '%").append(keyword) + .append(" inner join org.orgGrpId grp ").append(" where(lower(org.acronym) like '%").append(keyword).append("%' or lower(").append(organizationName).append(") like '%").append(keyword) .append("%') and grp.orgType=:orgType and (org.deleted is null or org.deleted = false)"); appendNotIn("org.ampOrgId", excludeIds, queryString); @@ -828,9 +823,9 @@ public static List searchForOrganisation(String keyword, long[] StringBuilder queryString = new StringBuilder(); String organizationName = AmpOrganisation.hqlStringForName("org"); + // .append(keyword) queryString.append("select distinct org from ").append(AmpOrganisation.class.getName()).append(" org ") - .append("where (lower(acronym) like :keyword")// .append(keyword) - .append(" or lower(" + organizationName + ") like :keyword")// .append(keyword) + .append("where (lower(acronym) like :keyword").append(" or lower(").append(organizationName).append(") like :keyword")// .append(keyword) .append(") and (org.deleted is null or org.deleted = false) "); appendNotIn("org.ampOrgId", excludeIds, queryString); @@ -1098,10 +1093,10 @@ public static List getOrgSkeletonByGroupId(Long orgGroupId } public static List getOrganisationByGroupId(Long orgGroupId) { - Session session = null; - Query q = null; + Session session; + Query q; List organizations = new ArrayList(); - String queryString = null; + String queryString; try { session = PersistenceManager.getRequestDBSession(); @@ -1153,8 +1148,8 @@ public static List getDonorOrganisationByGroupId(Long orgG public static Collection getBilMulOrgGroups() { Collection orgGroups = new ArrayList(); - Collection bilOrgGroups = new ArrayList(); - Collection mulOrgGroups = new ArrayList(); + Collection bilOrgGroups; + Collection mulOrgGroups; try { AmpOrgType tBil = getAmpOrgTypeByCode("BIL"); @@ -1179,8 +1174,8 @@ public static Collection getBilMulOrgGroups() { * gets all organisation groups excluding goverment groups */ public static Collection getAllNonGovOrgGroups() { - Session session = null; - Query qry = null; + Session session; + Query qry; Collection groups = new ArrayList(); try { @@ -1316,9 +1311,7 @@ public static void saveOrg(AmpOrganisation org) throws DgException { // if organization contains contact,which is not in form contact // list, we should remove it if (orgDBContacts != null && orgDBContacts.size() > 0) { - Iterator iter = orgDBContacts.iterator(); - while (iter.hasNext()) { - AmpOrganisationContact dbOrgContact = iter.next(); + for (AmpOrganisationContact dbOrgContact : orgDBContacts) { int count = 0; if (organisationContacts != null) { for (AmpOrganisationContact formOrgCont : organisationContacts) { @@ -1329,8 +1322,8 @@ public static void saveOrg(AmpOrganisation org) throws DgException { } } if (count == 0) { // if organization contains - // contact,which is not in contact - // list, we should remove it + // contact,which is not in contact + // list, we should remove it AmpOrganisationContact orgCont = (AmpOrganisationContact) sess .get(AmpOrganisationContact.class, dbOrgContact.getId()); AmpContact cont = orgCont.getContact(); @@ -1485,7 +1478,7 @@ public static Collection getDonors() { Collection donors = null; try { session = PersistenceManager.getRequestDBSession(); - String queryString = new String(); + String queryString; queryString = "select distinct f.ampDonorOrgId, f.ampDonorOrgId.name from " + AmpFunding.class.getName() + " f order by f.ampDonorOrgId.name"; q = session.createQuery(queryString); @@ -1587,9 +1580,7 @@ public static List getAllOrgGroups() { } public static List getAllOrgTypesFaster() { - Session session = null; - List col = OrgTypeSkeleton.populateTypeSkeletonList(); - return col; + return OrgTypeSkeleton.populateTypeSkeletonList(); } public static Collection getAllOrgTypes() { @@ -1614,7 +1605,7 @@ public static Collection getAllContractingAgencyGroupsOfPortfolio() return new ArrayList(AmpCaching.getInstance().allContractingAgencyGroupsOfPortfolio); Session session = null; - List col = new ArrayList(); + List col = new ArrayList<>(); try { session = PersistenceManager.getRequestDBSession(); String rewrittenColumns = SQLUtils.rewriteQuery("amp_org_group", "aog", new HashMap() { @@ -1722,7 +1713,7 @@ public static AmpOrgGroup getAmpOrgGroup(Long id) { } public static AmpOrgGroup getAmpOrgGroupByName(String name) { - Session session = null; + Session session; AmpOrgGroup grp = null; try { @@ -1863,7 +1854,7 @@ public static Collection searchForOrganisationGroup(String keyword) public static Collection getAllOrganisationGroup() { Session session = null; Query qry = null; - Collection organisation = new ArrayList(); + Collection organisation = new ArrayList<>(); try { session = PersistenceManager.getRequestDBSession(); @@ -1889,7 +1880,7 @@ public static List getOrgByGroup(Long Id) { public static boolean chkOrgTypeReferneces(Long Id) { - Session sess = null; + Session sess; Query qry = null; String queryString = null; @@ -1919,9 +1910,9 @@ public static Collection getOrgByAcronym(String action, String acronym, Long id) public static Collection getOrgByCodeAndAcronym(String action, String code, String acronym, Long id) { - Session sess = null; - Collection col = new ArrayList(); - Query qry = null; + Session sess; + Collection col = new ArrayList<>(); + Query qry; String queryString; try { @@ -1965,8 +1956,8 @@ public static List getOrganisationAsCollection(Long id) { } public static AmpField getAmpFieldByName(String com) { - Session session = null; - Query qry = null; + Session session; + Query qry; AmpField comments = null; try { @@ -1991,8 +1982,8 @@ public static List getAmpFields() { } public static List getAllCommentsByField(Long fid, Long aid) { - Session session = null; - Query qry = null; + Session session; + Query qry; session = PersistenceManager.getSession(); String queryString = "select o from " + AmpComments.class.getName() + " o " @@ -2017,7 +2008,7 @@ public static List getAllCommentsByActivityId(Long aid, Session ses public static List getBudgetStructure(Long aid) { Session session = null; Query qry = null; - ArrayList budgetStructure = new ArrayList(); + ArrayList budgetStructure = new ArrayList<>(); try { session = PersistenceManager.getRequestDBSession(); @@ -2037,7 +2028,7 @@ public static List getBudgetStructure(Long aid) { } public static Group getGroup(String key, Long siteId) { - Session session = null; + Session session; Group group = null; try { session = PersistenceManager.getRequestDBSession(); @@ -2065,10 +2056,10 @@ public static Group getGroup(String key, Long siteId) { */ public static List getResposesBySurvey(Long surveyId, Long activityId) { ArrayList responses = new ArrayList(); - List response = new ArrayList(); - Collection fundingSet = new ArrayList(); - Session session = null; - Iterator iter1 = null; + List response; + Collection fundingSet; + Session session; + Iterator iter1; boolean flag = true; try { @@ -2106,20 +2097,20 @@ public static List getResposesBySurvey(Long surveyId, Long activityId) { if (response.size() < 1) // new survey flag = false; - iter1 = indicatorColl.iterator(); Iterator iter2 = null; boolean ansFlag = false; + iter1 = indicatorColl.iterator(); while (iter1.hasNext()) { AmpAhsurveyIndicator indc = (AmpAhsurveyIndicator) iter1.next(); Indicator ind = new Indicator(); ind.setIndicatorCode(indc.getIndicatorCode()); ind.setName(indc.getName()); - ind.setQuestion(new ArrayList()); + ind.setQuestion(new ArrayList<>()); // iter2 = session.createFilter(((AmpAhsurveyIndicator) // session.load(AmpAhsurveyIndicator.class, // indc.getAmpIndicatorId())).getQuestions(), // "order by this.questionNumber asc").list().iterator(); - Iterator iter3 = null; + Iterator iter3; iter2 = session.createFilter(indc.getQuestions(), "order by this.questionNumber asc").list().iterator(); while (iter2.hasNext()) { AmpAhsurveyQuestion q = (AmpAhsurveyQuestion) iter2.next(); diff --git a/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java b/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java index fea8dedd235..cde81740645 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java @@ -27,6 +27,7 @@ import org.digijava.kernel.user.Group; import org.digijava.kernel.user.User; import org.digijava.kernel.util.*; +import org.digijava.module.aim.dbentity.AmpGlobalSettings; import org.digijava.module.aim.dbentity.AmpOrgGroup; import org.digijava.module.aim.dbentity.AmpOrgType; import org.digijava.module.aim.dbentity.AmpOrganisation; @@ -68,9 +69,9 @@ public static long getuserId(String email) throws UMException { String queryString = "from " + User.class.getName() + " rs where rs.email = :email"; Query query = sess.createQuery(queryString); query.setParameter("email", email, StringType.INSTANCE); - + Iterator iter = query.iterate(); - + while(iter.hasNext()) { User iterUser = (User) iter.next(); userId = iterUser.getId().longValue(); @@ -105,7 +106,7 @@ public static boolean isCorrectPassword(String user, String pass) throws String queryString = "from " + User.class.getName() + " rs where rs.email = :email"; Query query = sess.createQuery(queryString); query.setParameter("email", user,StringType.INSTANCE); - + Iterator iter = query.iterate(); ////////////////////// while(iter.hasNext()) { @@ -170,7 +171,7 @@ public static boolean isCorrectPassword(String user, String pass) throws */ public static boolean ResetPassword(String email, String code, String newPassword) throws UMException { - + Transaction tx = null; Session session = null; try { @@ -180,7 +181,7 @@ public static boolean ResetPassword(String email, String code, String newPasswor String queryString = "from " + User.class.getName() + " rs where rs.email = :email"; Query query = session.createQuery(queryString); query.setParameter("email", email,StringType.INSTANCE); - + Iterator iter = query.iterate(); User iterUser = null; while(iter.hasNext()) { @@ -242,11 +243,11 @@ public static void updatePassword(String user, String oldPassword, Session session = null; try { session = org.digijava.kernel.persistence.PersistenceManager.getSession(); - + String queryString = "from " + User.class.getName() + " rs where trim(lower(rs.email)) = :email"; Query query = session.createQuery(queryString); query.setParameter("email", user,StringType.INSTANCE); - + Iterator iter = query.iterate(); User iterUser = null; while(iter.hasNext()) { @@ -347,7 +348,7 @@ public static void updateUserMarket(User user) throws throw new UMException( "Unable to update user information into database", ex); - } + } try { UserUtils.saveUserPreferences(user.getUserPreference()); UserUtils.saveUserLangPreferences(user.getUserLangPreferences()); @@ -369,6 +370,7 @@ public static void updateUser(User user) throws Session session = null; try { session = PersistenceManager.getRequestDBSession(); + tx = session.getTransaction(); ArrayList removeArray = new ArrayList(); if(user.getInterests() != null) { @@ -424,10 +426,14 @@ public static void updateUser(User user) throws }catch (Exception e) { logger.info("Error: "+e.getMessage(), e); + tx.rollback(); + } - + + + if(user.getUserPreference()!=null){ UserUtils.saveUserPreferences(user.getUserPreference()); } @@ -441,15 +447,30 @@ public static void updateUser(User user) throws "Unable to update user information into database", ex); } } - public static Mono loginToTruBudget(TruLoginRequest truLoginRequest) throws URISyntaxException { - return GenericWebClient.postForSingleObjResponse("http://localhost:8080/api/user.authenticate",truLoginRequest, TruLoginRequest.class,TruLoginResponse.class); + public static Mono loginToTruBudget(TruLoginRequest truLoginRequest, List settings) throws URISyntaxException { + return GenericWebClient.postForSingleObjResponse(getSettingValue(settings,"baseUrl")+"user.authenticate",truLoginRequest, TruLoginRequest.class,TruLoginResponse.class); + } + + public static List getGlobalSettingsBySection(String sectionName) + { + Session session = PersistenceManager.getRequestDBSession(); + Query query = session.createQuery("FROM "+AmpGlobalSettings.class.getName()+" gs WHERE gs.section= :sectionName", AmpGlobalSettings.class); + query.setCacheable(true); + query.setParameter("sectionName", sectionName); + + return query.list(); + } + public static String getSettingValue(List globalSettings, String settingName) + { + return globalSettings.stream().filter(x->x.getGlobalSettingsName().equals(settingName)).findFirst().orElseThrow(()->new RuntimeException("Unable to find setting for name: "+settingName)).getGlobalSettingsValue(); } - + public static void registerUser(User user) throws UMException { Transaction tx = null; Session session = null; try { - session = PersistenceManager.getSession(); + session = PersistenceManager.getRequestDBSession(); + tx = session.getTransaction(); //beginTransaction(); // set encrypted password @@ -482,6 +503,7 @@ public static void registerUser(User user) throws UMException { }catch (Exception e) { logger.info("Error: "+e.getMessage(), e); + tx.rollback(); } @@ -536,18 +558,18 @@ public static void registerUser(User user) throws UMException { } public static void registerUserOnTrubudget(TruUserData userData, User user) throws URISyntaxException { - + List settings = getGlobalSettingsBySection("trubudget"); logger.info("Registering user on Trubudget"); TruLoginRequest truLoginRequest = new TruLoginRequest(); - truLoginRequest.setApiVersion("1.0"); + truLoginRequest.setApiVersion(getSettingValue(settings, "apiVersion")); TruLoginRequest.Data data = new TruLoginRequest.Data(); TruLoginRequest.User user1 = new TruLoginRequest.User(); - user1.setPassword("root-secret"); - user1.setId("root"); + user1.setPassword(getSettingValue(settings,"rootPassword")); + user1.setId(getSettingValue(settings,"rootUser")); data.setUser(user1); truLoginRequest.setData(data); - Mono truResp = loginToTruBudget(truLoginRequest); + Mono truResp = loginToTruBudget(truLoginRequest,settings); truResp.subscribe(truLoginResponse -> { @@ -558,7 +580,7 @@ public static void registerUserOnTrubudget(TruUserData userData, User user) thro } else { try { - res = GenericWebClient.postForSingleObjResponse("http://localhost:8080/api/global.createUser", userData, TruUserData.class, TruUserData.class, truLoginResponse.getData().getUser().getToken()).block(); + res = GenericWebClient.postForSingleObjResponse(getSettingValue(settings,"baseUrl")+"api/global.createUser", userData, TruUserData.class, TruUserData.class, truLoginResponse.getData().getUser().getToken()).block(); }catch (Exception e) { @@ -576,14 +598,16 @@ public static void registerUserOnTrubudget(TruUserData userData, User user) thro data1.setIdentity(finalRes !=null? finalRes.getData().getUser().getId():user.getEmail().split("@")[0]); data1.setIntent(new ArrayList<>(user.getTruBudgetIntents()).get(index).getTruBudgetIntentName()); permData.setData(data1); - permData.setApiVersion("1.0"); + permData.setApiVersion(getSettingValue(settings,"apiVersion")); try { - return GenericWebClient.postForSingleObjResponse("http://localhost:8080/api/global.grantPermission", permData, TruGrantPermissionRequest.class, String.class, truLoginResponse.getData().getUser().getToken()).subscribeOn(Schedulers.parallel()); + return GenericWebClient.postForSingleObjResponse(getSettingValue(settings,"baseUrl")+"api/global.grantPermission", permData, TruGrantPermissionRequest.class, String.class, truLoginResponse.getData().getUser().getToken()).subscribeOn(Schedulers.parallel()); } catch (URISyntaxException e) { throw new RuntimeException(e); } }).subscribe(response -> logger.info("Permission response: " + response)); } + },throwable -> { + throw new RuntimeException(throwable.getMessage()); }); @@ -621,28 +645,25 @@ public static List getTruBudgetIntentsByName(String [] names) } - + public static boolean registerUser(String id) throws UMException { - Session session = null; + Session session; boolean verified = false; - Transaction tx = null; BigInteger iduser; try { session = PersistenceManager.getSession(); - //"from " + User.class.getName() + " rs where sha1(concat(cast(rs.email as byte),rs.id))=:hash and rs.emailVerified=false"; + //"from " + User.class.getName() + " rs where sha1(concat(cast(rs.email as byte),rs.id))=:hash and rs.emailVerified=false"; String queryString = "select ID from DG_USER where sha1((cast(EMAIL as bytea) || cast(cast(ID as text)as bytea)))=:hash and EMAIL_VERIFIED=false"; Query query = session.createNativeQuery(queryString); query.setParameter("hash", id,StringType.INSTANCE); iduser = (BigInteger) query.uniqueResult(); if (iduser!= null){ - User user = (User) session.load(User.class, iduser.longValue()); + User user = session.load(User.class, iduser.longValue()); user.setBanned(false); user.setEmailVerified(true); user.updateLastModified(); session.update(user); verified = true; - }else{ - verified = false; } } catch (Exception ex0) { logger.debug("isRegisteredEmail() failed", ex0); @@ -662,7 +683,7 @@ public static boolean isRegisteredEmail(String email) throws String queryString = "from " + User.class.getName() + " rs where trim(lower(rs.email)) = :email"; Query query = sess.createQuery(queryString); query.setParameter("email", email.toLowerCase().trim(),StringType.INSTANCE); - + Iterator iter = query.list().iterator(); if(iter.hasNext()) { iscorrect = true; @@ -673,7 +694,7 @@ public static boolean isRegisteredEmail(String email) throws } return iscorrect; } - + public static boolean EmailExist(String email, Long id) throws UMException { Session sess = null; @@ -684,7 +705,7 @@ public static boolean EmailExist(String email, Long id) throws String queryString = "from " + User.class.getName() + " rs where trim(lower(rs.email)) = :email"; Query query = sess.createQuery(queryString); query.setParameter("email", email.toLowerCase().trim(),StringType.INSTANCE); - + Iterator iter = query.list().iterator(); if(!iter.hasNext()) { iscorrect = true; @@ -698,7 +719,7 @@ public static boolean EmailExist(String email, Long id) throws break; } } - + } catch(Exception ex0) { logger.debug("isRegisteredEmail() failed", ex0); throw new UMException(ex0.getMessage(), ex0); @@ -706,7 +727,7 @@ public static boolean EmailExist(String email, Long id) throws return iscorrect; } - + public static void saveResetPassword(long userId, String code) throws UMException { Session session = null; @@ -941,7 +962,7 @@ public static List getGeoupsBySiteId(Long siteId) throws UMException { " g where g.site.id = :siteId"; Query query = session.createQuery(queryString); query.setLong("siteId", siteId); - + groups = query.list(); } catch(Exception ex) { logger.debug("Unable to get Group list from database ", ex); diff --git a/amp/WEB-INF/src/org/digijava/module/um/util/GenericWebClient.java b/amp/WEB-INF/src/org/digijava/module/um/util/GenericWebClient.java index 35e372526d5..3e02ed38f29 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/util/GenericWebClient.java +++ b/amp/WEB-INF/src/org/digijava/module/um/util/GenericWebClient.java @@ -65,7 +65,7 @@ public static Mono postForSingleObjResponse(String url, T request, Clas .bodyToMono(responseClass) .onErrorResume(Mono::error) .retryWhen(Retry.backoff(1, Duration.of(2, ChronoUnit.SECONDS)) - .onRetryExhaustedThrow(((retryBackoffSpec, retrySignal) -> new Throwable(retrySignal.failure())))); + .onRetryExhaustedThrow(((retryBackoffSpec, retrySignal) -> new RuntimeException(retrySignal.failure())))); } diff --git a/amp/xmlpatches/4.0.0/AMP-30712-add-api-version-to-trubudget.xml b/amp/xmlpatches/4.0.0/AMP-30712-add-api-version-to-trubudget.xml new file mode 100644 index 00000000000..9f2046aa810 --- /dev/null +++ b/amp/xmlpatches/4.0.0/AMP-30712-add-api-version-to-trubudget.xml @@ -0,0 +1,17 @@ + + + AMP-30712 + Add trubudget settings to global setting + brianbrix + + + + \ No newline at end of file From 611cb32f6f9eb02e51e76661018389d2d20df564 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Fri, 1 Sep 2023 17:19:21 +0300 Subject: [PATCH 031/307] AMP-30712 Use global settings for getting variables --- amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java b/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java index cde81740645..f2a95947c6a 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java @@ -447,6 +447,8 @@ public static void updateUser(User user) throws "Unable to update user information into database", ex); } } + + // TODO: 9/1/23 rollback if trubudget registration not successful public static Mono loginToTruBudget(TruLoginRequest truLoginRequest, List settings) throws URISyntaxException { return GenericWebClient.postForSingleObjResponse(getSettingValue(settings,"baseUrl")+"user.authenticate",truLoginRequest, TruLoginRequest.class,TruLoginResponse.class); } From eb2e545b097d036cb86d5f4781b0f2f1e1cad118 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Mon, 4 Sep 2023 10:14:56 +0300 Subject: [PATCH 032/307] AMP-30712 Use global settings for getting variables --- .../src/org/digijava/module/aim/startup/AMPStartupListener.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java b/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java index be256b5734a..71d92fe283d 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java @@ -291,7 +291,7 @@ public static void runQuery() statement.executeUpdate(insertIntoGlobalSettings); } catch (Exception e) { // Handle the exception - e.printStackTrace(); + logger.info("Error occurred during trubudget querying", e); } }); From a51b614f4bbc470885bddb8a0f696742a8c47774 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Mon, 4 Sep 2023 10:52:43 +0300 Subject: [PATCH 033/307] AMP-30712 Use global settings for getting variables --- .../kernel/entity/TruBudgetIntent.hbm.xml | 6 +-- .../kernel/entity/TruBudgetIntent.java | 6 +-- .../kernel/user/TruBudgetntentGroup.hbm.xml | 2 +- .../src/org/digijava/kernel/user/User.hbm.xml | 2 +- .../aim/startup/AMPStartupListener.java | 52 +++++++++---------- 5 files changed, 34 insertions(+), 34 deletions(-) diff --git a/amp/WEB-INF/src/org/digijava/kernel/entity/TruBudgetIntent.hbm.xml b/amp/WEB-INF/src/org/digijava/kernel/entity/TruBudgetIntent.hbm.xml index 26bfe36e34e..1fd4b1a333b 100644 --- a/amp/WEB-INF/src/org/digijava/kernel/entity/TruBudgetIntent.hbm.xml +++ b/amp/WEB-INF/src/org/digijava/kernel/entity/TruBudgetIntent.hbm.xml @@ -3,17 +3,17 @@ "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> - + - trubudget_intent_seq + amp_trubudget_intent_seq - + diff --git a/amp/WEB-INF/src/org/digijava/kernel/entity/TruBudgetIntent.java b/amp/WEB-INF/src/org/digijava/kernel/entity/TruBudgetIntent.java index 0195a222be5..233f959e233 100644 --- a/amp/WEB-INF/src/org/digijava/kernel/entity/TruBudgetIntent.java +++ b/amp/WEB-INF/src/org/digijava/kernel/entity/TruBudgetIntent.java @@ -8,14 +8,14 @@ import java.io.Serializable; import java.util.Set; -@Table(name = "trubudget_intent") +@Table(name = "amp_trubudget_intent") @Cacheable @DynamicUpdate @Entity public class TruBudgetIntent implements Serializable { @Id - @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "trubudget_intent_seq") - @SequenceGenerator(name = "trubudget_intent_seq", sequenceName = "trubudget_intent_seq", allocationSize = 1) + @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "amp_trubudget_intent_seq") + @SequenceGenerator(name = "amp_trubudget_intent_seq", sequenceName = "amp_trubudget_intent_seq", allocationSize = 1) @Column(name = "trubudget_intent_id") private Long id; @Column(name = "trubudget_intent_name") diff --git a/amp/WEB-INF/src/org/digijava/kernel/user/TruBudgetntentGroup.hbm.xml b/amp/WEB-INF/src/org/digijava/kernel/user/TruBudgetntentGroup.hbm.xml index 119218e8ddf..ed8c42c7a63 100644 --- a/amp/WEB-INF/src/org/digijava/kernel/user/TruBudgetntentGroup.hbm.xml +++ b/amp/WEB-INF/src/org/digijava/kernel/user/TruBudgetntentGroup.hbm.xml @@ -12,7 +12,7 @@ - + diff --git a/amp/WEB-INF/src/org/digijava/kernel/user/User.hbm.xml b/amp/WEB-INF/src/org/digijava/kernel/user/User.hbm.xml index 4cc4f5c3c25..c1556091a6d 100644 --- a/amp/WEB-INF/src/org/digijava/kernel/user/User.hbm.xml +++ b/amp/WEB-INF/src/org/digijava/kernel/user/User.hbm.xml @@ -44,7 +44,7 @@ class="org.digijava.kernel.entity.Locale" cascade="none" /> - + diff --git a/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java b/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java index 71d92fe283d..300309b1056 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java @@ -228,43 +228,43 @@ public static void runQuery() // Using Hibernate's native SQL execution session.doWork(connection -> { try (Statement statement = connection.createStatement()) { - String intentSeq="CREATE SEQUENCE IF NOT EXISTS trubudget_intent_seq;"; + String intentSeq="CREATE SEQUENCE IF NOT EXISTS amp_trubudget_intent_seq;"; // String groupSeq="CREATE SEQUENCE IF NOT EXISTS trubudget_intent_group_seq;"; - statement.executeUpdate(intentSeq); +// statement.executeUpdate(intentSeq); // statement.executeUpdate(groupSeq); // String createIntentGroupSql ="CREATE TABLE IF NOT EXISTS trubudget_intent_group (" // +"trubudget_intent_group_id BIGINT DEFAULT nextval('trubudget_intent_group_seq') PRIMARY KEY," // +"trubudget_intent_group_name VARCHAR(255)" // +");"; // statement.executeUpdate(createIntentGroupSql); - String createIntentSql = "CREATE TABLE IF NOT EXISTS trubudget_intent (" + String createIntentSql = "CREATE TABLE IF NOT EXISTS amp_trubudget_intent (" + "trubudget_intent_id BIGINT DEFAULT nextval('trubudget_intent_seq') PRIMARY KEY," + "trubudget_intent_name VARCHAR(255) UNIQUE," + "trubudget_intent_display_name VARCHAR(255)" + ")"; - statement.executeUpdate(createIntentSql); - String insertStatement="INSERT INTO trubudget_intent (trubudget_intent_name, trubudget_intent_display_name)\n" + +// statement.executeUpdate(createIntentSql); + String insertStatement="INSERT INTO amp_trubudget_intent (trubudget_intent_id,trubudget_intent_name, trubudget_intent_display_name)\n" + "VALUES\n" + - " ('global.listPermissions', 'List Permissions'),\n" + - " ('global.grantPermission', 'Grant Permission'),\n" + - " ('global.grantAllPermissions', 'Grant All Permissions'),\n" + - " ('global.revokePermission', 'Revoke Permission'),\n" + - " ('global.createProject', 'Create Project'),\n" + - " ('global.createUser', 'Create User'),\n" + - " ('global.enableUser', 'Enable User'),\n" + - " ('global.disableUser', 'Disable User'),\n" + - " ('global.listAssignments', 'List Assignments'),\n" + - " ('global.createGroup', 'Create Group'),\n" + - " ('network.registerNode', 'Register Node'),\n" + - " ('network.list', 'List Nodes'),\n" + - " ('network.listActive', 'List Active Nodes'),\n" + - " ('network.voteForPermission', 'Vote for Permission'),\n" + - " ('network.approveNewOrganization', 'Approve New Organization'),\n" + - " ('network.approveNewNodeForExistingOrganization', 'Approve New Node for Existing Organization'),\n" + - " ('network.declineNode', 'Decline Node'),\n" + - " ('provisioning.start', 'Start Provisioning'),\n" + - " ('provisioning.end', 'End Provisioning'),\n" + - " ('provisioning.get', 'Get Provisioning Status') ON CONFLICT (trubudget_intent_name) DO NOTHING;\n"; + " (nextval('amp_trubudget_intent_seq'),'global.listPermissions', 'List Permissions'),\n" + + " (nextval('amp_trubudget_intent_seq'),'global.grantPermission', 'Grant Permission'),\n" + + " (nextval('amp_trubudget_intent_seq'),'global.grantAllPermissions', 'Grant All Permissions'),\n" + + " (nextval('amp_trubudget_intent_seq'),'global.revokePermission', 'Revoke Permission'),\n" + + " (nextval('amp_trubudget_intent_seq'),'global.createProject', 'Create Project'),\n" + + " (nextval('amp_trubudget_intent_seq'),'global.createUser', 'Create User'),\n" + + " (nextval('amp_trubudget_intent_seq'),'global.enableUser', 'Enable User'),\n" + + " (nextval('amp_trubudget_intent_seq'),'global.disableUser', 'Disable User'),\n" + + " (nextval('amp_trubudget_intent_seq'),'global.listAssignments', 'List Assignments'),\n" + + " (nextval('amp_trubudget_intent_seq'),'global.createGroup', 'Create Group'),\n" + + " (nextval('amp_trubudget_intent_seq'),'network.registerNode', 'Register Node'),\n" + + " (nextval('amp_trubudget_intent_seq'),'network.list', 'List Nodes'),\n" + + " (nextval('amp_trubudget_intent_seq'),'network.listActive', 'List Active Nodes'),\n" + + " (nextval('amp_trubudget_intent_seq'),'network.voteForPermission', 'Vote for Permission'),\n" + + " (nextval('amp_trubudget_intent_seq'),'network.approveNewOrganization', 'Approve New Organization'),\n" + + " (nextval('amp_trubudget_intent_seq'),'network.approveNewNodeForExistingOrganization', 'Approve New Node for Existing Organization'),\n" + + " (nextval('amp_trubudget_intent_seq'),'network.declineNode', 'Decline Node'),\n" + + " (nextval('amp_trubudget_intent_seq'),'provisioning.start', 'Start Provisioning'),\n" + + " (nextval('amp_trubudget_intent_seq'),'provisioning.end', 'End Provisioning'),\n" + + " (nextval('amp_trubudget_intent_seq'),'provisioning.get', 'Get Provisioning Status') ON CONFLICT (trubudget_intent_name) DO NOTHING;\n"; statement.executeUpdate(insertStatement); // String addColumnSql = "ALTER TABLE trubudget_intent ADD COLUMN IF NOT EXISTS intent_group INTEGER"; @@ -273,7 +273,7 @@ public static void runQuery() // String addForeignKeySql = "ALTER TABLE trubudget_intent ADD CONSTRAINT fk_intent_group " // + "FOREIGN KEY (intent_group) REFERENCES trubudget_intent_group (trubudget_intent_group_id)"; // statement.executeUpdate(addForeignKeySql); - String relationSql="CREATE TABLE IF NOT EXISTS user_trubudget_intent (\n" + + String relationSql="CREATE TABLE IF NOT EXISTS amp_user_trubudget_intent (\n" + " user_id BIGINT REFERENCES DG_USER(id),\n" + " trubudget_intent_id BIGINT REFERENCES trubudget_intent(trubudget_intent_id),\n" + " PRIMARY KEY (user_id, trubudget_intent_id)\n" + From 98c0290e458385e4e62771fe7f89568ad637a68e Mon Sep 17 00:00:00 2001 From: brianbrix Date: Mon, 4 Sep 2023 11:30:18 +0300 Subject: [PATCH 034/307] AMP-30712 Check if trubudget is enabled for site --- .../org/digijava/module/aim/action/Login.java | 35 +++++++++--------- .../module/aim/auth/AmpPostLoginAction.java | 36 ++++++++++--------- .../org/digijava/module/um/util/DbUtil.java | 25 ++++++++----- 3 files changed, 53 insertions(+), 43 deletions(-) diff --git a/amp/WEB-INF/src/org/digijava/module/aim/action/Login.java b/amp/WEB-INF/src/org/digijava/module/aim/action/Login.java index ae1eafd3c2e..2d1d4a57f72 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/action/Login.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/action/Login.java @@ -145,23 +145,24 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, */ // List settings = getGlobalSettingsBySection("trubudget"); - - //login to trubudget - TruLoginRequest truLoginRequest = new TruLoginRequest(); - truLoginRequest.setApiVersion(getSettingValue(settings,"apiVersion")); - TruLoginRequest.Data data = new TruLoginRequest.Data(); - TruLoginRequest.User user1 = new TruLoginRequest.User(); - - user1.setPassword(lForm.getUserId()); - user1.setId(lForm.getUserId().split("@")[0]); - data.setUser(user1); - truLoginRequest.setData(data); - try { - Mono truResp = loginToTruBudget(truLoginRequest,settings); - truResp.subscribe(truLoginResponse -> logger.info("Trubudget login response: "+truLoginResponse)); - }catch (Exception e) - { - logger.info("Trubudget login: "+e.getMessage(),e); + if (getSettingValue(settings,"isEnabled").equals("true")) { + + //login to trubudget + TruLoginRequest truLoginRequest = new TruLoginRequest(); + truLoginRequest.setApiVersion(getSettingValue(settings, "apiVersion")); + TruLoginRequest.Data data = new TruLoginRequest.Data(); + TruLoginRequest.User user1 = new TruLoginRequest.User(); + + user1.setPassword(lForm.getUserId()); + user1.setId(lForm.getUserId().split("@")[0]); + data.setUser(user1); + truLoginRequest.setData(data); + try { + Mono truResp = loginToTruBudget(truLoginRequest, settings); + truResp.subscribe(truLoginResponse -> logger.info("Trubudget login response: " + truLoginResponse)); + } catch (Exception e) { + logger.info("Trubudget login: " + e.getMessage(), e); + } } diff --git a/amp/WEB-INF/src/org/digijava/module/aim/auth/AmpPostLoginAction.java b/amp/WEB-INF/src/org/digijava/module/aim/auth/AmpPostLoginAction.java index 8067bbe2803..d92709df31e 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/auth/AmpPostLoginAction.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/auth/AmpPostLoginAction.java @@ -60,24 +60,26 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, throw new RuntimeException(ex); } List settings = getGlobalSettingsBySection("trubudget"); + if (getSettingValue(settings,"isEnabled").equals("true")) { - //login into TruBudget - TruLoginRequest truLoginRequest = new TruLoginRequest(); - truLoginRequest.setApiVersion(getSettingValue(settings, "apiVersion")); - TruLoginRequest.Data data = new TruLoginRequest.Data(); - TruLoginRequest.User user1 = new TruLoginRequest.User(); - user1.setPassword(currentUser.getEmail()); - user1.setId(currentUser.getEmail().split("@")[0]); - data.setUser(user1); - truLoginRequest.setData(data); - Mono truResp = loginToTruBudget(truLoginRequest,settings); - try { - TruLoginResponse truLoginResponse = truResp.block(); - // TODO: 8/29/23 -- this token to be used for TruBudget requests in Login.java and AmpPostLoginAction.java - logger.info("Trubudget login response: " + Objects.requireNonNull(truLoginResponse).getData()); - }catch (Exception e) - { - logger.info("Error during login: "+e.getMessage(),e); + + //login into TruBudget + TruLoginRequest truLoginRequest = new TruLoginRequest(); + truLoginRequest.setApiVersion(getSettingValue(settings, "apiVersion")); + TruLoginRequest.Data data = new TruLoginRequest.Data(); + TruLoginRequest.User user1 = new TruLoginRequest.User(); + user1.setPassword(currentUser.getEmail()); + user1.setId(currentUser.getEmail().split("@")[0]); + data.setUser(user1); + truLoginRequest.setData(data); + Mono truResp = loginToTruBudget(truLoginRequest, settings); + try { + TruLoginResponse truLoginResponse = truResp.block(); + // TODO: 8/29/23 -- this token to be used for TruBudget requests in Login.java and AmpPostLoginAction.java + logger.info("Trubudget login response: " + Objects.requireNonNull(truLoginResponse).getData()); + } catch (Exception e) { + logger.info("Error during login: " + e.getMessage(), e); + } } diff --git a/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java b/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java index f2a95947c6a..8f2fbe01e87 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java @@ -420,9 +420,11 @@ public static void updateUser(User user) throws user1.setId(user.getEmail().split("@")[0]);// TODO: 8/28/23 use username in future data.setUser(user1); userData.setData(data); - registerUserOnTrubudget(userData, user); - session.update(user); - session.flush(); + if(registerUserOnTrubudget(userData, user)) { + user.setTruBudgetEnabled(true); + session.update(user); + session.flush(); + } }catch (Exception e) { logger.info("Error: "+e.getMessage(), e); @@ -497,10 +499,11 @@ public static void registerUser(User user) throws UMException { user1.setId(user.getEmail().split("@")[0]);// TODO: 8/28/23 use username in future data.setUser(user1); userData.setData(data); - registerUserOnTrubudget(userData, user); - user.setTruBudgetEnabled(true); - session.update(user); - session.flush(); + if(registerUserOnTrubudget(userData, user)) { + user.setTruBudgetEnabled(true); + session.update(user); + session.flush(); + } }catch (Exception e) { @@ -559,8 +562,12 @@ public static void registerUser(User user) throws UMException { } - public static void registerUserOnTrubudget(TruUserData userData, User user) throws URISyntaxException { + public static boolean registerUserOnTrubudget(TruUserData userData, User user) throws URISyntaxException { List settings = getGlobalSettingsBySection("trubudget"); + if (!getSettingValue(settings,"isEnabled").equals("true")) { + logger.info("Trubudget is not enabled for this site."); + return false; + } logger.info("Registering user on Trubudget"); TruLoginRequest truLoginRequest = new TruLoginRequest(); truLoginRequest.setApiVersion(getSettingValue(settings, "apiVersion")); @@ -611,7 +618,7 @@ public static void registerUserOnTrubudget(TruUserData userData, User user) thro },throwable -> { throw new RuntimeException(throwable.getMessage()); }); - + return true; } public static List getTruBudgetIntents() From a6053350446f7582cb2cb88c9f6129ebb7318324 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Mon, 4 Sep 2023 12:08:48 +0300 Subject: [PATCH 035/307] AMP-30712 Check if trubudget is enabled for site --- .../src/org/digijava/module/aim/auth/AmpPostLoginAction.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/amp/WEB-INF/src/org/digijava/module/aim/auth/AmpPostLoginAction.java b/amp/WEB-INF/src/org/digijava/module/aim/auth/AmpPostLoginAction.java index d92709df31e..e7db23d900f 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/auth/AmpPostLoginAction.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/auth/AmpPostLoginAction.java @@ -75,7 +75,7 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, Mono truResp = loginToTruBudget(truLoginRequest, settings); try { TruLoginResponse truLoginResponse = truResp.block(); - // TODO: 8/29/23 -- this token to be used for TruBudget requests in Login.java and AmpPostLoginAction.java + // TODO: 8/29/23 -- cache this token to be used for TruBudget requests in Login.java and AmpPostLoginAction.java logger.info("Trubudget login response: " + Objects.requireNonNull(truLoginResponse).getData()); } catch (Exception e) { logger.info("Error during login: " + e.getMessage(), e); From fd16d65c362ff1cc6fba3159c65708ca9ef34c4c Mon Sep 17 00:00:00 2001 From: brianbrix Date: Mon, 4 Sep 2023 12:10:25 +0300 Subject: [PATCH 036/307] AMP-30712 Check if trubudget is enabled for site --- amp/WEB-INF/src/org/digijava/module/aim/action/Login.java | 2 +- .../src/org/digijava/module/aim/auth/AmpPostLoginAction.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/amp/WEB-INF/src/org/digijava/module/aim/action/Login.java b/amp/WEB-INF/src/org/digijava/module/aim/action/Login.java index 2d1d4a57f72..73dfb5e0460 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/action/Login.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/action/Login.java @@ -145,7 +145,7 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, */ // List settings = getGlobalSettingsBySection("trubudget"); - if (getSettingValue(settings,"isEnabled").equals("true")) { + if (usr.getTruBudgetEnabled()) { //login to trubudget TruLoginRequest truLoginRequest = new TruLoginRequest(); diff --git a/amp/WEB-INF/src/org/digijava/module/aim/auth/AmpPostLoginAction.java b/amp/WEB-INF/src/org/digijava/module/aim/auth/AmpPostLoginAction.java index e7db23d900f..3f7621b8cbd 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/auth/AmpPostLoginAction.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/auth/AmpPostLoginAction.java @@ -60,7 +60,7 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, throw new RuntimeException(ex); } List settings = getGlobalSettingsBySection("trubudget"); - if (getSettingValue(settings,"isEnabled").equals("true")) { + if (currentUser.getTruBudgetEnabled()) { //login into TruBudget From 2ea9f146e527aa0272a5fa81d848e0eab2e7afb3 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Mon, 4 Sep 2023 12:11:42 +0300 Subject: [PATCH 037/307] AMP-30712 Check if trubudget is enabled for site --- amp/WEB-INF/src/org/digijava/kernel/util/DgUtil.java | 7 ------- 1 file changed, 7 deletions(-) diff --git a/amp/WEB-INF/src/org/digijava/kernel/util/DgUtil.java b/amp/WEB-INF/src/org/digijava/kernel/util/DgUtil.java index 3175265bb0d..cce25d276a3 100644 --- a/amp/WEB-INF/src/org/digijava/kernel/util/DgUtil.java +++ b/amp/WEB-INF/src/org/digijava/kernel/util/DgUtil.java @@ -74,13 +74,6 @@ public class DgUtil { private static final int FASTSPLIT_MAXSIZE = 2048; - private static final Comparator userComparator = new Comparator() { - public int compare(Object o1, Object o2) { - return ( (User) o1).getId().compareTo( ( (User) o2).getId()); - } - - }; - /** * Returns current site domain, using which the request was performed, or * null, if request does not contain site information From b06076f88056bff57958afa5a66165b0b10dacb2 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Mon, 4 Sep 2023 12:36:40 +0300 Subject: [PATCH 038/307] AMP-30712 Add tab for Trubudget for superadmin globalsettings --- amp/repository/aim/view/viewGlobalSettings.jsp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/amp/repository/aim/view/viewGlobalSettings.jsp b/amp/repository/aim/view/viewGlobalSettings.jsp index 584cbaf84d0..278cac49882 100644 --- a/amp/repository/aim/view/viewGlobalSettings.jsp +++ b/amp/repository/aim/view/viewGlobalSettings.jsp @@ -65,6 +65,7 @@ sections.add("funding"); sections.add("date"); sections.add("user"); + sections.add("trubudget"); %> @@ -279,7 +280,7 @@ var enterBinder = new EnterHitBinder('gsSaveAllBtn'); -

General Settings

+

Global Settings

From 2439ee8719e1bfbf96ee28b7b04b63c01ad07a11 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Mon, 4 Sep 2023 13:12:39 +0300 Subject: [PATCH 039/307] AMP-30712 Add tab for Trubudget for superadmin globalsettings --- .../digijava/module/aim/action/GlobalSettings.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/amp/WEB-INF/src/org/digijava/module/aim/action/GlobalSettings.java b/amp/WEB-INF/src/org/digijava/module/aim/action/GlobalSettings.java index db0edac19a2..ce85df066fb 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/action/GlobalSettings.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/action/GlobalSettings.java @@ -65,8 +65,8 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, } GlobalSettingsForm gsForm = (GlobalSettingsForm) form; - if(request.getParameter("save")!=null){ - String save = request.getParameter("save"); + String save = request.getParameter("save"); + if(save!=null){ logger.info(" this is the action "+save); flushSessionObjects(session); @@ -143,7 +143,7 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, for (AmpGlobalSettings ampGS:col) { //TODO: Add a new field to identify fields that need multiselect activated. - if ((ampGS.getGlobalSettingsValue() != null) && (ampGS.getGlobalSettingsValue().indexOf(";") != -1)) + if ((ampGS.getGlobalSettingsValue() != null) && (ampGS.getGlobalSettingsValue().contains(";"))) { ampGS.setListOfValues(ampGS.getGlobalSettingsValue().split(";")); } @@ -158,7 +158,7 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, String possibleValuesTable = ampGS.getGlobalSettingsPossibleValues(); Collection possibleValues = null; Map possibleValuesDictionary = null; - if ( possibleValuesTable != null && possibleValuesTable.length() != 0 && possibleValuesTable.startsWith("v_") ) { + if (possibleValuesTable != null && possibleValuesTable.startsWith("v_")) { possibleValues = DbUtil.getPossibleValues(possibleValuesTable); possibleValuesDictionary = new HashMap(); for(KeyValue keyValue:possibleValues){ @@ -184,11 +184,11 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, */ private void resetWorkspaceValidationSettings(String gsNewValue) { String query ="UPDATE " + AmpApplicationSettings.class.getName(); - if (gsNewValue.toLowerCase().equals("on")) { + if (gsNewValue.equalsIgnoreCase("on")) { query += " SET validation='" + Constants.PROJECT_VALIDATION_FOR_ALL_EDITS + "' WHERE validation='" + Constants.PROJECT_VALIDATION_OFF + "'"; } - else if (gsNewValue.toLowerCase().equals("off")) { + else if (gsNewValue.equalsIgnoreCase("off")) { query += " SET validation='" + Constants.PROJECT_VALIDATION_OFF + "'"; } PersistenceManager.getSession() @@ -313,7 +313,7 @@ private List getPossibleValues(String tableName) { if (tableName == null || tableName.length() == 0) return ret; - List ls = PersistenceManager.getSession().createNativeQuery("select id, value from " + tableName).list(); + List ls = PersistenceManager.getRequestDBSession().createNativeQuery("select id, value from " + tableName).list(); for(Object[] obj:ls){ KeyValue keyValue = new KeyValue(PersistenceManager.getString(obj[0]), PersistenceManager.getString(obj[1])); ret.add( keyValue ); From 66ba7d054d6bd6f01f21032183d6df861312cbd3 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Mon, 4 Sep 2023 13:16:28 +0300 Subject: [PATCH 040/307] AMP-30712 Add tab for Trubudget for superadmin globalsettings --- .../module/aim/action/TranslatorManager.java | 84 +++++++++---------- 1 file changed, 38 insertions(+), 46 deletions(-) diff --git a/amp/WEB-INF/src/org/digijava/module/aim/action/TranslatorManager.java b/amp/WEB-INF/src/org/digijava/module/aim/action/TranslatorManager.java index 5e822b83687..7f953931af3 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/action/TranslatorManager.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/action/TranslatorManager.java @@ -69,15 +69,13 @@ public ActionForward execute(ActionMapping mapping, ActionForm form,HttpServletR try { trns_in = (Translations) m.unmarshal(inputStream); if (trns_in.getTrn() != null) { - Iterator it = trns_in.getTrn().iterator(); - while (it.hasNext()) { - Trn element = it.next(); - List langs=element.getLang(); + for (Trn element : trns_in.getTrn()) { + List langs = element.getLang(); // translation must have at least one language,so this // list can't be null. for (Language lang : langs) { languagesImport.add(lang.getCode()); - } + } } tMngForm.setImportedLanguages(languagesImport); @@ -164,7 +162,7 @@ public ActionForward execute(ActionMapping mapping, ActionForm form,HttpServletR if (tMngForm.getSelectedImportedLanguages()[i].compareTo(langSearched) == 0) searchedLang = true; } - if (searchedLang == false && + if (!searchedLang && request.getParameter("LANG:" + tMngForm.getSelectedImportedLanguages()[i]).compareTo("update") == 0) { ActionMessages errors = new ActionMessages(); errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("error.aim.updateErrorTranslation")); @@ -174,40 +172,37 @@ public ActionForward execute(ActionMapping mapping, ActionForm form,HttpServletR } for(int i=0; i it=trnHashMaps.iterator(); - while (it.hasNext()) { - TrnHashMap tHP=(TrnHashMap)it.next(); - if (tHP.getLang().compareTo(tMngForm.getSelectedImportedLanguages()[i]) == 0) { - // what was selected: overwrite,update or insert - // non-existing - String actionName=request.getParameter("LANG:"+tMngForm.getSelectedImportedLanguages()[i]); - // what to do with translations,which have - // keywords that were typed by user on import - // page. - String skipOrUpdateTrnsWithKeywords=tMngForm.getSkipOrUpdateTrnsWithKeywords(); - List keywords = null; - if (tMngForm.getKeywords() == null) { - keywords = new ArrayList(); - } else { - keywords = Arrays.asList(tMngForm.getKeywords()); - } + for (TrnHashMap tHP : trnHashMaps) { + if (tHP.getLang().compareTo(tMngForm.getSelectedImportedLanguages()[i]) == 0) { + // what was selected: overwrite,update or insert + // non-existing + String actionName = request.getParameter("LANG:" + tMngForm.getSelectedImportedLanguages()[i]); + // what to do with translations,which have + // keywords that were typed by user on import + // page. + String skipOrUpdateTrnsWithKeywords = tMngForm.getSkipOrUpdateTrnsWithKeywords(); + List keywords = null; + if (tMngForm.getKeywords() == null) { + keywords = new ArrayList(); + } else { + keywords = Arrays.asList(tMngForm.getKeywords()); + } - for (Message message : (Iterable) tHP.getTranslations()) { - Message msg = message; - // now overwrite,update or insert - // non-existing translation - if (actionName.compareTo("nonexisting") == 0) { - updateNonExistingTranslationMessage(msg, tMngForm.getSelectedImportedLanguages()[i], request); - logger.info("updating non existing...." + msg.getKey()); - } else if (actionName.compareTo("update") == 0) { - overrideOrUpdateTrns(msg, tMngForm.getSelectedImportedLanguages()[i], actionName, keywords, skipOrUpdateTrnsWithKeywords, request); - logger.info("updating new tr msg...." + msg.getKey()); - } else if (actionName.compareTo("overwrite") == 0) { - overrideOrUpdateTrns(msg, tMngForm.getSelectedImportedLanguages()[i], actionName, keywords, skipOrUpdateTrnsWithKeywords, request); - logger.info("inserting...." + msg.getKey()); + for (Message message : (Iterable) tHP.getTranslations()) { + // now overwrite,update or insert + // non-existing translation + if (actionName.compareTo("nonexisting") == 0) { + updateNonExistingTranslationMessage(message, tMngForm.getSelectedImportedLanguages()[i], request); + logger.info("updating non existing...." + message.getKey()); + } else if (actionName.compareTo("update") == 0) { + overrideOrUpdateTrns(message, tMngForm.getSelectedImportedLanguages()[i], actionName, keywords, skipOrUpdateTrnsWithKeywords, request); + logger.info("updating new tr msg...." + message.getKey()); + } else if (actionName.compareTo("overwrite") == 0) { + overrideOrUpdateTrns(message, tMngForm.getSelectedImportedLanguages()[i], actionName, keywords, skipOrUpdateTrnsWithKeywords, request); + logger.info("inserting...." + message.getKey()); + } } } - } } } } @@ -299,7 +294,7 @@ private void fillMapWithTranslationsForALanguage(String language,Map Date: Mon, 4 Sep 2023 13:17:50 +0300 Subject: [PATCH 041/307] AMP-30712 Add tab for Trubudget for superadmin globalsettings --- .../org/digijava/module/aim/action/TranslatorManager.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/amp/WEB-INF/src/org/digijava/module/aim/action/TranslatorManager.java b/amp/WEB-INF/src/org/digijava/module/aim/action/TranslatorManager.java index 7f953931af3..e25a414f7a7 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/action/TranslatorManager.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/action/TranslatorManager.java @@ -278,11 +278,11 @@ private void fillMapWithTranslationsForALanguage(String language,Map) qry.list()) { // MessageGroup class key is equal to the message key, from // which it was created - MessageGroup msgGroup = map.get(((Message) message).getKey()); + MessageGroup msgGroup = map.get(message.getKey()); if (msgGroup == null) { - msgGroup = new MessageGroup((Message) message); + msgGroup = new MessageGroup(message); } else { - msgGroup.addMessage((Message) message); + msgGroup.addMessage(message); } map.put(msgGroup.getKey(), msgGroup); } From 94dade3c603f0711f9e34726c4e7648553178a73 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Mon, 4 Sep 2023 13:22:56 +0300 Subject: [PATCH 042/307] AMP-30712 Add tab for Trubudget for superadmin globalsettings --- .../kernel/jobs/CleanIATIResourceJob.java | 2 +- .../jobs/DownloadAmpOfflineReleasesJob.java | 2 +- .../jobs/RegisterWithAmpRegistryJob.java | 2 +- .../impl/org/LucOrganisationModule.java | 3 +- .../digijava/kernel/mail/DgEmailManager.java | 45 +++++++++---------- .../module/aim/action/TranslatorManager.java | 4 +- 6 files changed, 26 insertions(+), 32 deletions(-) diff --git a/amp/WEB-INF/src/org/digijava/kernel/jobs/CleanIATIResourceJob.java b/amp/WEB-INF/src/org/digijava/kernel/jobs/CleanIATIResourceJob.java index f5e069c5056..5ef0251c847 100644 --- a/amp/WEB-INF/src/org/digijava/kernel/jobs/CleanIATIResourceJob.java +++ b/amp/WEB-INF/src/org/digijava/kernel/jobs/CleanIATIResourceJob.java @@ -33,7 +33,7 @@ public class CleanIATIResourceJob extends ConnectionCleaningJob { private final Logger logger = LoggerFactory.getLogger(CleanIATIResourceJob.class); - private ResourceService resourceService = new ResourceService(); + private final ResourceService resourceService = new ResourceService(); @Override public void executeInternal(JobExecutionContext context) throws JobExecutionException { diff --git a/amp/WEB-INF/src/org/digijava/kernel/jobs/DownloadAmpOfflineReleasesJob.java b/amp/WEB-INF/src/org/digijava/kernel/jobs/DownloadAmpOfflineReleasesJob.java index 74c84aadc8a..ccf43913016 100644 --- a/amp/WEB-INF/src/org/digijava/kernel/jobs/DownloadAmpOfflineReleasesJob.java +++ b/amp/WEB-INF/src/org/digijava/kernel/jobs/DownloadAmpOfflineReleasesJob.java @@ -46,7 +46,7 @@ public class DownloadAmpOfflineReleasesJob extends NonConcurrentJob { private AmpVersionService ampVersionService; private AmpOfflineService ampOfflineService; - private AmpRegistryService ampRegistryService = AmpRegistryService.INSTANCE; + private final AmpRegistryService ampRegistryService = AmpRegistryService.INSTANCE; @Override public void executeNonConcurrentInternal(JobExecutionContext context) throws JobExecutionException { diff --git a/amp/WEB-INF/src/org/digijava/kernel/jobs/RegisterWithAmpRegistryJob.java b/amp/WEB-INF/src/org/digijava/kernel/jobs/RegisterWithAmpRegistryJob.java index ceb4e34dcc9..69d325e3432 100644 --- a/amp/WEB-INF/src/org/digijava/kernel/jobs/RegisterWithAmpRegistryJob.java +++ b/amp/WEB-INF/src/org/digijava/kernel/jobs/RegisterWithAmpRegistryJob.java @@ -52,7 +52,7 @@ public class RegisterWithAmpRegistryJob extends ConnectionCleaningJob { private final Logger logger = LoggerFactory.getLogger(RegisterWithAmpRegistryJob.class); - private AmpRegistryService ampRegistryService = AmpRegistryService.INSTANCE; + private final AmpRegistryService ampRegistryService = AmpRegistryService.INSTANCE; @Override public void executeInternal(JobExecutionContext context) throws JobExecutionException { diff --git a/amp/WEB-INF/src/org/digijava/kernel/lucene/impl/org/LucOrganisationModule.java b/amp/WEB-INF/src/org/digijava/kernel/lucene/impl/org/LucOrganisationModule.java index 36db4c8f8d5..b599c502e83 100644 --- a/amp/WEB-INF/src/org/digijava/kernel/lucene/impl/org/LucOrganisationModule.java +++ b/amp/WEB-INF/src/org/digijava/kernel/lucene/impl/org/LucOrganisationModule.java @@ -73,8 +73,7 @@ public Document convertToDocument(AmpOrganisation item) { @Override public Term getIdFieldTerm(AmpOrganisation item) { - Term term = new Term(FIELD_ID, item.getAmpOrgId().toString()); - return term; + return new Term(FIELD_ID, item.getAmpOrgId().toString()); } @Override diff --git a/amp/WEB-INF/src/org/digijava/kernel/mail/DgEmailManager.java b/amp/WEB-INF/src/org/digijava/kernel/mail/DgEmailManager.java index a0910ef7e13..d9741237519 100644 --- a/amp/WEB-INF/src/org/digijava/kernel/mail/DgEmailManager.java +++ b/amp/WEB-INF/src/org/digijava/kernel/mail/DgEmailManager.java @@ -58,12 +58,11 @@ public class DgEmailManager { private static final String DEFAULT_ENCODING_EX = "ISO-8859-1"; private static String DEFAULT_ENCODING = null; - private static String[] SCHEMA_ARRAY = { + private static final String[] SCHEMA_ARRAY = { "http", "https", "ftp"}; - private static String SCHEMA_DELIMITER = "://"; - private static Logger logger = Logger.getLogger(DgEmailManager.class); - private static Logger emailLogger = Logger.getLogger("amp-email"); + private static final Logger logger = Logger.getLogger(DgEmailManager.class); + private static final Logger emailLogger = Logger.getLogger("amp-email"); private static Pattern CarReturnPattern = null; /** @@ -84,7 +83,7 @@ public class DgEmailManager { CarReturnPattern = Pattern.compile("(\r|\n|\r\n|\n\r)"); - locale2encoding = new HashMap(); + locale2encoding = new HashMap<>(); InputStream inStream = DgEmailManager.class.getClassLoader(). getResourceAsStream("org/digijava/kernel/mail/locales.properties"); @@ -164,19 +163,19 @@ public static String convertTextToHtml(String strText) { // strHtml = strHtml.replaceAll("[\n\r]", "
"); int startIndex = 0; + String SCHEMA_DELIMITER = "://"; while ( (startIndex = strHtml.indexOf(SCHEMA_DELIMITER, startIndex)) >= 0) { boolean isLink = false; int schemaLength = 0; - for (int i = 0; i < SCHEMA_ARRAY.length; i++) { - if ( (startIndex - SCHEMA_ARRAY[i].length() >= 0) && - strHtml.substring(startIndex - SCHEMA_ARRAY[i].length(), - startIndex).equals(SCHEMA_ARRAY[i])) { + for (String s : SCHEMA_ARRAY) { + if ((startIndex - s.length() >= 0) && + strHtml.startsWith(s, startIndex - s.length())) { - startIndex -= SCHEMA_ARRAY[i].length(); - schemaLength = SCHEMA_ARRAY[i].length() + - SCHEMA_DELIMITER.length(); + startIndex -= s.length(); + schemaLength = s.length() + + SCHEMA_DELIMITER.length(); isLink = true; } } @@ -217,7 +216,7 @@ public static String convertTextToHtml(String strText) { strHtml = strHtml.substring(0, startIndex) + link + - strHtml.substring(startIndex + linkLength, strHtml.length()); + strHtml.substring(startIndex + linkLength); startIndex += link.length(); } @@ -497,7 +496,7 @@ public static void sendMail(Address[] to, String from, Address[] cc, Address[] b logger.info("Finished getting session default instance"); - Address addresses[] = null; + Address[] addresses = null; if (forwardEmails.isEnabled() && forwardEmails.getEmails() != null) { addresses = new Address[forwardEmails.getEmails().size()]; for (int i = 0; i < forwardEmails.getEmails().size(); i++) { @@ -543,8 +542,7 @@ public static void sendMail(Address[] to, String from, Address[] cc, Address[] b private static void logEmail(Address[] to, String from, String subject, String text, String charset, boolean asHtml) { String toEmails = ""; if (to != null) { - toEmails = "[" + String.join(", ", - Arrays.asList(to).stream().map(Address::toString).collect(Collectors.toList())) + "]"; + toEmails = "[" + Arrays.stream(to).map(Address::toString).collect(Collectors.joining(", ")) + "]"; } emailLogger.debug("Sending mail from " + from + " to " + (to != null ? toEmails : "none") + " recipient(s). Subject: " @@ -755,14 +753,13 @@ public static int sendEmailMessages(Collection emailMessages, EmailProcessingCal transport.connect(smtp.getHost(), smtp.getUserName(), smtp.getUserPassword()); int numOfSuccesses = 0; - Iterator iter = emailMessages.iterator(); - while (iter.hasNext()) { - PlainTextEmailMessage emailMessage = (PlainTextEmailMessage) iter. next(); + for (Object o : emailMessages) { + PlainTextEmailMessage emailMessage = (PlainTextEmailMessage) o; // We create mime message, recipient, // to, subject and message content MimeMessage message = createMimeMessage(session, emailMessage, - addresses); + addresses); try { message.saveChanges(); // implicit with send() transport.sendMessage(message, message.getAllRecipients()); @@ -770,9 +767,8 @@ public static int sendEmailMessages(Collection emailMessages, EmailProcessingCal if (callback != null) { callback.sendSuccessed(emailMessage); } - numOfSuccesses ++; - } - catch (MessagingException ex) { + numOfSuccesses++; + } catch (MessagingException ex) { if (callback != null) { callback.sendError(emailMessage, ex.getMessage(), ex); } @@ -900,7 +896,7 @@ public static PlainTextEmailMessage createEmailMessage(final Address[] to, final Address[] bcc, final String subject, final String text, final String charset, final boolean asHtml, final boolean rtl) { - PlainTextEmailMessage emailMessage = new PlainTextEmailMessage() { + return new PlainTextEmailMessage() { public Address getSender() { return from; } @@ -937,7 +933,6 @@ public boolean isRTL() { return rtl; } }; - return emailMessage; } diff --git a/amp/WEB-INF/src/org/digijava/module/aim/action/TranslatorManager.java b/amp/WEB-INF/src/org/digijava/module/aim/action/TranslatorManager.java index e25a414f7a7..364b6259736 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/action/TranslatorManager.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/action/TranslatorManager.java @@ -268,8 +268,8 @@ private Vector getTranslationsFromMessageGroup(Map me } private void fillMapWithTranslationsForALanguage(String language,Map map){ - Session session = null; - String qryStr = null; + Session session; + String qryStr; Query qry; try{ session = PersistenceManager.getRequestDBSession(); From 8b1a9ad45fe8d4a02d00f3b506a44474dbe092bb Mon Sep 17 00:00:00 2001 From: brianbrix Date: Mon, 4 Sep 2023 14:20:11 +0300 Subject: [PATCH 043/307] AMP-30712 Add tab for Trubudget for superadmin globalsettings Start with criteria query refactoring --- .../CachedMachineTranslationService.java | 29 +++++++---- .../geocoding/client/GeoCoderClient.java | 1 - .../service/GeoCodingLocationMatcher.java | 6 +-- .../geocoding/service/GeoCodingService.java | 21 ++++++-- .../jobs/DownloadAmpOfflineReleasesJob.java | 4 +- .../persistence/PersistenceManager.java | 52 ++++++++----------- .../org/digijava/module/aim/util/DbUtil.java | 34 +++++++++--- 7 files changed, 91 insertions(+), 56 deletions(-) diff --git a/amp/WEB-INF/src/org/dgfoundation/amp/aitranslation/CachedMachineTranslationService.java b/amp/WEB-INF/src/org/dgfoundation/amp/aitranslation/CachedMachineTranslationService.java index 3bd8204e5e9..5b47d787f2e 100644 --- a/amp/WEB-INF/src/org/dgfoundation/amp/aitranslation/CachedMachineTranslationService.java +++ b/amp/WEB-INF/src/org/dgfoundation/amp/aitranslation/CachedMachineTranslationService.java @@ -3,6 +3,7 @@ import com.google.common.collect.ImmutableMap; import org.apache.commons.lang3.mutable.MutableInt; import org.apache.commons.lang3.tuple.Pair; +import org.digijava.kernel.entity.geocoding.GeoCodingProcess; import org.digijava.kernel.persistence.PersistenceManager; import org.digijava.module.aim.dbentity.MachineTranslation; import org.digijava.module.aim.dbentity.MachineTranslationCharactersUsed; @@ -10,6 +11,9 @@ import org.hibernate.Session; import org.hibernate.criterion.Restrictions; +import javax.persistence.criteria.CriteriaBuilder; +import javax.persistence.criteria.CriteriaQuery; +import javax.persistence.criteria.Root; import java.time.LocalDate; import java.util.ArrayList; import java.util.HashMap; @@ -73,12 +77,14 @@ private Pair, List> loadCachedTranslations( for (int i = 0; i < contents.size(); i += BATCH_SIZE) { List batchContents = contents.subList(i, Math.min(i + BATCH_SIZE, contents.size())); - translations.addAll(PersistenceManager.getSession() - .createCriteria(MachineTranslation.class) - .add(Restrictions.eq("sourceLanguage", srcLang)) - .add(Restrictions.eq("targetLanguage", destLang)) - .add(Restrictions.in("text", batchContents)) - .list()); + Session session = PersistenceManager.getRequestDBSession(); + CriteriaBuilder builder = session.getCriteriaBuilder(); + CriteriaQuery criteriaQuery = builder.createQuery(MachineTranslation.class); + Root root = criteriaQuery.from(MachineTranslation.class); + criteriaQuery.select(root).where(builder.equal(root.get("sourceLanguage"), srcLang),builder.equal(root.get("targetLanguage"), destLang), + builder.equal(root.get("text"), batchContents)); + + translations.addAll(session.createQuery(criteriaQuery).list()); } return translations.stream().map(o -> ((MachineTranslation) o)) @@ -124,10 +130,13 @@ private Predicate upToCodePoints(int charsAllowed) { } private int getCharactersUsedThisMonth() { - MachineTranslationCharactersUsed used = (MachineTranslationCharactersUsed) PersistenceManager.getSession() - .createCriteria(MachineTranslationCharactersUsed.class) - .add(Restrictions.eq("id", 1L)) - .uniqueResult(); + Session session = PersistenceManager.getRequestDBSession(); + CriteriaBuilder builder = session.getCriteriaBuilder(); + CriteriaQuery criteriaQuery = builder.createQuery(MachineTranslationCharactersUsed.class); + Root root = criteriaQuery.from(MachineTranslationCharactersUsed.class); + criteriaQuery.select(root).where(builder.equal(root.get("id"),1L)); + + MachineTranslationCharactersUsed used = session.createQuery(criteriaQuery).uniqueResult(); if (used != null && used.getMonth().equals(getCurrentMonth())) { return used.getUsed(); } else { diff --git a/amp/WEB-INF/src/org/digijava/kernel/geocoding/client/GeoCoderClient.java b/amp/WEB-INF/src/org/digijava/kernel/geocoding/client/GeoCoderClient.java index 67bbbbef61e..dedcd989cc4 100644 --- a/amp/WEB-INF/src/org/digijava/kernel/geocoding/client/GeoCoderClient.java +++ b/amp/WEB-INF/src/org/digijava/kernel/geocoding/client/GeoCoderClient.java @@ -39,7 +39,6 @@ public class GeoCoderClient { private static final String PATH_ACTIVITY_PROCESS = "activity/process"; private static final String PATH_QUEUE = "queue"; - private static final String PATH_AMP_LOCATIONS = "amp/locations"; public GeoCoderClient() { client = ClientBuilder.newClient(); diff --git a/amp/WEB-INF/src/org/digijava/kernel/geocoding/service/GeoCodingLocationMatcher.java b/amp/WEB-INF/src/org/digijava/kernel/geocoding/service/GeoCodingLocationMatcher.java index fd62aa80a8f..bff40aba183 100644 --- a/amp/WEB-INF/src/org/digijava/kernel/geocoding/service/GeoCodingLocationMatcher.java +++ b/amp/WEB-INF/src/org/digijava/kernel/geocoding/service/GeoCodingLocationMatcher.java @@ -20,7 +20,7 @@ public final class GeoCodingLocationMatcher { private static final long MIN_FUZZY_DISTANCE = 10; private static final double MAX_COORD_DISTANCE = 0.0001; - private static FuzzyScore fz = new FuzzyScore(Locale.getDefault()); + private static final FuzzyScore fz = new FuzzyScore(Locale.getDefault()); private GeoCodingLocationMatcher() { @@ -65,10 +65,10 @@ private static boolean matchByAdministrativeLevel(final AmpCategoryValueLocation private static boolean matchByGeoCode(final AmpCategoryValueLocations ampLocation, final GeoCoderClient.GeoCodingLocation location) { - if (StringUtils.isBlank(ampLocation.getGeoCode()) || StringUtils.isBlank("" + location.getGeoCode())) { + if (StringUtils.isBlank(ampLocation.getGeoCode()) || StringUtils.isBlank(String.valueOf(location.getGeoCode()))) { return false; } - return StringUtils.equalsIgnoreCase(ampLocation.getGeoCode(), "" + location.getGeoCode()); + return StringUtils.equalsIgnoreCase(ampLocation.getGeoCode(), String.valueOf(location.getGeoCode())); } private static boolean matchByCoordinates(final AmpCategoryValueLocations ampLocation, diff --git a/amp/WEB-INF/src/org/digijava/kernel/geocoding/service/GeoCodingService.java b/amp/WEB-INF/src/org/digijava/kernel/geocoding/service/GeoCodingService.java index c87a0b6de5f..43b60770f7d 100644 --- a/amp/WEB-INF/src/org/digijava/kernel/geocoding/service/GeoCodingService.java +++ b/amp/WEB-INF/src/org/digijava/kernel/geocoding/service/GeoCodingService.java @@ -26,6 +26,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import javax.persistence.criteria.CriteriaBuilder; +import javax.persistence.criteria.CriteriaQuery; +import javax.persistence.criteria.Root; import java.math.BigDecimal; import java.util.*; import java.util.stream.Collectors; @@ -41,7 +44,7 @@ public class GeoCodingService { private static final BigDecimal ONE_HUNDRED = BigDecimal.valueOf(100); - private static GeoCoderClient client = new GeoCoderClient(); + private static final GeoCoderClient client = new GeoCoderClient(); /** * Add activities to be geo coded as part of the current process. If the same activity is added twice, previous @@ -240,9 +243,19 @@ public void cancelGeoCoding() { } public GeoCodingProcess getCurrentGeoCoding() { - List geoCodingProcesses = PersistenceManager.getSession() - .createCriteria(GeoCodingProcess.class) - .list(); + + CriteriaBuilder builder = PersistenceManager.getRequestDBSession().getCriteriaBuilder(); + CriteriaQuery criteriaQuery = builder.createQuery(GeoCodingProcess.class); + + Root root = criteriaQuery.from(GeoCodingProcess.class); + + criteriaQuery.select(root); + + List geoCodingProcesses = PersistenceManager.getRequestDBSession() + .createQuery(criteriaQuery) + .getResultList(); + + return geoCodingProcesses.isEmpty() ? null : geoCodingProcesses.get(0); } diff --git a/amp/WEB-INF/src/org/digijava/kernel/jobs/DownloadAmpOfflineReleasesJob.java b/amp/WEB-INF/src/org/digijava/kernel/jobs/DownloadAmpOfflineReleasesJob.java index ccf43913016..afb6981dd1b 100644 --- a/amp/WEB-INF/src/org/digijava/kernel/jobs/DownloadAmpOfflineReleasesJob.java +++ b/amp/WEB-INF/src/org/digijava/kernel/jobs/DownloadAmpOfflineReleasesJob.java @@ -49,7 +49,7 @@ public class DownloadAmpOfflineReleasesJob extends NonConcurrentJob { private final AmpRegistryService ampRegistryService = AmpRegistryService.INSTANCE; @Override - public void executeNonConcurrentInternal(JobExecutionContext context) throws JobExecutionException { + public void executeNonConcurrentInternal(JobExecutionContext context) { if (FeaturesUtil.isAmpOfflineEnabled()) { Set newReleases = new HashSet<>(); PersistenceManager.inTransaction(() -> { @@ -62,7 +62,7 @@ public void executeNonConcurrentInternal(JobExecutionContext context) throws Job } }); - newReleases.forEach(release -> persistRelease(release)); + newReleases.forEach(this::persistRelease); saveReleasesInDb(newReleases); removeIncompatibleReleases(); diff --git a/amp/WEB-INF/src/org/digijava/kernel/persistence/PersistenceManager.java b/amp/WEB-INF/src/org/digijava/kernel/persistence/PersistenceManager.java index 96084187981..9cebdd38ce0 100644 --- a/amp/WEB-INF/src/org/digijava/kernel/persistence/PersistenceManager.java +++ b/amp/WEB-INF/src/org/digijava/kernel/persistence/PersistenceManager.java @@ -159,8 +159,7 @@ private static void removeClosedSessionsFromMap() { * @return */ public static Session openNewSession() { - org.hibernate.Session openSession = sf.openSession(); - return openSession; + return sf.openSession(); } /** @@ -209,17 +208,16 @@ public static void closeUnclosedSessionsFromTraceMap() { // print open sessions boolean found=false; synchronized (sessionStackTraceMap) { - Iterator iterator = PersistenceManager.sessionStackTraceMap.keySet().iterator(); - while (iterator.hasNext()) { - Session session = (Session) iterator.next(); - if(session.isOpen()) { - found=true; - Object o[] = sessionStackTraceMap.get(session); + for (Session session : PersistenceManager.sessionStackTraceMap.keySet()) { + if (session.isOpen()) { + found = true; + Object[] o = sessionStackTraceMap.get(session); StackTraceElement[] stackTraceElements = (StackTraceElement[]) o[1]; - logger.info("Session opened "+(System.currentTimeMillis()-(Long)o[0])+" miliseconds ago is still open. Will force closure, recorded stack trace: "); - for (int i = 3; i < stackTraceElements.length && i < 8; i++) logger.info(stackTraceElements[i].toString()); + logger.info("Session opened " + (System.currentTimeMillis() - (Long) o[0]) + " miliseconds ago is still open. Will force closure, recorded stack trace: "); + for (int i = 3; i < stackTraceElements.length && i < 8; i++) + logger.info(stackTraceElements[i].toString()); logger.info("Forcing Hibernate session close..."); - try { + try { session.clear(); session.close(); logger.info("Hibernate Session Close succeeded"); @@ -261,7 +259,7 @@ public static synchronized void initialize(boolean precache, String target) { if (!target.equalsIgnoreCase("kernel")) { Object modConfig = DigiConfigManager.getModulesConfig().get(target); if (modConfig != null) { - modulesConfig = new HashMap(); + modulesConfig = new HashMap<>(); modulesConfig.put(target, modConfig); } } @@ -400,7 +398,7 @@ private static void precacheToRegion(Session session, logger.debug("Using region " + region.getType()); } if (forcePrecache || (!forcePrecache && region.getSize() <= 0)) { - Map precache = new HashMap(); + Map precache = new HashMap<>(); try { Class clazz = Class.forName(className); ClassMetadata meta = sf.getClassMetadata(clazz); @@ -410,17 +408,15 @@ private static void precacheToRegion(Session session, return; } List rows = session.createQuery(precacheHql).list(); - Iterator rowIter = rows.iterator(); - while (rowIter.hasNext()) { - Object item = rowIter.next(); - Serializable id = meta.getIdentifier(item,(SessionImplementor)session); + for (Object item : rows) { + Serializable id = meta.getIdentifier(item, (SessionImplementor) session); if (id == null) { - String errMsg = "One of the object identities is null for class: " +className; + String errMsg = "One of the object identities is null for class: " + className; logger.error(errMsg); throw new DgException(errMsg); } //Separate case for translations: we need to process translation keys. - if (Message.class.getName().equals(className) && !config.isCaseSensitiveTranslatioKeys()){ + if (Message.class.getName().equals(className) && !config.isCaseSensitiveTranslatioKeys()) { Message msgId = (Message) id; Message msg = (Message) item; TranslatorWorker.getInstance().processKeyCase(msg); @@ -674,7 +670,7 @@ public final static Long getLong(Object obj) * @param obj * @return */ - public final static Integer getInteger(Object obj) + public static Integer getInteger(Object obj) { if (obj == null) return null; @@ -692,7 +688,7 @@ public final static Integer getInteger(Object obj) * @param obj * @return */ - public final static String getString(Object obj) + public static String getString(Object obj) { if (obj == null) return null; @@ -706,7 +702,7 @@ public final static String getString(Object obj) * @param obj * @return */ - public final static Double getDouble(Object obj) + public static Double getDouble(Object obj) { if (obj == null) return null; @@ -719,7 +715,7 @@ public final static Double getDouble(Object obj) throw new RuntimeException("cannot convert object of class " + obj.getClass().getName() + " to double"); } - public final static Boolean getBoolean(Object obj) { + public static Boolean getBoolean(Object obj) { if (obj == null) return null; if (obj instanceof Boolean) @@ -820,12 +816,10 @@ public static void cleanupSession(Session session) { private static void removeSessionFromMap(Session session) { synchronized (sessionStackTraceMap) { - if (sessionStackTraceMap.containsKey(session)) { - //logger.error(String.format("Thread #%d: removing Session %d", Thread.currentThread().getId(), System.identityHashCode(session))); - sessionStackTraceMap.remove(session); - } else { - //logger.error(String.format("Thread #%d: trying to cleanup nonexisting Session %d", Thread.currentThread().getId(), System.identityHashCode(session))); - } + //logger.error(String.format("Thread #%d: removing Session %d", Thread.currentThread().getId(), System.identityHashCode(session))); + //logger.error(String.format("Thread #%d: trying to cleanup nonexisting Session %d", Thread.currentThread().getId(), System.identityHashCode(session))); + sessionStackTraceMap.remove(session); + } } diff --git a/amp/WEB-INF/src/org/digijava/module/aim/util/DbUtil.java b/amp/WEB-INF/src/org/digijava/module/aim/util/DbUtil.java index 9e886b2aa22..be3c8a6e0ed 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/util/DbUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/util/DbUtil.java @@ -8,6 +8,7 @@ import org.dgfoundation.amp.ar.viewfetcher.SQLUtils; import org.digijava.kernel.dbentity.Country; import org.digijava.kernel.entity.Message; +import org.digijava.kernel.entity.geocoding.GeoCodingProcess; import org.digijava.kernel.exception.DgException; import org.digijava.kernel.persistence.PersistenceManager; import org.digijava.kernel.request.Site; @@ -30,6 +31,10 @@ import org.hibernate.query.Query; import org.hibernate.type.*; +import javax.persistence.criteria.CriteriaBuilder; +import javax.persistence.criteria.CriteriaQuery; +import javax.persistence.criteria.Predicate; +import javax.persistence.criteria.Root; import javax.servlet.http.HttpServletRequest; import java.io.Serializable; import java.sql.Connection; @@ -3028,19 +3033,34 @@ public static void clearPendingChanges() { * get colors ordered by threshold */ public static List getColorThresholds() { - return PersistenceManager.getSession().createCriteria(AmpColorThreshold.class) - .addOrder(org.hibernate.criterion.Order.asc("thresholdStart")).list(); + Session session = PersistenceManager.getRequestDBSession(); + CriteriaBuilder builder = session.getCriteriaBuilder(); + CriteriaQuery criteriaQuery = builder.createQuery(AmpColorThreshold.class); + Root root = criteriaQuery.from(AmpColorThreshold.class); + criteriaQuery.select(root).orderBy(builder.asc(root.get("thresholdStart"))); + return session.createQuery(criteriaQuery).list(); +// return PersistenceManager.getSession().createCriteria(AmpColorThreshold.class) +// .addOrder(org.hibernate.criterion.Order.asc("thresholdStart")).list(); } /* * Count agreements with the specified code. */ public static Integer countAgreementsByCode(String agreementCode) { - return ((Long) PersistenceManager.getSession() - .createCriteria(AmpAgreement.class) - .setProjection(Projections.count("id")) - .add(Restrictions.sqlRestriction("trim({alias}.code) = ?", agreementCode, StringType.INSTANCE)) - .uniqueResult()).intValue(); + Session session =PersistenceManager.getRequestDBSession(); + CriteriaBuilder builder = session.getCriteriaBuilder(); + CriteriaQuery criteriaQuery = builder.createQuery(Long.class); + Root root = criteriaQuery.from(AmpAgreement.class); + Predicate restriction = builder.equal( + builder.trim(root.get("code")), agreementCode.trim() + ); + criteriaQuery.select(builder.count(root.get("id"))).where(restriction); + return session.createQuery(criteriaQuery).uniqueResult().intValue(); +// return ((Long) PersistenceManager.getSession() +// .createCriteria(AmpAgreement.class) +// .setProjection(Projections.count("id")) +// .add(Restrictions.sqlRestriction("trim({alias}.code) = ?", agreementCode, StringType.INSTANCE)) +// .uniqueResult()).intValue(); } public static boolean hasDonorRole(Long id){ From 49542ae70aed7f30cea59952cc5bbe0f3cd78ef6 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Mon, 4 Sep 2023 14:20:25 +0300 Subject: [PATCH 044/307] AMP-30712 Add tab for Trubudget for superadmin globalsettings Start with criteria query refactoring --- .../amp/onepager/models/AmpAgreementSearchModel.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/models/AmpAgreementSearchModel.java b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/models/AmpAgreementSearchModel.java index 705b8bc79cb..a6c9b5c7682 100644 --- a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/models/AmpAgreementSearchModel.java +++ b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/models/AmpAgreementSearchModel.java @@ -37,7 +37,7 @@ public AmpAgreementSearchModel(String input,String language, protected Collection load() { Collection ret = null; try { - ret = new ArrayList(); + ret = new ArrayList<>(); Session session = PersistenceManager.getRequestDBSession(); Integer maxResults = (Integer) getParams().get( AbstractAmpAutoCompleteModel.PARAM.MAX_RESULTS); From 3b00780d3ec58715462cecec839c390610b03458 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Wed, 6 Sep 2023 13:11:45 +0300 Subject: [PATCH 045/307] AMP-30712 Add tab for Trubudget for superadmin globalsettings Start with criteria query refactoring --- .../models/AmpAgreementSearchModel.java | 1 - .../preview/PreviewActivityService.java | 61 ++++++++----------- .../module/um/action/RegisterUser.java | 4 +- .../module/um/action/ViewEditUser.java | 4 +- .../org/digijava/module/um/util/DbUtil.java | 39 ++++++------ 5 files changed, 51 insertions(+), 58 deletions(-) diff --git a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/models/AmpAgreementSearchModel.java b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/models/AmpAgreementSearchModel.java index a6c9b5c7682..cec4431cfba 100644 --- a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/models/AmpAgreementSearchModel.java +++ b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/models/AmpAgreementSearchModel.java @@ -37,7 +37,6 @@ public AmpAgreementSearchModel(String input,String language, protected Collection load() { Collection ret = null; try { - ret = new ArrayList<>(); Session session = PersistenceManager.getRequestDBSession(); Integer maxResults = (Integer) getParams().get( AbstractAmpAutoCompleteModel.PARAM.MAX_RESULTS); diff --git a/amp/WEB-INF/src/org/digijava/kernel/ampapi/endpoints/activity/preview/PreviewActivityService.java b/amp/WEB-INF/src/org/digijava/kernel/ampapi/endpoints/activity/preview/PreviewActivityService.java index 008a475be54..48a4e9ed20c 100644 --- a/amp/WEB-INF/src/org/digijava/kernel/ampapi/endpoints/activity/preview/PreviewActivityService.java +++ b/amp/WEB-INF/src/org/digijava/kernel/ampapi/endpoints/activity/preview/PreviewActivityService.java @@ -39,7 +39,7 @@ */ public final class PreviewActivityService { - protected static final int PERCENTAGE_MULTIPLIER = 100; + private static final int PERCENTAGE_MULTIPLIER = 100; private static final int TEAM_NAME_INDEX = 3; private static PreviewActivityService previewActivityService; @@ -167,28 +167,26 @@ private List calculateTotals(List previewFu } ))); List totals = new ArrayList<>(); - if (allTransactionsByTypeAndAdjustment.isPresent()) { - allTransactionsByTypeAndAdjustment.get().forEach((transactionType, previewFundingTransactions) -> { - Map transactionTotalByAdjustmentType = - previewFundingTransactions.stream().collect(Collectors. - groupingBy(PreviewFundingTransaction::getAdjustmentType, - Collectors.summingDouble(PreviewFundingTransaction::getTransactionAmount) - )); - - transactionTotalByAdjustmentType.forEach((adjustmentType, totalAmount) -> { - - PreviewFundingTotal total = new PreviewFundingTotal(); - total.setTransactionType(transactionType); - total.setAdjustmentType(adjustmentType); - total.setAmount(totalAmount); - totals.add(total); - }); + allTransactionsByTypeAndAdjustment.ifPresent(stringListMap -> stringListMap.forEach((transactionType, previewFundingTransactions) -> { + Map transactionTotalByAdjustmentType = + previewFundingTransactions.stream().collect(Collectors. + groupingBy(PreviewFundingTransaction::getAdjustmentType, + Collectors.summingDouble(PreviewFundingTransaction::getTransactionAmount) + )); + + transactionTotalByAdjustmentType.forEach((adjustmentType, totalAmount) -> { + + PreviewFundingTotal total = new PreviewFundingTotal(); + total.setTransactionType(transactionType); + total.setAdjustmentType(adjustmentType); + total.setAmount(totalAmount); + totals.add(total); }); - } + })); return totals; } - private ImmutablePair getTotalActualCommitmentDisbursement(List totals) { + private ImmutablePair getTotalActualCommitmentDisbursement(List totals ) { Long actualCategoryValueId = CategoryConstants.ADJUSTMENT_TYPE_ACTUAL.getIdInDatabase(); Double totalActualCommitments = calculateTotal(totals, actualCategoryValueId, @@ -196,7 +194,7 @@ private ImmutablePair getTotalActualCommitmentDisbursement(List Double totalActualDisbursements = calculateTotal(totals, actualCategoryValueId, ArConstants.DISBURSEMENT.toLowerCase()); - return new ImmutablePair(totalActualCommitments, totalActualDisbursements); + return new ImmutablePair<>(totalActualCommitments, totalActualDisbursements); } /** @@ -236,8 +234,7 @@ private Double calculateTotalsUndisbursedBalance(List total private Double calculateTotal(List totals, Long actualCategoryValueId, String commitment) { return totals.stream() .filter(fd -> fd.getTransactionType().equals(commitment) - && fd.getAdjustmentType().equals(actualCategoryValueId)) - .collect(Collectors.summingDouble(PreviewFundingTotal::getAmount)); + && fd.getAdjustmentType().equals(actualCategoryValueId)).mapToDouble(PreviewFundingTotal::getAmount).sum(); } @@ -271,15 +268,13 @@ private Double calculateUndisbursedBalance(Map - t.getAdjustmentType().equals(actualCategoryValueId)). - collect(Collectors.summingDouble(PreviewFundingTransaction::getTransactionAmount)); + double totalActualCommitments = transactions.getOrDefault(ArConstants.COMMITMENT.toLowerCase(), + Collections.emptyList()).stream().filter(t -> + t.getAdjustmentType().equals(actualCategoryValueId)).mapToDouble(PreviewFundingTransaction::getTransactionAmount).sum(); - Double totalActualDisbursements = transactions.getOrDefault(ArConstants.DISBURSEMENT.toLowerCase(), - Collections.emptyList()).stream().filter(t -> - t.getAdjustmentType().equals(actualCategoryValueId)). - collect(Collectors.summingDouble(PreviewFundingTransaction::getTransactionAmount)); + double totalActualDisbursements = transactions.getOrDefault(ArConstants.DISBURSEMENT.toLowerCase(), + Collections.emptyList()).stream().filter(t -> + t.getAdjustmentType().equals(actualCategoryValueId)).mapToDouble(PreviewFundingTransaction::getTransactionAmount).sum(); return totalActualCommitments != 0 || totalActualDisbursements != 0 ? totalActualCommitments - totalActualDisbursements : null; @@ -328,7 +323,7 @@ public List getWorkspaces(Long activityId) { List computedTeams = TeamUtil.getAllTeams().stream() .filter(t -> Boolean.TRUE.equals(t.getComputation()) || Boolean.TRUE.equals(t.getUseFilter())) - .filter(t -> t.getAmpTeamId() != ownerTeam.getAmpTeamId()) + .filter(t -> !Objects.equals(t.getAmpTeamId(), ownerTeam.getAmpTeamId())) .collect(Collectors.toList()); final StringBuffer wsQueries = new StringBuffer(); @@ -349,9 +344,7 @@ public List getWorkspaces(Long activityId) { while (teamsInActivityQuery.rs.next()) { // activityTeams Long ampActivityId = teamsInActivityQuery.rs.getLong(1); - if (activityTeams.get(ampActivityId) == null) { - activityTeams.put(ampActivityId, new ArrayList<>()); - } + activityTeams.computeIfAbsent(ampActivityId, k -> new ArrayList<>()); activityTeams.get(ampActivityId).add( new Team(teamsInActivityQuery.rs.getLong(2), teamsInActivityQuery.rs.getString(TEAM_NAME_INDEX))); diff --git a/amp/WEB-INF/src/org/digijava/module/um/action/RegisterUser.java b/amp/WEB-INF/src/org/digijava/module/um/action/RegisterUser.java index 31ea0b70c26..81e8533bc7c 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/action/RegisterUser.java +++ b/amp/WEB-INF/src/org/digijava/module/um/action/RegisterUser.java @@ -72,8 +72,8 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, List truBudgetIntents = getTruBudgetIntentsByName(intents); logger.info("Intents: "+ truBudgetIntents); - user.getTruBudgetIntents().addAll(new HashSet<>(truBudgetIntents)); - user.setTruBudgetIntents(user.getTruBudgetIntents()); +// user.getTruBudgetIntents().addAll(new HashSet<>(truBudgetIntents)); + user.setTruBudgetIntents(new HashSet<>(truBudgetIntents)); // set client IP address user.setModifyingIP(RequestUtils.getRemoteAddress(request)); diff --git a/amp/WEB-INF/src/org/digijava/module/um/action/ViewEditUser.java b/amp/WEB-INF/src/org/digijava/module/um/action/ViewEditUser.java index 2c07333d15f..0c23fb4240e 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/action/ViewEditUser.java +++ b/amp/WEB-INF/src/org/digijava/module/um/action/ViewEditUser.java @@ -316,8 +316,8 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServlet List truBudgetIntents = getTruBudgetIntentsByName(intents); // TODO: 8/28/23 add for trubudget request - user.getTruBudgetIntents().addAll(new HashSet<>(truBudgetIntents)); - user.setTruBudgetIntents(user.getTruBudgetIntents()); +// user.getTruBudgetIntents().addAll(new HashSet<>(truBudgetIntents)); + user.setTruBudgetIntents(new HashSet<>(truBudgetIntents)); user.setCountry(org.digijava.module.aim.util.DbUtil.getDgCountry(uForm.getSelectedCountryIso())); if(uForm.getSelectedRegionId()==-1){ diff --git a/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java b/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java index 8f2fbe01e87..5ee14d81905 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java @@ -582,14 +582,31 @@ public static boolean registerUserOnTrubudget(TruUserData userData, User user) t truResp.subscribe(truLoginResponse -> { - TruUserData res = null; if (user.getTruBudgetEnabled()) { logger.info("We already have a trubudget account for this user email/username."); } else { try { - res = GenericWebClient.postForSingleObjResponse(getSettingValue(settings,"baseUrl")+"api/global.createUser", userData, TruUserData.class, TruUserData.class, truLoginResponse.getData().getUser().getToken()).block(); + GenericWebClient.postForSingleObjResponse(getSettingValue(settings,"baseUrl")+"api/global.createUser", userData, TruUserData.class, TruUserData.class, truLoginResponse.getData().getUser().getToken()).subscribe(response->{ + logger.info("Create user response: " + response); + if (!user.getTruBudgetIntents().isEmpty()) { + Flux.range(0, user.getTruBudgetIntents().size()) + .flatMap(index -> { + TruGrantPermissionRequest permData = new TruGrantPermissionRequest(); + TruGrantPermissionRequest.Data data1 = new TruGrantPermissionRequest.Data(); + data1.setIdentity(response !=null? response.getData().getUser().getId():user.getEmail().split("@")[0]); + data1.setIntent(new ArrayList<>(user.getTruBudgetIntents()).get(index).getTruBudgetIntentName()); + permData.setData(data1); + permData.setApiVersion(getSettingValue(settings,"apiVersion")); + try { + return GenericWebClient.postForSingleObjResponse(getSettingValue(settings,"baseUrl")+"api/global.grantPermission", permData, TruGrantPermissionRequest.class, String.class, truLoginResponse.getData().getUser().getToken()); + } catch (URISyntaxException e) { + return Flux.error(new RuntimeException(e)); + } + }).subscribeOn(Schedulers.parallel()).subscribe(permissionResponse->logger.info("Permission response:ss " + permissionResponse)); + } + }); }catch (Exception e) { @@ -598,23 +615,7 @@ public static boolean registerUserOnTrubudget(TruUserData userData, User user) t } - if (!user.getTruBudgetIntents().isEmpty()) { - TruUserData finalRes = res; - Flux.range(0, user.getTruBudgetIntents().size()) - .flatMap(index -> { - TruGrantPermissionRequest permData = new TruGrantPermissionRequest(); - TruGrantPermissionRequest.Data data1 = new TruGrantPermissionRequest.Data(); - data1.setIdentity(finalRes !=null? finalRes.getData().getUser().getId():user.getEmail().split("@")[0]); - data1.setIntent(new ArrayList<>(user.getTruBudgetIntents()).get(index).getTruBudgetIntentName()); - permData.setData(data1); - permData.setApiVersion(getSettingValue(settings,"apiVersion")); - try { - return GenericWebClient.postForSingleObjResponse(getSettingValue(settings,"baseUrl")+"api/global.grantPermission", permData, TruGrantPermissionRequest.class, String.class, truLoginResponse.getData().getUser().getToken()).subscribeOn(Schedulers.parallel()); - } catch (URISyntaxException e) { - throw new RuntimeException(e); - } - }).subscribe(response -> logger.info("Permission response: " + response)); - } + },throwable -> { throw new RuntimeException(throwable.getMessage()); }); From e6fe324c223a28ae3e8fa4ff98b08245080db252 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Wed, 6 Sep 2023 16:02:22 +0300 Subject: [PATCH 046/307] AMP-30712 Try reevoke removed permissions --- .../src/org/digijava/kernel/user/User.java | 10 +++ .../aim/startup/AMPStartupListener.java | 2 +- .../module/um/action/RegisterUser.java | 1 + .../module/um/action/ViewEditUser.java | 1 + .../um/model/TruRevokePermissionRequest.java | 68 +++++++++++++++++ .../org/digijava/module/um/util/DbUtil.java | 74 +++++++++++-------- .../module/um/util/GenericWebClient.java | 2 +- 7 files changed, 127 insertions(+), 31 deletions(-) create mode 100644 amp/WEB-INF/src/org/digijava/module/um/model/TruRevokePermissionRequest.java diff --git a/amp/WEB-INF/src/org/digijava/kernel/user/User.java b/amp/WEB-INF/src/org/digijava/kernel/user/User.java index aec90091dee..1df4f7f90a6 100644 --- a/amp/WEB-INF/src/org/digijava/kernel/user/User.java +++ b/amp/WEB-INF/src/org/digijava/kernel/user/User.java @@ -34,6 +34,7 @@ import org.digijava.module.aim.util.DbUtil; import org.digijava.module.aim.util.Identifiable; +import javax.persistence.Transient; import javax.security.auth.Subject; import java.io.Serializable; import java.sql.Clob; @@ -86,6 +87,8 @@ public class User private Set assignedOrgs; private Date passwordChangedAt; private Set truBudgetIntents= new HashSet<>(); + @Transient + private transient Set initialTruBudgetIntents= new HashSet<>(); private Boolean truBudgetEnabled=false; public Boolean getTruBudgetEnabled() { @@ -609,4 +612,11 @@ public String toString() { } + public Set getInitialTruBudgetIntents() { + return initialTruBudgetIntents; + } + + public void setInitialTruBudgetIntents(Set initialTruBudgetIntents) { + this.initialTruBudgetIntents = initialTruBudgetIntents; + } } diff --git a/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java b/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java index 300309b1056..b70745d2153 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java @@ -283,7 +283,7 @@ public static void runQuery() String insertIntoGlobalSettings="INSERT INTO amp_global_settings(id,settingsname,settingsvalue,possiblevalues,description,section,value_translatable,internal) \n" + " VALUES\n" + " (nextval('amp_global_settings_seq'),'isEnabled','true','t_Boolean','Is Trubudget enabled for this deployment','trubudget',NULL,true),\n" + - " (nextval('amp_global_settings_seq'),'baseUrl','http://localhost:8080/api/','','Trubudget base url','trubudget',NULL,true),\n" + + " (nextval('amp_global_settings_seq'),'baseUrl','https://api.tru.ampsite.net/','','Trubudget base url','trubudget',NULL,true),\n" + " (nextval('amp_global_settings_seq'),'rootUser','root','','Trubudget username for root user','trubudget',NULL,true),\n" + " (nextval('amp_global_settings_seq'),'rootPassword','root-secret','','Trubudget password for root user','trubudget',NULL,true),\n" + " (nextval('amp_global_settings_seq'),'apiVersion','1.0','','Trubudget api version','trubudget',NULL,true),\n" + diff --git a/amp/WEB-INF/src/org/digijava/module/um/action/RegisterUser.java b/amp/WEB-INF/src/org/digijava/module/um/action/RegisterUser.java index 81e8533bc7c..6d81912f9c4 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/action/RegisterUser.java +++ b/amp/WEB-INF/src/org/digijava/module/um/action/RegisterUser.java @@ -73,6 +73,7 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, logger.info("Intents: "+ truBudgetIntents); // user.getTruBudgetIntents().addAll(new HashSet<>(truBudgetIntents)); + user.setInitialTruBudgetIntents(new HashSet<>(user.getTruBudgetIntents())); user.setTruBudgetIntents(new HashSet<>(truBudgetIntents)); // set client IP address diff --git a/amp/WEB-INF/src/org/digijava/module/um/action/ViewEditUser.java b/amp/WEB-INF/src/org/digijava/module/um/action/ViewEditUser.java index 0c23fb4240e..4745d76b455 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/action/ViewEditUser.java +++ b/amp/WEB-INF/src/org/digijava/module/um/action/ViewEditUser.java @@ -317,6 +317,7 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServlet // TODO: 8/28/23 add for trubudget request // user.getTruBudgetIntents().addAll(new HashSet<>(truBudgetIntents)); + user.setInitialTruBudgetIntents(new HashSet<>(user.getTruBudgetIntents())); user.setTruBudgetIntents(new HashSet<>(truBudgetIntents)); user.setCountry(org.digijava.module.aim.util.DbUtil.getDgCountry(uForm.getSelectedCountryIso())); diff --git a/amp/WEB-INF/src/org/digijava/module/um/model/TruRevokePermissionRequest.java b/amp/WEB-INF/src/org/digijava/module/um/model/TruRevokePermissionRequest.java new file mode 100644 index 00000000000..37c3235dafc --- /dev/null +++ b/amp/WEB-INF/src/org/digijava/module/um/model/TruRevokePermissionRequest.java @@ -0,0 +1,68 @@ +package org.digijava.module.um.model; + +import com.fasterxml.jackson.annotation.JsonProperty; + +public class TruRevokePermissionRequest { + @JsonProperty("apiVersion") + private String apiVersion; + + @JsonProperty("data") + private TruRevokePermissionRequest.Data data; + + // Getters and setters + + public String getApiVersion() { + return apiVersion; + } + + public void setApiVersion(String apiVersion) { + this.apiVersion = apiVersion; + } + + + + public TruRevokePermissionRequest.Data getData() { + return data; + } + + public void setData(TruRevokePermissionRequest.Data data) { + this.data = data; + } + + public static class Data { + @JsonProperty("identity") + private String identity; + + @JsonProperty("intent") + private String intent; + + @JsonProperty("userId") + private String userId; + + // Getters and setters + + public String getIdentity() { + return identity; + } + + public void setIdentity(String identity) { + this.identity = identity; + } + + public String getIntent() { + return intent; + } + + public void setIntent(String intent) { + this.intent = intent; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + } +} diff --git a/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java b/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java index 5ee14d81905..8a341c8f74d 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java @@ -34,10 +34,7 @@ import org.digijava.module.um.dbentity.ResetPassword; import org.digijava.module.um.dbentity.SuspendLogin; import org.digijava.module.um.exception.UMException; -import org.digijava.module.um.model.TruGrantPermissionRequest; -import org.digijava.module.um.model.TruLoginRequest; -import org.digijava.module.um.model.TruLoginResponse; -import org.digijava.module.um.model.TruUserData; +import org.digijava.module.um.model.*; import org.hibernate.HibernateException; import org.hibernate.ObjectNotFoundException; import org.hibernate.Session; @@ -409,10 +406,8 @@ public static void updateUser(User user) throws session.flush(); try { TruUserData userData = new TruUserData(); - userData.setApiVersion("1.0"); TruUserData.Data data = new TruUserData.Data(); TruUserData.User user1 = new TruUserData.User(); - user1.setOrganization("KfW"); user1.setDisplayName(user.getFirstNames()+" "+user.getLastName()); // TODO: 8/28/23 if you are editing a user for the first time with Trubudget integrated. their password will be the email // TODO: 8/28/23 this can be changed later in Trubudget @@ -452,7 +447,7 @@ public static void updateUser(User user) throws // TODO: 9/1/23 rollback if trubudget registration not successful public static Mono loginToTruBudget(TruLoginRequest truLoginRequest, List settings) throws URISyntaxException { - return GenericWebClient.postForSingleObjResponse(getSettingValue(settings,"baseUrl")+"user.authenticate",truLoginRequest, TruLoginRequest.class,TruLoginResponse.class); + return GenericWebClient.postForSingleObjResponse(getSettingValue(settings,"baseUrl")+"/api/user.authenticate",truLoginRequest, TruLoginRequest.class,TruLoginResponse.class); } public static List getGlobalSettingsBySection(String sectionName) @@ -490,10 +485,8 @@ public static void registerUser(User user) throws UMException { try { TruUserData userData = new TruUserData(); - userData.setApiVersion("1.0"); TruUserData.Data data = new TruUserData.Data(); TruUserData.User user1 = new TruUserData.User(); - user1.setOrganization("KfW"); user1.setDisplayName(user.getFirstNames()+" "+user.getLastName()); user1.setPassword(user.getEmail()); user1.setId(user.getEmail().split("@")[0]);// TODO: 8/28/23 use username in future @@ -568,6 +561,8 @@ public static boolean registerUserOnTrubudget(TruUserData userData, User user) t logger.info("Trubudget is not enabled for this site."); return false; } + userData.setApiVersion(getSettingValue(settings, "apiVersion")); + userData.getData().getUser().setOrganization(getSettingValue(settings, "organization")); logger.info("Registering user on Trubudget"); TruLoginRequest truLoginRequest = new TruLoginRequest(); truLoginRequest.setApiVersion(getSettingValue(settings, "apiVersion")); @@ -579,45 +574,66 @@ public static boolean registerUserOnTrubudget(TruUserData userData, User user) t data.setUser(user1); truLoginRequest.setData(data); Mono truResp = loginToTruBudget(truLoginRequest,settings); + logger.info("Trubudget for user: "+user.getTruBudgetEnabled()); truResp.subscribe(truLoginResponse -> { + TruUserData response = null; - if (user.getTruBudgetEnabled()) - { - logger.info("We already have a trubudget account for this user email/username."); - } - else { - try { - GenericWebClient.postForSingleObjResponse(getSettingValue(settings,"baseUrl")+"api/global.createUser", userData, TruUserData.class, TruUserData.class, truLoginResponse.getData().getUser().getToken()).subscribe(response->{ + try { + response =GenericWebClient.postForSingleObjResponse(getSettingValue(settings,"baseUrl")+"/api/global.createUser", userData, TruUserData.class, TruUserData.class, truLoginResponse.getData().getUser().getToken()).block(); logger.info("Create user response: " + response); + }catch (Exception e) + { + logger.info("Error occurred during registration to trubudget ",e); + } + + List toBeRevoked = new ArrayList<>(); + for (TruBudgetIntent truBudgetIntent : user.getInitialTruBudgetIntents()) + { + if (!user.getTruBudgetIntents().contains(truBudgetIntent)) + { + toBeRevoked.add(truBudgetIntent); + } + } if (!user.getTruBudgetIntents().isEmpty()) { + TruUserData finalResponse = response; Flux.range(0, user.getTruBudgetIntents().size()) .flatMap(index -> { TruGrantPermissionRequest permData = new TruGrantPermissionRequest(); TruGrantPermissionRequest.Data data1 = new TruGrantPermissionRequest.Data(); - data1.setIdentity(response !=null? response.getData().getUser().getId():user.getEmail().split("@")[0]); + data1.setIdentity(finalResponse !=null? finalResponse.getData().getUser().getId():user.getEmail().split("@")[0]); data1.setIntent(new ArrayList<>(user.getTruBudgetIntents()).get(index).getTruBudgetIntentName()); permData.setData(data1); permData.setApiVersion(getSettingValue(settings,"apiVersion")); try { - return GenericWebClient.postForSingleObjResponse(getSettingValue(settings,"baseUrl")+"api/global.grantPermission", permData, TruGrantPermissionRequest.class, String.class, truLoginResponse.getData().getUser().getToken()); + return GenericWebClient.postForSingleObjResponse(getSettingValue(settings,"baseUrl")+"/api/global.grantPermission", permData, TruGrantPermissionRequest.class, String.class, truLoginResponse.getData().getUser().getToken()); } catch (URISyntaxException e) { return Flux.error(new RuntimeException(e)); } }).subscribeOn(Schedulers.parallel()).subscribe(permissionResponse->logger.info("Permission response:ss " + permissionResponse)); } - }); - - }catch (Exception e) - { - logger.info("Error occurred here: "+e.getMessage(),e); - } + // TODO: 9/6/23 complete the revoke process.. need to checkout all available permissions - } + if (!toBeRevoked.isEmpty()) { + TruUserData finalResponse1 = response; + Flux.range(0, toBeRevoked.size()) + .flatMap(index -> { + TruRevokePermissionRequest permData = new TruRevokePermissionRequest(); + TruRevokePermissionRequest.Data data1 = new TruRevokePermissionRequest.Data(); + data1.setIdentity(finalResponse1 !=null? finalResponse1.getData().getUser().getId():user.getEmail().split("@")[0]); + data1.setUserId(finalResponse1 !=null? finalResponse1.getData().getUser().getId():user.getEmail().split("@")[0]); + data1.setIntent(new ArrayList<>(toBeRevoked).get(index).getTruBudgetIntentName()); + permData.setData(data1); + permData.setApiVersion(getSettingValue(settings,"apiVersion")); + try { + return GenericWebClient.postForSingleObjResponse(getSettingValue(settings,"baseUrl")+"/api/user.intent.revokePermission", permData, TruRevokePermissionRequest.class, String.class, truLoginResponse.getData().getUser().getToken()); + } catch (URISyntaxException e) { + return Flux.error(new RuntimeException(e)); + } + }).subscribeOn(Schedulers.parallel()).subscribe(permissionResponse->logger.info("Permission response:ss " + permissionResponse)); + } - },throwable -> { - throw new RuntimeException(throwable.getMessage()); }); return true; @@ -626,7 +642,7 @@ public static List getTruBudgetIntents() { Session session = PersistenceManager.getRequestDBSession(); try { - return session.createNativeQuery(" SELECT t. * FROM trubudget_intent t ORDER BY trubudget_intent_name", TruBudgetIntent.class).list(); + return session.createNativeQuery(" SELECT t. * FROM amp_trubudget_intent t ORDER BY trubudget_intent_name", TruBudgetIntent.class).list(); }catch (Exception e) { @@ -648,7 +664,7 @@ public static List getTruBudgetIntentsByName(String [] names) c += ")"; logger.info("Intent query: " + c); - return session.createNativeQuery(" SELECT t. * FROM trubudget_intent t WHERE trubudget_intent_name in " + c, TruBudgetIntent.class).list(); + return session.createNativeQuery(" SELECT t. * FROM amp_trubudget_intent t WHERE trubudget_intent_name in " + c, TruBudgetIntent.class).list(); } return Collections.emptyList(); diff --git a/amp/WEB-INF/src/org/digijava/module/um/util/GenericWebClient.java b/amp/WEB-INF/src/org/digijava/module/um/util/GenericWebClient.java index 3e02ed38f29..23d8d14556c 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/util/GenericWebClient.java +++ b/amp/WEB-INF/src/org/digijava/module/um/util/GenericWebClient.java @@ -63,7 +63,7 @@ public static Mono postForSingleObjResponse(String url, T request, Clas response.bodyToMono(String.class) .flatMap(body -> Mono.error(new RuntimeException("Bad Request Error. Response: " + body)))) .bodyToMono(responseClass) - .onErrorResume(Mono::error) + .doOnError(Throwable::printStackTrace) .retryWhen(Retry.backoff(1, Duration.of(2, ChronoUnit.SECONDS)) .onRetryExhaustedThrow(((retryBackoffSpec, retrySignal) -> new RuntimeException(retrySignal.failure())))); From 72f7486dc421c6e92b23d5cae8cbcbd152fcbf85 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Thu, 7 Sep 2023 09:35:07 +0300 Subject: [PATCH 047/307] AMP-30712 Try revoke removed permissions --- .../src/org/digijava/module/aim/startup/AMPStartupListener.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java b/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java index b70745d2153..3818106caeb 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java @@ -211,7 +211,7 @@ public void testWebClient() // Use the WebClient to make HTTP requests webClient.get() - .uri("https://api.example.com/data") + .uri("https://ui.tru.ampsite.net/") .retrieve() .bodyToMono(String.class) .subscribe(response -> System.out.println("Response: " + response)); From aedb81950dca9a5cc84a0dbb42a936530b32e6ba Mon Sep 17 00:00:00 2001 From: brianbrix Date: Fri, 8 Sep 2023 11:27:22 +0300 Subject: [PATCH 048/307] AMP-30712 Try revoke removed permissions Optimize imports --- .../CachedMachineTranslationService.java | 1 - .../amp/ar/dbentity/AmpFilterData.java | 1 + .../amp/ar/view/pdf/ColumnReportDataPDF.java | 1 - .../amp/ar/view/pdf/GroupReportDataPDF.java | 2 -- .../amp/ar/view/pdf/ReportPdfExportState.java | 1 - .../pdf/GPIReportIndicator1Output1PdfExporter.java | 1 - .../pdf/GPIReportIndicator1Output2PdfExporter.java | 1 - .../pdf/GPIReportIndicator5aPdfExporter.java | 1 - .../pdf/GPIReportIndicator5bPdfExporter.java | 1 - .../pdf/GPIReportIndicator9bPdfExporter.java | 1 - .../reports/export/pdf/GPIReportPdfExporter.java | 1 - .../amp/nireports/amp/AmpReportsSchema.java | 14 ++++++++++++-- .../amp/onepager/util/ActivityUtil.java | 7 ++++--- .../amp/visibility/AmpTreeVisibility.java | 5 ++++- .../activity/field/AmpFieldInfoProvider.java | 4 ---- .../filters/LocationFilterListManager.java | 4 +--- .../ampapi/filters/HibernateEntityResolver.java | 1 - .../digijava/kernel/entity/TruBudgetIntent.java | 2 +- .../kernel/translator/CachedTranslatorWorker.java | 1 - .../digijava/kernel/user/SqlStartupListener.java | 3 +-- .../src/org/digijava/kernel/util/SiteUtils.java | 1 - .../org/digijava/kernel/util/SpecificUtils.java | 1 - .../module/admin/action/ShowPickupSite.java | 6 +----- .../module/aim/action/AddComponentIndicator.java | 1 - .../module/aim/action/AddNewIndicator.java | 1 - .../module/aim/action/AddThemeIndicator.java | 4 +++- .../module/aim/action/ExportActivityToPDF.java | 5 ----- .../digijava/module/aim/action/ExportNGOToPdf.java | 1 - .../module/aim/action/ParisIndicatorManager.java | 1 - .../module/aim/action/SearchAmpIndicators.java | 1 - .../module/aim/auth/AmpPostLoginAction.java | 1 - .../module/aim/dbentity/NamedEnumType.java | 14 +++++++------- .../module/aim/startup/AMPStartupListener.java | 1 - .../helper/ContactsComponentHelper.java | 1 - .../src/org/digijava/module/aim/util/DbUtil.java | 4 ---- .../org/digijava/module/aim/util/GPISetupUtil.java | 1 - .../org/digijava/module/aim/util/LocationUtil.java | 1 - .../org/digijava/module/aim/util/ParisUtil.java | 1 - .../module/autopatcher/core/PatcherUtil.java | 1 - .../calendar/action/ConfirmCalendarItems.java | 1 - .../action/DocumentFromTemplateActions.java | 3 +-- .../org/digijava/module/editor/util/DbUtil.java | 1 - .../module/message/util/AmpMessageUtil.java | 1 - .../src/org/digijava/module/sdm/dbentity/Sdm.java | 1 - .../digijava/module/um/action/RegisterUser.java | 1 - .../digijava/module/um/model/TruLoginResponse.java | 1 + 46 files changed, 37 insertions(+), 72 deletions(-) diff --git a/amp/WEB-INF/src/org/dgfoundation/amp/aitranslation/CachedMachineTranslationService.java b/amp/WEB-INF/src/org/dgfoundation/amp/aitranslation/CachedMachineTranslationService.java index 5b47d787f2e..6e4ad6c2ef3 100644 --- a/amp/WEB-INF/src/org/dgfoundation/amp/aitranslation/CachedMachineTranslationService.java +++ b/amp/WEB-INF/src/org/dgfoundation/amp/aitranslation/CachedMachineTranslationService.java @@ -3,7 +3,6 @@ import com.google.common.collect.ImmutableMap; import org.apache.commons.lang3.mutable.MutableInt; import org.apache.commons.lang3.tuple.Pair; -import org.digijava.kernel.entity.geocoding.GeoCodingProcess; import org.digijava.kernel.persistence.PersistenceManager; import org.digijava.module.aim.dbentity.MachineTranslation; import org.digijava.module.aim.dbentity.MachineTranslationCharactersUsed; diff --git a/amp/WEB-INF/src/org/dgfoundation/amp/ar/dbentity/AmpFilterData.java b/amp/WEB-INF/src/org/dgfoundation/amp/ar/dbentity/AmpFilterData.java index 7235e031eef..796291c4f5d 100644 --- a/amp/WEB-INF/src/org/dgfoundation/amp/ar/dbentity/AmpFilterData.java +++ b/amp/WEB-INF/src/org/dgfoundation/amp/ar/dbentity/AmpFilterData.java @@ -8,6 +8,7 @@ import org.hibernate.Session; import org.hibernate.query.Query; import org.hibernate.type.LongType; + import java.beans.PropertyDescriptor; import java.io.Serializable; import java.lang.reflect.Constructor; diff --git a/amp/WEB-INF/src/org/dgfoundation/amp/ar/view/pdf/ColumnReportDataPDF.java b/amp/WEB-INF/src/org/dgfoundation/amp/ar/view/pdf/ColumnReportDataPDF.java index a82496774bb..dc64ee32520 100644 --- a/amp/WEB-INF/src/org/dgfoundation/amp/ar/view/pdf/ColumnReportDataPDF.java +++ b/amp/WEB-INF/src/org/dgfoundation/amp/ar/view/pdf/ColumnReportDataPDF.java @@ -17,7 +17,6 @@ import org.digijava.kernel.translator.TranslatorWorker; import org.digijava.module.aim.action.ExportActivityToPDF; - import java.util.ArrayList; import java.util.List; diff --git a/amp/WEB-INF/src/org/dgfoundation/amp/ar/view/pdf/GroupReportDataPDF.java b/amp/WEB-INF/src/org/dgfoundation/amp/ar/view/pdf/GroupReportDataPDF.java index f4312b29f5f..e6ba08bb02c 100644 --- a/amp/WEB-INF/src/org/dgfoundation/amp/ar/view/pdf/GroupReportDataPDF.java +++ b/amp/WEB-INF/src/org/dgfoundation/amp/ar/view/pdf/GroupReportDataPDF.java @@ -17,8 +17,6 @@ import org.dgfoundation.amp.ar.Viewable; import org.digijava.module.aim.action.ExportActivityToPDF; -import java.util.Iterator; - /** * * @author Mihai Postelnicu - mpostelnicu@dgfoundation.org diff --git a/amp/WEB-INF/src/org/dgfoundation/amp/ar/view/pdf/ReportPdfExportState.java b/amp/WEB-INF/src/org/dgfoundation/amp/ar/view/pdf/ReportPdfExportState.java index 659809c20b5..0f3e6d0465e 100644 --- a/amp/WEB-INF/src/org/dgfoundation/amp/ar/view/pdf/ReportPdfExportState.java +++ b/amp/WEB-INF/src/org/dgfoundation/amp/ar/view/pdf/ReportPdfExportState.java @@ -4,7 +4,6 @@ import com.itextpdf.text.BaseColor; import com.itextpdf.text.pdf.PdfPCell; -import java.awt.*; import java.util.ArrayList; /** diff --git a/amp/WEB-INF/src/org/dgfoundation/amp/gpi/reports/export/pdf/GPIReportIndicator1Output1PdfExporter.java b/amp/WEB-INF/src/org/dgfoundation/amp/gpi/reports/export/pdf/GPIReportIndicator1Output1PdfExporter.java index e8819e1b75e..2449c209667 100644 --- a/amp/WEB-INF/src/org/dgfoundation/amp/gpi/reports/export/pdf/GPIReportIndicator1Output1PdfExporter.java +++ b/amp/WEB-INF/src/org/dgfoundation/amp/gpi/reports/export/pdf/GPIReportIndicator1Output1PdfExporter.java @@ -2,7 +2,6 @@ import com.itextpdf.text.*; -import com.itextpdf.text.pdf.BaseFont; import com.itextpdf.text.pdf.PdfPCell; import com.itextpdf.text.pdf.PdfPTable; import com.itextpdf.text.pdf.PdfWriter; diff --git a/amp/WEB-INF/src/org/dgfoundation/amp/gpi/reports/export/pdf/GPIReportIndicator1Output2PdfExporter.java b/amp/WEB-INF/src/org/dgfoundation/amp/gpi/reports/export/pdf/GPIReportIndicator1Output2PdfExporter.java index 7f96cce3c34..82362bc29b5 100644 --- a/amp/WEB-INF/src/org/dgfoundation/amp/gpi/reports/export/pdf/GPIReportIndicator1Output2PdfExporter.java +++ b/amp/WEB-INF/src/org/dgfoundation/amp/gpi/reports/export/pdf/GPIReportIndicator1Output2PdfExporter.java @@ -4,7 +4,6 @@ import com.itextpdf.text.Element; import com.itextpdf.text.Font; import com.itextpdf.text.Paragraph; -import com.itextpdf.text.pdf.BaseFont; import com.itextpdf.text.pdf.PdfPTable; import org.dgfoundation.amp.gpi.reports.GPIReport; import org.dgfoundation.amp.gpi.reports.GPIReportConstants; diff --git a/amp/WEB-INF/src/org/dgfoundation/amp/gpi/reports/export/pdf/GPIReportIndicator5aPdfExporter.java b/amp/WEB-INF/src/org/dgfoundation/amp/gpi/reports/export/pdf/GPIReportIndicator5aPdfExporter.java index 1e359e15ccc..dd62948d491 100644 --- a/amp/WEB-INF/src/org/dgfoundation/amp/gpi/reports/export/pdf/GPIReportIndicator5aPdfExporter.java +++ b/amp/WEB-INF/src/org/dgfoundation/amp/gpi/reports/export/pdf/GPIReportIndicator5aPdfExporter.java @@ -2,7 +2,6 @@ import com.itextpdf.text.*; -import com.itextpdf.text.pdf.BaseFont; import com.itextpdf.text.pdf.PdfPCell; import com.itextpdf.text.pdf.PdfPTable; import org.dgfoundation.amp.ar.ColumnConstants; diff --git a/amp/WEB-INF/src/org/dgfoundation/amp/gpi/reports/export/pdf/GPIReportIndicator5bPdfExporter.java b/amp/WEB-INF/src/org/dgfoundation/amp/gpi/reports/export/pdf/GPIReportIndicator5bPdfExporter.java index 24c9763790b..4ca62fe3629 100644 --- a/amp/WEB-INF/src/org/dgfoundation/amp/gpi/reports/export/pdf/GPIReportIndicator5bPdfExporter.java +++ b/amp/WEB-INF/src/org/dgfoundation/amp/gpi/reports/export/pdf/GPIReportIndicator5bPdfExporter.java @@ -2,7 +2,6 @@ import com.itextpdf.text.*; -import com.itextpdf.text.pdf.BaseFont; import com.itextpdf.text.pdf.PdfPCell; import com.itextpdf.text.pdf.PdfPTable; import org.dgfoundation.amp.ar.ColumnConstants; diff --git a/amp/WEB-INF/src/org/dgfoundation/amp/gpi/reports/export/pdf/GPIReportIndicator9bPdfExporter.java b/amp/WEB-INF/src/org/dgfoundation/amp/gpi/reports/export/pdf/GPIReportIndicator9bPdfExporter.java index f24bf0ac746..e0d5e9afd35 100644 --- a/amp/WEB-INF/src/org/dgfoundation/amp/gpi/reports/export/pdf/GPIReportIndicator9bPdfExporter.java +++ b/amp/WEB-INF/src/org/dgfoundation/amp/gpi/reports/export/pdf/GPIReportIndicator9bPdfExporter.java @@ -5,7 +5,6 @@ import com.itextpdf.text.Element; import com.itextpdf.text.Font; import com.itextpdf.text.Paragraph; -import com.itextpdf.text.pdf.BaseFont; import com.itextpdf.text.pdf.PdfPTable; import org.dgfoundation.amp.ar.MeasureConstants; import org.dgfoundation.amp.gpi.reports.GPIReport; diff --git a/amp/WEB-INF/src/org/dgfoundation/amp/gpi/reports/export/pdf/GPIReportPdfExporter.java b/amp/WEB-INF/src/org/dgfoundation/amp/gpi/reports/export/pdf/GPIReportPdfExporter.java index 50dcc1180a3..dfd2cad9aed 100644 --- a/amp/WEB-INF/src/org/dgfoundation/amp/gpi/reports/export/pdf/GPIReportPdfExporter.java +++ b/amp/WEB-INF/src/org/dgfoundation/amp/gpi/reports/export/pdf/GPIReportPdfExporter.java @@ -2,7 +2,6 @@ import com.itextpdf.text.*; -import com.itextpdf.text.pdf.BaseFont; import com.itextpdf.text.pdf.PdfPCell; import com.itextpdf.text.pdf.PdfPTable; import com.itextpdf.text.pdf.PdfWriter; diff --git a/amp/WEB-INF/src/org/dgfoundation/amp/nireports/amp/AmpReportsSchema.java b/amp/WEB-INF/src/org/dgfoundation/amp/nireports/amp/AmpReportsSchema.java index 61555b7ed59..d1da65ccd95 100644 --- a/amp/WEB-INF/src/org/dgfoundation/amp/nireports/amp/AmpReportsSchema.java +++ b/amp/WEB-INF/src/org/dgfoundation/amp/nireports/amp/AmpReportsSchema.java @@ -22,7 +22,6 @@ import org.dgfoundation.amp.nireports.runtime.CellColumn; import org.dgfoundation.amp.nireports.runtime.VSplitStrategy; import org.dgfoundation.amp.nireports.schema.*; -import org.dgfoundation.amp.nireports.schema.NiDimension.*; import org.dgfoundation.amp.visibility.data.MeasuresVisibility; import org.digijava.kernel.ampapi.endpoints.performance.PerformanceRuleManager; import org.digijava.kernel.persistence.PersistenceManager; @@ -45,11 +44,22 @@ import java.util.function.Function; import java.util.stream.Collectors; +import static org.dgfoundation.amp.nireports.amp.dimensions.LocationsDimension.LEVEL_0; +import static org.dgfoundation.amp.nireports.amp.dimensions.LocationsDimension.LEVEL_1; +import static org.dgfoundation.amp.nireports.amp.dimensions.LocationsDimension.LEVEL_2; +import static org.dgfoundation.amp.nireports.amp.dimensions.LocationsDimension.LEVEL_3; +import static org.dgfoundation.amp.nireports.amp.dimensions.LocationsDimension.LEVEL_4; +import static org.dgfoundation.amp.nireports.amp.dimensions.LocationsDimension.LEVEL_5; +import static org.dgfoundation.amp.nireports.amp.dimensions.LocationsDimension.LEVEL_6; +import static org.dgfoundation.amp.nireports.amp.dimensions.LocationsDimension.LEVEL_7; +import static org.dgfoundation.amp.nireports.amp.dimensions.LocationsDimension.LEVEL_8; +import static org.dgfoundation.amp.nireports.amp.dimensions.LocationsDimension.LEVEL_ALL_IDS; +import static org.dgfoundation.amp.nireports.amp.dimensions.LocationsDimension.LevelColumn; +import static org.dgfoundation.amp.nireports.amp.dimensions.LocationsDimension.NiDimensionUsage; import static org.dgfoundation.amp.nireports.amp.dimensions.LocationsDimension.*; import static org.dgfoundation.amp.nireports.amp.dimensions.OrganisationsDimension.*; import static org.dgfoundation.amp.nireports.amp.dimensions.SectorsDimension.*; import static org.dgfoundation.amp.nireports.formulas.NiFormula.*; -import static org.dgfoundation.amp.nireports.schema.NiDimension.*; /** * the big, glorious, immaculate, AMP NiReports schema. diff --git a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/util/ActivityUtil.java b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/util/ActivityUtil.java index ae830de56d6..1ac9c25715f 100644 --- a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/util/ActivityUtil.java +++ b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/util/ActivityUtil.java @@ -39,11 +39,12 @@ import org.digijava.module.editor.util.DbUtil; import org.digijava.module.message.triggers.ActivityValidationWorkflowTrigger; import org.digijava.module.translation.util.ContentTranslationUtil; -import org.hibernate.*; +import org.hibernate.Hibernate; +import org.hibernate.LockMode; +import org.hibernate.LockOptions; +import org.hibernate.Session; import org.hibernate.query.Query; -import org.hibernate.type.IntegerType; import org.hibernate.type.LongType; -import org.hibernate.type.ObjectType; import javax.jcr.Node; import javax.jcr.RepositoryException; diff --git a/amp/WEB-INF/src/org/dgfoundation/amp/visibility/AmpTreeVisibility.java b/amp/WEB-INF/src/org/dgfoundation/amp/visibility/AmpTreeVisibility.java index 02905fde2ec..3cfb3f0f082 100644 --- a/amp/WEB-INF/src/org/dgfoundation/amp/visibility/AmpTreeVisibility.java +++ b/amp/WEB-INF/src/org/dgfoundation/amp/visibility/AmpTreeVisibility.java @@ -11,7 +11,10 @@ import org.digijava.module.aim.dbentity.AmpTemplatesVisibility; import java.io.Serializable; -import java.util.*; +import java.util.Collection; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.TreeMap; import java.util.concurrent.ConcurrentHashMap; /** diff --git a/amp/WEB-INF/src/org/digijava/kernel/ampapi/endpoints/activity/field/AmpFieldInfoProvider.java b/amp/WEB-INF/src/org/digijava/kernel/ampapi/endpoints/activity/field/AmpFieldInfoProvider.java index 1a5e5b4c0a9..1a9d9ce422f 100644 --- a/amp/WEB-INF/src/org/digijava/kernel/ampapi/endpoints/activity/field/AmpFieldInfoProvider.java +++ b/amp/WEB-INF/src/org/digijava/kernel/ampapi/endpoints/activity/field/AmpFieldInfoProvider.java @@ -11,17 +11,13 @@ import org.digijava.module.aim.dbentity.AmpActivityFields; import org.digijava.module.aim.dbentity.AmpActivityVersion; import org.digijava.module.contentrepository.helper.ObjectReferringDocument; -import org.hibernate.jdbc.Work; import org.hibernate.persister.entity.AbstractEntityPersister; -import org.hibernate.persister.entity.EntityPersister; import org.jetbrains.annotations.NotNull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.lang.reflect.Field; -import java.sql.Connection; import java.sql.ResultSet; -import java.sql.SQLException; import java.util.HashMap; import java.util.Map; diff --git a/amp/WEB-INF/src/org/digijava/kernel/ampapi/endpoints/filters/LocationFilterListManager.java b/amp/WEB-INF/src/org/digijava/kernel/ampapi/endpoints/filters/LocationFilterListManager.java index efb29c536a8..f766c5ff2ed 100644 --- a/amp/WEB-INF/src/org/digijava/kernel/ampapi/endpoints/filters/LocationFilterListManager.java +++ b/amp/WEB-INF/src/org/digijava/kernel/ampapi/endpoints/filters/LocationFilterListManager.java @@ -2,17 +2,15 @@ import com.google.common.collect.ImmutableMap; import org.digijava.kernel.ampapi.endpoints.common.EndpointUtils; -import org.digijava.module.aim.util.LocationUtil; import org.digijava.kernel.translator.TranslatorWorker; import org.digijava.module.aim.dbentity.AmpApplicationSettings; import org.digijava.module.aim.dbentity.AmpCategoryValueLocations; import org.digijava.module.aim.helper.GlobalSettingsConstants; import org.digijava.module.aim.util.FeaturesUtil; import org.digijava.module.aim.util.LocationSkeleton; +import org.digijava.module.aim.util.LocationUtil; import org.digijava.module.categorymanager.dbentity.AmpCategoryValue; import org.digijava.module.categorymanager.util.CategoryManagerUtil; -import org.hibernate.Session; -import org.hibernate.query.Query; import java.util.*; import java.util.stream.Collectors; diff --git a/amp/WEB-INF/src/org/digijava/kernel/ampapi/filters/HibernateEntityResolver.java b/amp/WEB-INF/src/org/digijava/kernel/ampapi/filters/HibernateEntityResolver.java index 062842b0d54..3bc2e2beb5d 100644 --- a/amp/WEB-INF/src/org/digijava/kernel/ampapi/filters/HibernateEntityResolver.java +++ b/amp/WEB-INF/src/org/digijava/kernel/ampapi/filters/HibernateEntityResolver.java @@ -5,7 +5,6 @@ import org.digijava.module.aim.dbentity.AmpCurrency; import org.hibernate.Session; import org.hibernate.SessionFactory; -import org.hibernate.criterion.Property; import org.hibernate.metamodel.spi.MetamodelImplementor; import org.hibernate.persister.entity.EntityPersister; import org.hibernate.query.Query; diff --git a/amp/WEB-INF/src/org/digijava/kernel/entity/TruBudgetIntent.java b/amp/WEB-INF/src/org/digijava/kernel/entity/TruBudgetIntent.java index 233f959e233..77b403e2f7a 100644 --- a/amp/WEB-INF/src/org/digijava/kernel/entity/TruBudgetIntent.java +++ b/amp/WEB-INF/src/org/digijava/kernel/entity/TruBudgetIntent.java @@ -3,8 +3,8 @@ import org.digijava.kernel.user.User; import org.hibernate.annotations.DynamicUpdate; -import javax.persistence.*; import javax.persistence.Entity; +import javax.persistence.*; import java.io.Serializable; import java.util.Set; diff --git a/amp/WEB-INF/src/org/digijava/kernel/translator/CachedTranslatorWorker.java b/amp/WEB-INF/src/org/digijava/kernel/translator/CachedTranslatorWorker.java index 9b853f6065b..f79b7eb3ea2 100644 --- a/amp/WEB-INF/src/org/digijava/kernel/translator/CachedTranslatorWorker.java +++ b/amp/WEB-INF/src/org/digijava/kernel/translator/CachedTranslatorWorker.java @@ -42,7 +42,6 @@ import java.io.Serializable; import java.sql.Timestamp; import java.util.Collection; -import java.util.Iterator; import java.util.List; public class CachedTranslatorWorker extends TranslatorWorker { diff --git a/amp/WEB-INF/src/org/digijava/kernel/user/SqlStartupListener.java b/amp/WEB-INF/src/org/digijava/kernel/user/SqlStartupListener.java index 01c4103d3d0..96b6d6fd505 100644 --- a/amp/WEB-INF/src/org/digijava/kernel/user/SqlStartupListener.java +++ b/amp/WEB-INF/src/org/digijava/kernel/user/SqlStartupListener.java @@ -1,11 +1,10 @@ package org.digijava.kernel.user; + import org.digijava.kernel.persistence.PersistenceManager; import org.hibernate.Session; import org.hibernate.Transaction; -import org.hibernate.jdbc.Work; import org.springframework.context.ApplicationListener; import org.springframework.context.event.ContextRefreshedEvent; -import org.springframework.stereotype.Component; import java.sql.SQLException; import java.sql.Statement; diff --git a/amp/WEB-INF/src/org/digijava/kernel/util/SiteUtils.java b/amp/WEB-INF/src/org/digijava/kernel/util/SiteUtils.java index f2e8f78879d..09a537578c8 100644 --- a/amp/WEB-INF/src/org/digijava/kernel/util/SiteUtils.java +++ b/amp/WEB-INF/src/org/digijava/kernel/util/SiteUtils.java @@ -38,7 +38,6 @@ import org.digijava.kernel.services.siteidentity.SiteIdentityService; import org.digijava.kernel.user.Group; import org.hibernate.Session; -import org.hibernate.criterion.Restrictions; import org.hibernate.query.Query; import org.hibernate.type.LongType; import org.hibernate.type.StringType; diff --git a/amp/WEB-INF/src/org/digijava/kernel/util/SpecificUtils.java b/amp/WEB-INF/src/org/digijava/kernel/util/SpecificUtils.java index 774071ccd5c..f4450dd2d6a 100644 --- a/amp/WEB-INF/src/org/digijava/kernel/util/SpecificUtils.java +++ b/amp/WEB-INF/src/org/digijava/kernel/util/SpecificUtils.java @@ -38,7 +38,6 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.Enumeration; -import java.util.Iterator; /** * This class was created to concentrate ALL utillities, needed for diff --git a/amp/WEB-INF/src/org/digijava/module/admin/action/ShowPickupSite.java b/amp/WEB-INF/src/org/digijava/module/admin/action/ShowPickupSite.java index a92b371a7e3..f88b7514caf 100644 --- a/amp/WEB-INF/src/org/digijava/module/admin/action/ShowPickupSite.java +++ b/amp/WEB-INF/src/org/digijava/module/admin/action/ShowPickupSite.java @@ -30,11 +30,7 @@ import org.digijava.module.admin.helper.pickup.PickupItem; import org.digijava.module.admin.helper.pickup.SitePickupSource; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashSet; -import java.util.Iterator; -import java.util.LinkedHashSet; +import java.util.*; public class ShowPickupSite extends Action { diff --git a/amp/WEB-INF/src/org/digijava/module/aim/action/AddComponentIndicator.java b/amp/WEB-INF/src/org/digijava/module/aim/action/AddComponentIndicator.java index 145bf25f775..78607cbfd4e 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/action/AddComponentIndicator.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/action/AddComponentIndicator.java @@ -9,7 +9,6 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; -import java.util.Iterator; public class AddComponentIndicator extends Action { diff --git a/amp/WEB-INF/src/org/digijava/module/aim/action/AddNewIndicator.java b/amp/WEB-INF/src/org/digijava/module/aim/action/AddNewIndicator.java index 7390f1c3337..1081491195d 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/action/AddNewIndicator.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/action/AddNewIndicator.java @@ -15,7 +15,6 @@ import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashSet; -import java.util.Iterator; public class AddNewIndicator extends Action { diff --git a/amp/WEB-INF/src/org/digijava/module/aim/action/AddThemeIndicator.java b/amp/WEB-INF/src/org/digijava/module/aim/action/AddThemeIndicator.java index bc20030e1c9..ceed58ed37f 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/action/AddThemeIndicator.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/action/AddThemeIndicator.java @@ -21,7 +21,9 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; -import java.util.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; public class AddThemeIndicator extends Action { diff --git a/amp/WEB-INF/src/org/digijava/module/aim/action/ExportActivityToPDF.java b/amp/WEB-INF/src/org/digijava/module/aim/action/ExportActivityToPDF.java index 402a32abe9a..a084721004d 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/action/ExportActivityToPDF.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/action/ExportActivityToPDF.java @@ -1,11 +1,7 @@ package org.digijava.module.aim.action; import com.google.common.base.Strings; -import com.itextpdf.text.Font; import com.itextpdf.text.*; -import com.itextpdf.text.Image; -import com.itextpdf.text.List; -import com.itextpdf.text.Rectangle; import com.itextpdf.text.pdf.*; import org.apache.commons.io.IOUtils; import org.apache.log4j.Logger; @@ -51,7 +47,6 @@ import java.text.DecimalFormat; import java.util.*; - import static org.digijava.module.aim.helper.Constants.CURRENT_MEMBER; /** diff --git a/amp/WEB-INF/src/org/digijava/module/aim/action/ExportNGOToPdf.java b/amp/WEB-INF/src/org/digijava/module/aim/action/ExportNGOToPdf.java index 9af4e4c0659..e473b52c6ea 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/action/ExportNGOToPdf.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/action/ExportNGOToPdf.java @@ -2,7 +2,6 @@ import com.itextpdf.text.*; -import com.itextpdf.text.pdf.BaseFont; import com.itextpdf.text.pdf.PdfPCell; import com.itextpdf.text.pdf.PdfPTable; import com.itextpdf.text.pdf.PdfWriter; diff --git a/amp/WEB-INF/src/org/digijava/module/aim/action/ParisIndicatorManager.java b/amp/WEB-INF/src/org/digijava/module/aim/action/ParisIndicatorManager.java index e29e563b031..8831058b626 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/action/ParisIndicatorManager.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/action/ParisIndicatorManager.java @@ -13,7 +13,6 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.Collection; -import java.util.Iterator; /** * created on 01/05/06 diff --git a/amp/WEB-INF/src/org/digijava/module/aim/action/SearchAmpIndicators.java b/amp/WEB-INF/src/org/digijava/module/aim/action/SearchAmpIndicators.java index 7f415468a77..6950791c489 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/action/SearchAmpIndicators.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/action/SearchAmpIndicators.java @@ -13,7 +13,6 @@ import java.util.ArrayList; import java.util.Collection; -import java.util.Iterator; import java.util.List; diff --git a/amp/WEB-INF/src/org/digijava/module/aim/auth/AmpPostLoginAction.java b/amp/WEB-INF/src/org/digijava/module/aim/auth/AmpPostLoginAction.java index 3f7621b8cbd..1c246328146 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/auth/AmpPostLoginAction.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/auth/AmpPostLoginAction.java @@ -13,7 +13,6 @@ import org.digijava.kernel.user.User; import org.digijava.kernel.util.UserUtils; import org.digijava.module.aim.dbentity.AmpGlobalSettings; -import org.digijava.module.aim.form.LoginForm; import org.digijava.module.um.model.TruLoginRequest; import org.digijava.module.um.model.TruLoginResponse; import org.slf4j.Logger; diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/NamedEnumType.java b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/NamedEnumType.java index fe28ed29706..0ab2cdb6e56 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/NamedEnumType.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/NamedEnumType.java @@ -1,12 +1,5 @@ package org.digijava.module.aim.dbentity; -import java.lang.reflect.Method; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Types; -import java.util.Properties; - import com.google.common.collect.BiMap; import com.google.common.collect.HashBiMap; import org.hibernate.HibernateException; @@ -19,6 +12,13 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.lang.reflect.Method; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Types; +import java.util.Properties; + /** * @author Octavian Ciubotaru */ diff --git a/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java b/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java index 3818106caeb..267f200984b 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java @@ -45,7 +45,6 @@ import javax.servlet.ServletContextListener; import javax.servlet.http.HttpServlet; import java.lang.management.ManagementFactory; -import java.sql.SQLException; import java.sql.Statement; import java.util.Collection; import java.util.Hashtable; diff --git a/amp/WEB-INF/src/org/digijava/module/aim/uicomponents/helper/ContactsComponentHelper.java b/amp/WEB-INF/src/org/digijava/module/aim/uicomponents/helper/ContactsComponentHelper.java index 6df1f0a7e00..7fbc75d7c3a 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/uicomponents/helper/ContactsComponentHelper.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/uicomponents/helper/ContactsComponentHelper.java @@ -7,7 +7,6 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Comparator; -import java.util.Iterator; public class ContactsComponentHelper { diff --git a/amp/WEB-INF/src/org/digijava/module/aim/util/DbUtil.java b/amp/WEB-INF/src/org/digijava/module/aim/util/DbUtil.java index be3c8a6e0ed..926699213aa 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/util/DbUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/util/DbUtil.java @@ -8,12 +8,10 @@ import org.dgfoundation.amp.ar.viewfetcher.SQLUtils; import org.digijava.kernel.dbentity.Country; import org.digijava.kernel.entity.Message; -import org.digijava.kernel.entity.geocoding.GeoCodingProcess; import org.digijava.kernel.exception.DgException; import org.digijava.kernel.persistence.PersistenceManager; import org.digijava.kernel.request.Site; import org.digijava.kernel.user.Group; -import org.digijava.kernel.entity.TruBudgetIntent; import org.digijava.kernel.user.User; import org.digijava.kernel.util.RequestUtils; import org.digijava.module.aim.dbentity.AmpComponent; @@ -25,8 +23,6 @@ import org.hibernate.Hibernate; import org.hibernate.JDBCException; import org.hibernate.Session; -import org.hibernate.criterion.Projections; -import org.hibernate.criterion.Restrictions; import org.hibernate.jdbc.Work; import org.hibernate.query.Query; import org.hibernate.type.*; diff --git a/amp/WEB-INF/src/org/digijava/module/aim/util/GPISetupUtil.java b/amp/WEB-INF/src/org/digijava/module/aim/util/GPISetupUtil.java index 15f941b5805..961cbcadb5d 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/util/GPISetupUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/util/GPISetupUtil.java @@ -9,7 +9,6 @@ import java.util.ArrayList; import java.util.Collection; -import java.util.Iterator; import java.util.List; public class GPISetupUtil { diff --git a/amp/WEB-INF/src/org/digijava/module/aim/util/LocationUtil.java b/amp/WEB-INF/src/org/digijava/module/aim/util/LocationUtil.java index a14dced91dd..248e1e70247 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/util/LocationUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/util/LocationUtil.java @@ -16,7 +16,6 @@ import org.hibernate.criterion.Projections; import org.hibernate.criterion.Restrictions; import org.hibernate.query.Query; -import org.hibernate.type.StringType; import java.text.Collator; import java.util.*; diff --git a/amp/WEB-INF/src/org/digijava/module/aim/util/ParisUtil.java b/amp/WEB-INF/src/org/digijava/module/aim/util/ParisUtil.java index 77c3780c2f8..9c927df45ea 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/util/ParisUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/util/ParisUtil.java @@ -10,7 +10,6 @@ import org.hibernate.type.LongType; import java.util.Collection; -import java.util.Iterator; /** diff --git a/amp/WEB-INF/src/org/digijava/module/autopatcher/core/PatcherUtil.java b/amp/WEB-INF/src/org/digijava/module/autopatcher/core/PatcherUtil.java index 27b6055bdc0..7490588fed3 100644 --- a/amp/WEB-INF/src/org/digijava/module/autopatcher/core/PatcherUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/autopatcher/core/PatcherUtil.java @@ -12,7 +12,6 @@ import javax.xml.bind.Unmarshaller; import java.io.BufferedInputStream; import java.io.File; -import java.io.FileInputStream; import java.io.IOException; import java.math.BigInteger; import java.nio.file.Files; diff --git a/amp/WEB-INF/src/org/digijava/module/calendar/action/ConfirmCalendarItems.java b/amp/WEB-INF/src/org/digijava/module/calendar/action/ConfirmCalendarItems.java index 6569a3aa571..ad7d9301382 100644 --- a/amp/WEB-INF/src/org/digijava/module/calendar/action/ConfirmCalendarItems.java +++ b/amp/WEB-INF/src/org/digijava/module/calendar/action/ConfirmCalendarItems.java @@ -38,7 +38,6 @@ import org.digijava.module.common.dbentity.ItemStatus; import java.util.ArrayList; -import java.util.Iterator; import java.util.List; /** diff --git a/amp/WEB-INF/src/org/digijava/module/contentrepository/action/DocumentFromTemplateActions.java b/amp/WEB-INF/src/org/digijava/module/contentrepository/action/DocumentFromTemplateActions.java index 873789becf4..a1f042589bc 100644 --- a/amp/WEB-INF/src/org/digijava/module/contentrepository/action/DocumentFromTemplateActions.java +++ b/amp/WEB-INF/src/org/digijava/module/contentrepository/action/DocumentFromTemplateActions.java @@ -3,7 +3,6 @@ import com.itextpdf.text.*; import com.itextpdf.text.pdf.PdfWriter; -import com.lowagie.text.rtf.RtfWriter2; import org.apache.poi.xwpf.usermodel.ParagraphAlignment; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFParagraph; @@ -36,8 +35,8 @@ import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.ByteArrayOutputStream; -import java.util.*; import java.util.List; +import java.util.*; /** * contians actions , that can be done while trying to create document using Templates diff --git a/amp/WEB-INF/src/org/digijava/module/editor/util/DbUtil.java b/amp/WEB-INF/src/org/digijava/module/editor/util/DbUtil.java index 97d230945ec..37c41380e5e 100644 --- a/amp/WEB-INF/src/org/digijava/module/editor/util/DbUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/editor/util/DbUtil.java @@ -43,7 +43,6 @@ import javax.servlet.http.HttpServletRequest; import java.util.ArrayList; import java.util.Collection; -import java.util.Iterator; import java.util.List; /** diff --git a/amp/WEB-INF/src/org/digijava/module/message/util/AmpMessageUtil.java b/amp/WEB-INF/src/org/digijava/module/message/util/AmpMessageUtil.java index 25ee7f11d89..4dc1cd00856 100644 --- a/amp/WEB-INF/src/org/digijava/module/message/util/AmpMessageUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/message/util/AmpMessageUtil.java @@ -22,7 +22,6 @@ import javax.servlet.http.HttpServletRequest; import java.text.SimpleDateFormat; import java.util.Date; -import java.util.Iterator; import java.util.List; public class AmpMessageUtil { diff --git a/amp/WEB-INF/src/org/digijava/module/sdm/dbentity/Sdm.java b/amp/WEB-INF/src/org/digijava/module/sdm/dbentity/Sdm.java index f5487bb1825..98f1d24016a 100644 --- a/amp/WEB-INF/src/org/digijava/module/sdm/dbentity/Sdm.java +++ b/amp/WEB-INF/src/org/digijava/module/sdm/dbentity/Sdm.java @@ -22,7 +22,6 @@ package org.digijava.module.sdm.dbentity; -import java.util.Iterator; import java.util.Set; /** diff --git a/amp/WEB-INF/src/org/digijava/module/um/action/RegisterUser.java b/amp/WEB-INF/src/org/digijava/module/um/action/RegisterUser.java index 6d81912f9c4..552a8c2c00c 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/action/RegisterUser.java +++ b/amp/WEB-INF/src/org/digijava/module/um/action/RegisterUser.java @@ -31,7 +31,6 @@ import org.digijava.module.um.util.DbUtil; import javax.servlet.http.HttpSession; -import java.util.Arrays; import java.util.HashSet; import java.util.List; diff --git a/amp/WEB-INF/src/org/digijava/module/um/model/TruLoginResponse.java b/amp/WEB-INF/src/org/digijava/module/um/model/TruLoginResponse.java index d4fa69bf262..63cc6448fa5 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/model/TruLoginResponse.java +++ b/amp/WEB-INF/src/org/digijava/module/um/model/TruLoginResponse.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; + import java.util.List; public class TruLoginResponse { From ec50f3733bb629291db15ecadba6a90585fc56a5 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Fri, 8 Sep 2023 11:28:51 +0300 Subject: [PATCH 049/307] AMP-30712 Try revoke removed permissions Optimize imports --- amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java b/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java index 8a341c8f74d..9e6eab168bd 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java @@ -610,7 +610,7 @@ public static boolean registerUserOnTrubudget(TruUserData userData, User user) t } catch (URISyntaxException e) { return Flux.error(new RuntimeException(e)); } - }).subscribeOn(Schedulers.parallel()).subscribe(permissionResponse->logger.info("Permission response:ss " + permissionResponse)); + }).subscribeOn(Schedulers.parallel()).subscribe(permissionResponse->logger.info("Grant permission response:ss " + permissionResponse)); } // TODO: 9/6/23 complete the revoke process.. need to checkout all available permissions @@ -630,7 +630,7 @@ public static boolean registerUserOnTrubudget(TruUserData userData, User user) t } catch (URISyntaxException e) { return Flux.error(new RuntimeException(e)); } - }).subscribeOn(Schedulers.parallel()).subscribe(permissionResponse->logger.info("Permission response:ss " + permissionResponse)); + }).subscribeOn(Schedulers.parallel()).subscribe(permissionResponse->logger.info("Revoke permission response:ss " + permissionResponse)); } From 7492246617e9f9f2100f3a8e4dc290a1d8964825 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Mon, 11 Sep 2023 12:39:29 +0300 Subject: [PATCH 050/307] AMP-30712 Trubudget models start --- .../aim/dbentity/AmpActivityFields.java | 2 +- .../trubudget/model/CreateProjectModel.java | 153 ++++++++++++++++++ .../model/CreateSubProjectModel.java | 130 +++++++++++++++ .../trubudget/model/EditProjectModel.java | 58 +++++++ .../trubudget/model/EditProjectedModel.java | 67 ++++++++ .../model/ProjectGrantPermModel.java | 58 +++++++ .../digijava/module/um/action/AddUser.java | 10 +- .../org/digijava/module/um/util/DbUtil.java | 4 +- 8 files changed, 474 insertions(+), 8 deletions(-) create mode 100644 amp/WEB-INF/src/org/digijava/module/trubudget/model/CreateProjectModel.java create mode 100644 amp/WEB-INF/src/org/digijava/module/trubudget/model/CreateSubProjectModel.java create mode 100644 amp/WEB-INF/src/org/digijava/module/trubudget/model/EditProjectModel.java create mode 100644 amp/WEB-INF/src/org/digijava/module/trubudget/model/EditProjectedModel.java create mode 100644 amp/WEB-INF/src/org/digijava/module/trubudget/model/ProjectGrantPermModel.java diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpActivityFields.java b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpActivityFields.java index f27acfb991e..c051bcbb112 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpActivityFields.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpActivityFields.java @@ -137,7 +137,7 @@ public abstract class AmpActivityFields extends Permissible implements Comparabl interValidators = @InterchangeableValidator(value = RequiredValidator.class, groups = Submit.class, fmPath = "/Activity Form/Identification/Required Validator for Description")) @VersionableFieldTextEditor(fieldTitle = "Description") - protected String description ; + protected String description; @Interchangeable(fieldTitle = "Project Comments", importable = true, fmPath = "/Activity Form/Identification/Project Comments") @VersionableFieldTextEditor(fieldTitle = "Project Comments") diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/model/CreateProjectModel.java b/amp/WEB-INF/src/org/digijava/module/trubudget/model/CreateProjectModel.java new file mode 100644 index 00000000000..2203bb8ebfa --- /dev/null +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/model/CreateProjectModel.java @@ -0,0 +1,153 @@ +package org.digijava.module.trubudget.model; + +import java.util.List; +import java.util.Map; + +public class CreateProjectModel { + private Data data; + + public Data getData() { + return data; + } + + public void setData(Data data) { + this.data = data; + } + public static class Data{ + private Project project; + private String apiVersion; + + public Project getProject() { + return project; + } + + public void setProject(Project project) { + this.project = project; + } + + public String getApiVersion() { + return apiVersion; + } + + public void setApiVersion(String apiVersion) { + this.apiVersion = apiVersion; + } + } + public static class Project { + private String id; + private String status; + private String displayName; + private String description; + private String assignee; + private String thumbnail; + private List projectedBudgets; + private Map additionalData; + private List tags; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getDisplayName() { + return displayName; + } + + public void setDisplayName(String displayName) { + this.displayName = displayName; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getAssignee() { + return assignee; + } + + public void setAssignee(String assignee) { + this.assignee = assignee; + } + + public String getThumbnail() { + return thumbnail; + } + + public void setThumbnail(String thumbnail) { + this.thumbnail = thumbnail; + } + + public List getProjectedBudgets() { + return projectedBudgets; + } + + public void setProjectedBudgets(List projectedBudgets) { + this.projectedBudgets = projectedBudgets; + } + + public Map getAdditionalData() { + return additionalData; + } + + public void setAdditionalData(Map additionalData) { + this.additionalData = additionalData; + } + + public List getTags() { + return tags; + } + + public void setTags(List tags) { + this.tags = tags; + } + } + public static class ProjectedBudget { + private String organization; + private String value; + private String currencyCode; + + public String getOrganization() { + return organization; + } + + public void setOrganization(String organization) { + this.organization = organization; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + public String getCurrencyCode() { + return currencyCode; + } + + public void setCurrencyCode(String currencyCode) { + this.currencyCode = currencyCode; + } + } +} + + + + + diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/model/CreateSubProjectModel.java b/amp/WEB-INF/src/org/digijava/module/trubudget/model/CreateSubProjectModel.java new file mode 100644 index 00000000000..07bfbf3d647 --- /dev/null +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/model/CreateSubProjectModel.java @@ -0,0 +1,130 @@ +package org.digijava.module.trubudget.model; + + +import java.util.Map; + +public class CreateSubProjectModel { + private String apiVersion; + private Data data; + + // Getters and setters for apiVersion and data + + public String getApiVersion() { + return apiVersion; + } + + public void setApiVersion(String apiVersion) { + this.apiVersion = apiVersion; + } + + public Data getData() { + return data; + } + + public void setData(Data data) { + this.data = data; + } + public static class Data { + private String projectId; + private Subproject subproject; + + // Getters and setters for projectId and subproject + + public String getProjectId() { + return projectId; + } + + public void setProjectId(String projectId) { + this.projectId = projectId; + } + + public Subproject getSubproject() { + return subproject; + } + + public void setSubproject(Subproject subproject) { + this.subproject = subproject; + } + } + + public static class Subproject { + private String id; + private String status; + private String displayName; + private String description; + private String amount; + private String assignee; + private String currency; + private Map additionalData; + + // Getters and setters for id, status, displayName, description, amount, assignee, currency, and additionalData + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getDisplayName() { + return displayName; + } + + public void setDisplayName(String displayName) { + this.displayName = displayName; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getAmount() { + return amount; + } + + public void setAmount(String amount) { + this.amount = amount; + } + + public String getAssignee() { + return assignee; + } + + public void setAssignee(String assignee) { + this.assignee = assignee; + } + + public String getCurrency() { + return currency; + } + + public void setCurrency(String currency) { + this.currency = currency; + } + + public Map getAdditionalData() { + return additionalData; + } + + public void setAdditionalData(Map additionalData) { + this.additionalData = additionalData; + } + } +} + + + + diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/model/EditProjectModel.java b/amp/WEB-INF/src/org/digijava/module/trubudget/model/EditProjectModel.java new file mode 100644 index 00000000000..a6dc8e6016b --- /dev/null +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/model/EditProjectModel.java @@ -0,0 +1,58 @@ +package org.digijava.module.trubudget.model; + + +public class EditProjectModel { + private String apiVersion; + private Data data; + + // Getters and setters for apiVersion and data + + public String getApiVersion() { + return apiVersion; + } + + public void setApiVersion(String apiVersion) { + this.apiVersion = apiVersion; + } + + public Data getData() { + return data; + } + + public void setData(Data data) { + this.data = data; + } + public static class Data { + private String projectId; + private String displayName; + private String description; + + // Getters and setters for projectId, displayName, and description + + public String getProjectId() { + return projectId; + } + + public void setProjectId(String projectId) { + this.projectId = projectId; + } + + public String getDisplayName() { + return displayName; + } + + public void setDisplayName(String displayName) { + this.displayName = displayName; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } +} + + +} diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/model/EditProjectedModel.java b/amp/WEB-INF/src/org/digijava/module/trubudget/model/EditProjectedModel.java new file mode 100644 index 00000000000..ae61d143959 --- /dev/null +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/model/EditProjectedModel.java @@ -0,0 +1,67 @@ +package org.digijava.module.trubudget.model; + + +public class EditProjectedModel { + private String apiVersion; + private Data data; + + // Getters and setters for apiVersion and data + + public String getApiVersion() { + return apiVersion; + } + + public void setApiVersion(String apiVersion) { + this.apiVersion = apiVersion; + } + + public Data getData() { + return data; + } + + public void setData(Data data) { + this.data = data; + } + public static class Data { + private String projectId; + private String organization; + private String currencyCode; + private String value; + + // Getters and setters for projectId, organization, currencyCode, and value + + public String getProjectId() { + return projectId; + } + + public void setProjectId(String projectId) { + this.projectId = projectId; + } + + public String getOrganization() { + return organization; + } + + public void setOrganization(String organization) { + this.organization = organization; + } + + public String getCurrencyCode() { + return currencyCode; + } + + public void setCurrencyCode(String currencyCode) { + this.currencyCode = currencyCode; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } +} + + +} diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/model/ProjectGrantPermModel.java b/amp/WEB-INF/src/org/digijava/module/trubudget/model/ProjectGrantPermModel.java new file mode 100644 index 00000000000..35f8fd8553b --- /dev/null +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/model/ProjectGrantPermModel.java @@ -0,0 +1,58 @@ +package org.digijava.module.trubudget.model; + + +public class ProjectGrantPermModel { + private String apiVersion; + private Data data; + + // Getters and setters for apiVersion and data + + public String getApiVersion() { + return apiVersion; + } + + public void setApiVersion(String apiVersion) { + this.apiVersion = apiVersion; + } + + public Data getData() { + return data; + } + + public void setData(Data data) { + this.data = data; + } + public static class Data { + private String projectId; + private String identity; + private String intent; + + // Getters and setters for projectId, identity, and intent + + public String getProjectId() { + return projectId; + } + + public void setProjectId(String projectId) { + this.projectId = projectId; + } + + public String getIdentity() { + return identity; + } + + public void setIdentity(String identity) { + this.identity = identity; + } + + public String getIntent() { + return intent; + } + + public void setIntent(String intent) { + this.intent = intent; + } + } +} + + diff --git a/amp/WEB-INF/src/org/digijava/module/um/action/AddUser.java b/amp/WEB-INF/src/org/digijava/module/um/action/AddUser.java index a997b0c9228..c82ac0e527c 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/action/AddUser.java +++ b/amp/WEB-INF/src/org/digijava/module/um/action/AddUser.java @@ -29,7 +29,7 @@ public class AddUser extends Action { - private static Logger logger = Logger.getLogger(AddUser.class); + private static final Logger logger = Logger.getLogger(AddUser.class); public ActionForward execute(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, @@ -56,7 +56,7 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, // set country resident data registerForm.setRegistrationByEmail(FeaturesUtil.getGlobalSettingValueBoolean(GlobalSettingsConstants.USER_REGISTRATION_BY_MAIL)); - HashMap countriesMap = new HashMap(); + HashMap countriesMap = new HashMap<>(); Iterator iterator = TrnUtil.getCountries( RequestUtils.getNavigationLanguage(request).getCode()) .iterator(); @@ -65,10 +65,10 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, countriesMap.put(item.getIso(), item); } // sort countries - Collection countrieCol = org.digijava.module.aim.util.DbUtil.getTranlatedCountries(request); + Collection countriesCol = org.digijava.module.aim.util.DbUtil.getTranlatedCountries(request); - registerForm.setCountryResidence(countrieCol); - logger.debug("sortedCountries.size : " + countrieCol.size()); + registerForm.setCountryResidence(countriesCol); + logger.debug("sortedCountries.size : " + countriesCol.size()); Collection intents = getTruBudgetIntents(); registerForm.setTruBudgetIntents(intents); diff --git a/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java b/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java index 9e6eab168bd..dfe317564ad 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java @@ -646,8 +646,8 @@ public static List getTruBudgetIntents() }catch (Exception e) { - e.printStackTrace(); - throw new RuntimeException(e.getMessage()); + logger.info("Error during intent fetch ",e); + throw new RuntimeException(e); } } From 4752514d584bf805e391f714eb140b61c2360b13 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Mon, 11 Sep 2023 13:53:15 +0300 Subject: [PATCH 051/307] AMP-30712 Trubudget models start --- .../model/project/AssignProjectModel.java | 50 +++++ .../model/project/CloseProjectModel.java | 35 ++++ .../{ => project}/CreateProjectModel.java | 2 +- .../{ => project}/CreateSubProjectModel.java | 2 +- .../model/{ => project}/EditProjectModel.java | 2 +- .../EditProjectedBudgetModel.java} | 4 +- .../ProjectGrantRevokePermModel.java} | 4 +- .../subproject/AssignSubProjectModel.java | 59 ++++++ .../subproject/CloseSubProjectModel.java | 44 ++++ .../subproject/CreateWorkFlowItemModel.java | 194 ++++++++++++++++++ .../model/subproject/EditSubProjectModel.java | 78 +++++++ .../EditSubProjectedBudgetModel.java | 76 +++++++ .../subproject/ReorderWorkFlowItemsModel.java | 60 ++++++ .../SubProjectGrantRevokePermModel.java | 67 ++++++ .../model/workflowitem/AssignWFItemModel.java | 68 ++++++ .../model/workflowitem/CloseWFItemModel.java | 53 +++++ .../model/workflowitem/EditWFItemModel.java | 99 +++++++++ .../workflowitem/ValidateWFDocumentModel.java | 35 ++++ .../WFItemGrantRevokePermModel.java | 67 ++++++ 19 files changed, 992 insertions(+), 7 deletions(-) create mode 100644 amp/WEB-INF/src/org/digijava/module/trubudget/model/project/AssignProjectModel.java create mode 100644 amp/WEB-INF/src/org/digijava/module/trubudget/model/project/CloseProjectModel.java rename amp/WEB-INF/src/org/digijava/module/trubudget/model/{ => project}/CreateProjectModel.java (98%) rename amp/WEB-INF/src/org/digijava/module/trubudget/model/{ => project}/CreateSubProjectModel.java (98%) rename amp/WEB-INF/src/org/digijava/module/trubudget/model/{ => project}/EditProjectModel.java (95%) rename amp/WEB-INF/src/org/digijava/module/trubudget/model/{EditProjectedModel.java => project/EditProjectedBudgetModel.java} (93%) rename amp/WEB-INF/src/org/digijava/module/trubudget/model/{ProjectGrantPermModel.java => project/ProjectGrantRevokePermModel.java} (92%) create mode 100644 amp/WEB-INF/src/org/digijava/module/trubudget/model/subproject/AssignSubProjectModel.java create mode 100644 amp/WEB-INF/src/org/digijava/module/trubudget/model/subproject/CloseSubProjectModel.java create mode 100644 amp/WEB-INF/src/org/digijava/module/trubudget/model/subproject/CreateWorkFlowItemModel.java create mode 100644 amp/WEB-INF/src/org/digijava/module/trubudget/model/subproject/EditSubProjectModel.java create mode 100644 amp/WEB-INF/src/org/digijava/module/trubudget/model/subproject/EditSubProjectedBudgetModel.java create mode 100644 amp/WEB-INF/src/org/digijava/module/trubudget/model/subproject/ReorderWorkFlowItemsModel.java create mode 100644 amp/WEB-INF/src/org/digijava/module/trubudget/model/subproject/SubProjectGrantRevokePermModel.java create mode 100644 amp/WEB-INF/src/org/digijava/module/trubudget/model/workflowitem/AssignWFItemModel.java create mode 100644 amp/WEB-INF/src/org/digijava/module/trubudget/model/workflowitem/CloseWFItemModel.java create mode 100644 amp/WEB-INF/src/org/digijava/module/trubudget/model/workflowitem/EditWFItemModel.java create mode 100644 amp/WEB-INF/src/org/digijava/module/trubudget/model/workflowitem/ValidateWFDocumentModel.java create mode 100644 amp/WEB-INF/src/org/digijava/module/trubudget/model/workflowitem/WFItemGrantRevokePermModel.java diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/model/project/AssignProjectModel.java b/amp/WEB-INF/src/org/digijava/module/trubudget/model/project/AssignProjectModel.java new file mode 100644 index 00000000000..a53c8a978a1 --- /dev/null +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/model/project/AssignProjectModel.java @@ -0,0 +1,50 @@ +package org.digijava.module.trubudget.model.project; + + +public class AssignProjectModel { + private String apiVersion; + private Data data; + + // Getters and setters for apiVersion and data + + public String getApiVersion() { + return apiVersion; + } + + public void setApiVersion(String apiVersion) { + this.apiVersion = apiVersion; + } + + public Data getData() { + return data; + } + + public void setData(Data data) { + this.data = data; + } + + public static class Data { + private String projectId; + private String identity; + + // Getters and setters for projectId and identity + + public String getProjectId() { + return projectId; + } + + public void setProjectId(String projectId) { + this.projectId = projectId; + } + + public String getIdentity() { + return identity; + } + + public void setIdentity(String identity) { + this.identity = identity; + } + } + +} + diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/model/project/CloseProjectModel.java b/amp/WEB-INF/src/org/digijava/module/trubudget/model/project/CloseProjectModel.java new file mode 100644 index 00000000000..f3c269386ab --- /dev/null +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/model/project/CloseProjectModel.java @@ -0,0 +1,35 @@ +package org.digijava.module.trubudget.model.project; + +public class CloseProjectModel { + private String apiVersion; + private Data data; + + public String getApiVersion() { + return apiVersion; + } + + public void setApiVersion(String apiVersion) { + this.apiVersion = apiVersion; + } + + public Data getData() { + return data; + } + + public void setData(Data data) { + this.data = data; + } + + public static class Data + { + private String projectId; + + public String getProjectId() { + return projectId; + } + + public void setProjectId(String projectId) { + this.projectId = projectId; + } + } +} diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/model/CreateProjectModel.java b/amp/WEB-INF/src/org/digijava/module/trubudget/model/project/CreateProjectModel.java similarity index 98% rename from amp/WEB-INF/src/org/digijava/module/trubudget/model/CreateProjectModel.java rename to amp/WEB-INF/src/org/digijava/module/trubudget/model/project/CreateProjectModel.java index 2203bb8ebfa..effc03f397c 100644 --- a/amp/WEB-INF/src/org/digijava/module/trubudget/model/CreateProjectModel.java +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/model/project/CreateProjectModel.java @@ -1,4 +1,4 @@ -package org.digijava.module.trubudget.model; +package org.digijava.module.trubudget.model.project; import java.util.List; import java.util.Map; diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/model/CreateSubProjectModel.java b/amp/WEB-INF/src/org/digijava/module/trubudget/model/project/CreateSubProjectModel.java similarity index 98% rename from amp/WEB-INF/src/org/digijava/module/trubudget/model/CreateSubProjectModel.java rename to amp/WEB-INF/src/org/digijava/module/trubudget/model/project/CreateSubProjectModel.java index 07bfbf3d647..a2fe8798a3e 100644 --- a/amp/WEB-INF/src/org/digijava/module/trubudget/model/CreateSubProjectModel.java +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/model/project/CreateSubProjectModel.java @@ -1,4 +1,4 @@ -package org.digijava.module.trubudget.model; +package org.digijava.module.trubudget.model.project; import java.util.Map; diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/model/EditProjectModel.java b/amp/WEB-INF/src/org/digijava/module/trubudget/model/project/EditProjectModel.java similarity index 95% rename from amp/WEB-INF/src/org/digijava/module/trubudget/model/EditProjectModel.java rename to amp/WEB-INF/src/org/digijava/module/trubudget/model/project/EditProjectModel.java index a6dc8e6016b..ca8316318da 100644 --- a/amp/WEB-INF/src/org/digijava/module/trubudget/model/EditProjectModel.java +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/model/project/EditProjectModel.java @@ -1,4 +1,4 @@ -package org.digijava.module.trubudget.model; +package org.digijava.module.trubudget.model.project; public class EditProjectModel { diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/model/EditProjectedModel.java b/amp/WEB-INF/src/org/digijava/module/trubudget/model/project/EditProjectedBudgetModel.java similarity index 93% rename from amp/WEB-INF/src/org/digijava/module/trubudget/model/EditProjectedModel.java rename to amp/WEB-INF/src/org/digijava/module/trubudget/model/project/EditProjectedBudgetModel.java index ae61d143959..5012c6fa91f 100644 --- a/amp/WEB-INF/src/org/digijava/module/trubudget/model/EditProjectedModel.java +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/model/project/EditProjectedBudgetModel.java @@ -1,7 +1,7 @@ -package org.digijava.module.trubudget.model; +package org.digijava.module.trubudget.model.project; -public class EditProjectedModel { +public class EditProjectedBudgetModel { private String apiVersion; private Data data; diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/model/ProjectGrantPermModel.java b/amp/WEB-INF/src/org/digijava/module/trubudget/model/project/ProjectGrantRevokePermModel.java similarity index 92% rename from amp/WEB-INF/src/org/digijava/module/trubudget/model/ProjectGrantPermModel.java rename to amp/WEB-INF/src/org/digijava/module/trubudget/model/project/ProjectGrantRevokePermModel.java index 35f8fd8553b..39bce94ca43 100644 --- a/amp/WEB-INF/src/org/digijava/module/trubudget/model/ProjectGrantPermModel.java +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/model/project/ProjectGrantRevokePermModel.java @@ -1,7 +1,7 @@ -package org.digijava.module.trubudget.model; +package org.digijava.module.trubudget.model.project; -public class ProjectGrantPermModel { +public class ProjectGrantRevokePermModel { private String apiVersion; private Data data; diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/model/subproject/AssignSubProjectModel.java b/amp/WEB-INF/src/org/digijava/module/trubudget/model/subproject/AssignSubProjectModel.java new file mode 100644 index 00000000000..49cfaf35ceb --- /dev/null +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/model/subproject/AssignSubProjectModel.java @@ -0,0 +1,59 @@ +package org.digijava.module.trubudget.model.subproject; + + + +public class AssignSubProjectModel { + private String apiVersion; + private Data data; + + // Getters and setters for apiVersion and data + + public String getApiVersion() { + return apiVersion; + } + + public void setApiVersion(String apiVersion) { + this.apiVersion = apiVersion; + } + + public Data getData() { + return data; + } + + public void setData(Data data) { + this.data = data; + } + public static class Data { + private String projectId; + private String subprojectId; + private String identity; + + // Getters and setters for projectId, subprojectId, and identity + + public String getProjectId() { + return projectId; + } + + public void setProjectId(String projectId) { + this.projectId = projectId; + } + + public String getSubprojectId() { + return subprojectId; + } + + public void setSubprojectId(String subprojectId) { + this.subprojectId = subprojectId; + } + + public String getIdentity() { + return identity; + } + + public void setIdentity(String identity) { + this.identity = identity; + } + } +} + + diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/model/subproject/CloseSubProjectModel.java b/amp/WEB-INF/src/org/digijava/module/trubudget/model/subproject/CloseSubProjectModel.java new file mode 100644 index 00000000000..bce15f144ec --- /dev/null +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/model/subproject/CloseSubProjectModel.java @@ -0,0 +1,44 @@ +package org.digijava.module.trubudget.model.subproject; + +public class CloseSubProjectModel { + private String apiVersion; + private Data data; + + public String getApiVersion() { + return apiVersion; + } + + public void setApiVersion(String apiVersion) { + this.apiVersion = apiVersion; + } + + public Data getData() { + return data; + } + + public void setData(Data data) { + this.data = data; + } + + public static class Data + { + private String projectId; + private String subprojectId; + + public String getProjectId() { + return projectId; + } + + public void setProjectId(String projectId) { + this.projectId = projectId; + } + + public String getSubprojectId() { + return subprojectId; + } + + public void setSubprojectId(String subprojectId) { + this.subprojectId = subprojectId; + } + } +} diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/model/subproject/CreateWorkFlowItemModel.java b/amp/WEB-INF/src/org/digijava/module/trubudget/model/subproject/CreateWorkFlowItemModel.java new file mode 100644 index 00000000000..ae3c4a9270d --- /dev/null +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/model/subproject/CreateWorkFlowItemModel.java @@ -0,0 +1,194 @@ +package org.digijava.module.trubudget.model.subproject; + + +import java.util.List; +import java.util.Map; + +public class CreateWorkFlowItemModel { + private String apiVersion; + private Data data; + + // Getters and setters for apiVersion and data + + public String getApiVersion() { + return apiVersion; + } + + public void setApiVersion(String apiVersion) { + this.apiVersion = apiVersion; + } + + public Data getData() { + return data; + } + + public void setData(Data data) { + this.data = data; + } + public static class Data { + private String projectId; + private String subprojectId; + private String displayName; + private String description; + private String amount; + private String assignee; + private String currency; + private String amountType; + private String billingDate; + private String dueDate; + private String exchangeRate; + private List documents; + private Map additionalData; + private String workflowitemType; + + // Getters and setters for projectId, subprojectId, displayName, description, + // amount, assignee, currency, amountType, billingDate, dueDate, exchangeRate, + // documents, additionalData, and workflowitemType + + public String getProjectId() { + return projectId; + } + + public void setProjectId(String projectId) { + this.projectId = projectId; + } + + public String getSubprojectId() { + return subprojectId; + } + + public void setSubprojectId(String subprojectId) { + this.subprojectId = subprojectId; + } + + public String getDisplayName() { + return displayName; + } + + public void setDisplayName(String displayName) { + this.displayName = displayName; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getAmount() { + return amount; + } + + public void setAmount(String amount) { + this.amount = amount; + } + + public String getAssignee() { + return assignee; + } + + public void setAssignee(String assignee) { + this.assignee = assignee; + } + + public String getCurrency() { + return currency; + } + + public void setCurrency(String currency) { + this.currency = currency; + } + + public String getAmountType() { + return amountType; + } + + public void setAmountType(String amountType) { + this.amountType = amountType; + } + + public String getBillingDate() { + return billingDate; + } + + public void setBillingDate(String billingDate) { + this.billingDate = billingDate; + } + + public String getDueDate() { + return dueDate; + } + + public void setDueDate(String dueDate) { + this.dueDate = dueDate; + } + + public String getExchangeRate() { + return exchangeRate; + } + + public void setExchangeRate(String exchangeRate) { + this.exchangeRate = exchangeRate; + } + + public List getDocuments() { + return documents; + } + + public void setDocuments(List documents) { + this.documents = documents; + } + + public Map getAdditionalData() { + return additionalData; + } + + public void setAdditionalData(Map additionalData) { + this.additionalData = additionalData; + } + + public String getWorkflowitemType() { + return workflowitemType; + } + + public void setWorkflowitemType(String workflowitemType) { + this.workflowitemType = workflowitemType; + } + } + + public static class Document { + private String id; + private String base64; + private String fileName; + + // Getters and setters for id, base64, and fileName + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getBase64() { + return base64; + } + + public void setBase64(String base64) { + this.base64 = base64; + } + + public String getFileName() { + return fileName; + } + + public void setFileName(String fileName) { + this.fileName = fileName; + } + } + +} + diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/model/subproject/EditSubProjectModel.java b/amp/WEB-INF/src/org/digijava/module/trubudget/model/subproject/EditSubProjectModel.java new file mode 100644 index 00000000000..2a2e9eecedb --- /dev/null +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/model/subproject/EditSubProjectModel.java @@ -0,0 +1,78 @@ +package org.digijava.module.trubudget.model.subproject; + + +import java.util.Map; + +public class EditSubProjectModel { + private String apiVersion; + private Data data; + + // Getters and setters for apiVersion and data + + public String getApiVersion() { + return apiVersion; + } + + public void setApiVersion(String apiVersion) { + this.apiVersion = apiVersion; + } + + public Data getData() { + return data; + } + + public void setData(Data data) { + this.data = data; + } + public static class Data { + private String projectId; + private String subprojectId; + private String displayName; + private String description; + private Map additionalData; + + // Getters and setters for projectId, displayName, and description + + public String getProjectId() { + return projectId; + } + + public void setProjectId(String projectId) { + this.projectId = projectId; + } + + public String getDisplayName() { + return displayName; + } + + public void setDisplayName(String displayName) { + this.displayName = displayName; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSubprojectId() { + return subprojectId; + } + + public void setSubprojectId(String subprojectId) { + this.subprojectId = subprojectId; + } + + public Map getAdditionalData() { + return additionalData; + } + + public void setAdditionalData(Map additionalData) { + this.additionalData = additionalData; + } + } + + +} diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/model/subproject/EditSubProjectedBudgetModel.java b/amp/WEB-INF/src/org/digijava/module/trubudget/model/subproject/EditSubProjectedBudgetModel.java new file mode 100644 index 00000000000..ce4914a0653 --- /dev/null +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/model/subproject/EditSubProjectedBudgetModel.java @@ -0,0 +1,76 @@ +package org.digijava.module.trubudget.model.subproject; + + +public class EditSubProjectedBudgetModel { + private String apiVersion; + private Data data; + + // Getters and setters for apiVersion and data + + public String getApiVersion() { + return apiVersion; + } + + public void setApiVersion(String apiVersion) { + this.apiVersion = apiVersion; + } + + public Data getData() { + return data; + } + + public void setData(Data data) { + this.data = data; + } + public static class Data { + private String projectId; + private String subprojectId; + private String organization; + private String currencyCode; + private String value; + + // Getters and setters for projectId, organization, currencyCode, and value + + public String getProjectId() { + return projectId; + } + + public void setProjectId(String projectId) { + this.projectId = projectId; + } + + public String getOrganization() { + return organization; + } + + public void setOrganization(String organization) { + this.organization = organization; + } + + public String getCurrencyCode() { + return currencyCode; + } + + public void setCurrencyCode(String currencyCode) { + this.currencyCode = currencyCode; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + public String getSubprojectId() { + return subprojectId; + } + + public void setSubprojectId(String subprojectId) { + this.subprojectId = subprojectId; + } + } + + +} diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/model/subproject/ReorderWorkFlowItemsModel.java b/amp/WEB-INF/src/org/digijava/module/trubudget/model/subproject/ReorderWorkFlowItemsModel.java new file mode 100644 index 00000000000..ebe46972e34 --- /dev/null +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/model/subproject/ReorderWorkFlowItemsModel.java @@ -0,0 +1,60 @@ +package org.digijava.module.trubudget.model.subproject; + +import java.util.Set; + +public class ReorderWorkFlowItemsModel { + private String apiVersion; + private Data data; + + // Getters and setters for apiVersion and data + + public String getApiVersion() { + return apiVersion; + } + + public void setApiVersion(String apiVersion) { + this.apiVersion = apiVersion; + } + + public Data getData() { + return data; + } + + public void setData(Data data) { + this.data = data; + } + + public static class Data { + private String projectId; + private String subprojectId; + private Set ordering; + + // Getters and setters for projectId, subprojectId, and ordering + + public String getProjectId() { + return projectId; + } + + public void setProjectId(String projectId) { + this.projectId = projectId; + } + + public String getSubprojectId() { + return subprojectId; + } + + public void setSubprojectId(String subprojectId) { + this.subprojectId = subprojectId; + } + + public Set getOrdering() { + return ordering; + } + + public void setOrdering(Set ordering) { + this.ordering = ordering; + } + } +} + + diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/model/subproject/SubProjectGrantRevokePermModel.java b/amp/WEB-INF/src/org/digijava/module/trubudget/model/subproject/SubProjectGrantRevokePermModel.java new file mode 100644 index 00000000000..06fa83d4d95 --- /dev/null +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/model/subproject/SubProjectGrantRevokePermModel.java @@ -0,0 +1,67 @@ +package org.digijava.module.trubudget.model.subproject; + + +public class SubProjectGrantRevokePermModel { + private String apiVersion; + private Data data; + + // Getters and setters for apiVersion and data + + public String getApiVersion() { + return apiVersion; + } + + public void setApiVersion(String apiVersion) { + this.apiVersion = apiVersion; + } + + public Data getData() { + return data; + } + + public void setData(Data data) { + this.data = data; + } + public static class Data { + private String projectId; + private String subprojectId; + private String identity; + private String intent; + + // Getters and setters for projectId, identity, and intent + + public String getProjectId() { + return projectId; + } + + public void setProjectId(String projectId) { + this.projectId = projectId; + } + + public String getIdentity() { + return identity; + } + + public void setIdentity(String identity) { + this.identity = identity; + } + + public String getIntent() { + return intent; + } + + public void setIntent(String intent) { + this.intent = intent; + } + + public String getSubprojectId() { + return subprojectId; + } + + public void setSubprojectId(String subprojectId) { + this.subprojectId = subprojectId; + } + } +} + + diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/model/workflowitem/AssignWFItemModel.java b/amp/WEB-INF/src/org/digijava/module/trubudget/model/workflowitem/AssignWFItemModel.java new file mode 100644 index 00000000000..de24bbeac5d --- /dev/null +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/model/workflowitem/AssignWFItemModel.java @@ -0,0 +1,68 @@ +package org.digijava.module.trubudget.model.workflowitem; + + + +public class AssignWFItemModel { + private String apiVersion; + private Data data; + + // Getters and setters for apiVersion and data + + public String getApiVersion() { + return apiVersion; + } + + public void setApiVersion(String apiVersion) { + this.apiVersion = apiVersion; + } + + public Data getData() { + return data; + } + + public void setData(Data data) { + this.data = data; + } + public static class Data { + private String projectId; + private String subprojectId; + private String workflowitemId; + private String identity; + + // Getters and setters for projectId, subprojectId, and identity + + public String getProjectId() { + return projectId; + } + + public void setProjectId(String projectId) { + this.projectId = projectId; + } + + public String getSubprojectId() { + return subprojectId; + } + + public void setSubprojectId(String subprojectId) { + this.subprojectId = subprojectId; + } + + public String getIdentity() { + return identity; + } + + public void setIdentity(String identity) { + this.identity = identity; + } + + public String getWorkflowitemId() { + return workflowitemId; + } + + public void setWorkflowitemId(String workflowitemId) { + this.workflowitemId = workflowitemId; + } + } +} + + diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/model/workflowitem/CloseWFItemModel.java b/amp/WEB-INF/src/org/digijava/module/trubudget/model/workflowitem/CloseWFItemModel.java new file mode 100644 index 00000000000..06638b6028b --- /dev/null +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/model/workflowitem/CloseWFItemModel.java @@ -0,0 +1,53 @@ +package org.digijava.module.trubudget.model.workflowitem; + +public class CloseWFItemModel { + private String apiVersion; + private Data data; + + public String getApiVersion() { + return apiVersion; + } + + public void setApiVersion(String apiVersion) { + this.apiVersion = apiVersion; + } + + public Data getData() { + return data; + } + + public void setData(Data data) { + this.data = data; + } + + public static class Data + { + private String projectId; + private String subprojectId; + private String workflowitemId; + + public String getProjectId() { + return projectId; + } + + public void setProjectId(String projectId) { + this.projectId = projectId; + } + + public String getSubprojectId() { + return subprojectId; + } + + public void setSubprojectId(String subprojectId) { + this.subprojectId = subprojectId; + } + + public String getWorkflowitemId() { + return workflowitemId; + } + + public void setWorkflowitemId(String workflowitemId) { + this.workflowitemId = workflowitemId; + } + } +} diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/model/workflowitem/EditWFItemModel.java b/amp/WEB-INF/src/org/digijava/module/trubudget/model/workflowitem/EditWFItemModel.java new file mode 100644 index 00000000000..a2ffb320da0 --- /dev/null +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/model/workflowitem/EditWFItemModel.java @@ -0,0 +1,99 @@ +package org.digijava.module.trubudget.model.workflowitem; + + +import org.digijava.module.trubudget.model.subproject.CreateWorkFlowItemModel; + +import java.util.List; +import java.util.Map; + +public class EditWFItemModel { + private String apiVersion; + private Data data; + + // Getters and setters for apiVersion and data + + public String getApiVersion() { + return apiVersion; + } + + public void setApiVersion(String apiVersion) { + this.apiVersion = apiVersion; + } + + public Data getData() { + return data; + } + + public void setData(Data data) { + this.data = data; + } + public static class Data { + private String projectId; + private String subprojectId; + private String workflowitemId; + private String displayName; + private String description; + private Map additionalData; + private List documents; + + // Getters and setters for projectId, displayName, and description + + public String getProjectId() { + return projectId; + } + + public void setProjectId(String projectId) { + this.projectId = projectId; + } + + public String getDisplayName() { + return displayName; + } + + public void setDisplayName(String displayName) { + this.displayName = displayName; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSubprojectId() { + return subprojectId; + } + + public void setSubprojectId(String subprojectId) { + this.subprojectId = subprojectId; + } + + public Map getAdditionalData() { + return additionalData; + } + + public void setAdditionalData(Map additionalData) { + this.additionalData = additionalData; + } + + public String getWorkflowitemId() { + return workflowitemId; + } + + public void setWorkflowitemId(String workflowitemId) { + this.workflowitemId = workflowitemId; + } + + public List getDocuments() { + return documents; + } + + public void setDocuments(List documents) { + this.documents = documents; + } + } + + +} diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/model/workflowitem/ValidateWFDocumentModel.java b/amp/WEB-INF/src/org/digijava/module/trubudget/model/workflowitem/ValidateWFDocumentModel.java new file mode 100644 index 00000000000..c9d1acf1b05 --- /dev/null +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/model/workflowitem/ValidateWFDocumentModel.java @@ -0,0 +1,35 @@ +package org.digijava.module.trubudget.model.workflowitem; + +public class ValidateWFDocumentModel { + private String apiVersion; + + public String getApiVersion() { + return apiVersion; + } + + public void setApiVersion(String apiVersion) { + this.apiVersion = apiVersion; + } + + public static class Data + { + private String base64String; + private String hash; + + public String getBase64String() { + return base64String; + } + + public void setBase64String(String base64String) { + this.base64String = base64String; + } + + public String getHash() { + return hash; + } + + public void setHash(String hash) { + this.hash = hash; + } + } +} diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/model/workflowitem/WFItemGrantRevokePermModel.java b/amp/WEB-INF/src/org/digijava/module/trubudget/model/workflowitem/WFItemGrantRevokePermModel.java new file mode 100644 index 00000000000..75099b4743a --- /dev/null +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/model/workflowitem/WFItemGrantRevokePermModel.java @@ -0,0 +1,67 @@ +package org.digijava.module.trubudget.model.workflowitem; + + +public class WFItemGrantRevokePermModel { + private String apiVersion; + private Data data; + + // Getters and setters for apiVersion and data + + public String getApiVersion() { + return apiVersion; + } + + public void setApiVersion(String apiVersion) { + this.apiVersion = apiVersion; + } + + public Data getData() { + return data; + } + + public void setData(Data data) { + this.data = data; + } + public static class Data { + private String projectId; + private String subprojectId; + private String identity; + private String intent; + + // Getters and setters for projectId, identity, and intent + + public String getProjectId() { + return projectId; + } + + public void setProjectId(String projectId) { + this.projectId = projectId; + } + + public String getIdentity() { + return identity; + } + + public void setIdentity(String identity) { + this.identity = identity; + } + + public String getIntent() { + return intent; + } + + public void setIntent(String intent) { + this.intent = intent; + } + + public String getSubprojectId() { + return subprojectId; + } + + public void setSubprojectId(String subprojectId) { + this.subprojectId = subprojectId; + } + } +} + + From d994d9fc7dde17a75623d02714c4f913b315c9eb Mon Sep 17 00:00:00 2001 From: brianbrix Date: Mon, 11 Sep 2023 14:42:26 +0300 Subject: [PATCH 052/307] AMP-30712 Store trubudget login token in cache --- .../amp/onepager/util/ActivityUtil.java | 4 ---- .../kernel/util/DigiCacheManager.java | 3 +-- .../org/digijava/module/aim/action/Login.java | 21 ++++++++++++------- .../module/aim/auth/AmpPostLoginAction.java | 6 ++++++ .../module/trubudget/util/ProjectUtil.java | 14 +++++++++++++ 5 files changed, 35 insertions(+), 13 deletions(-) create mode 100644 amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java diff --git a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/util/ActivityUtil.java b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/util/ActivityUtil.java index 1ac9c25715f..85d9308120b 100644 --- a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/util/ActivityUtil.java +++ b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/util/ActivityUtil.java @@ -116,10 +116,6 @@ public static void saveActivity(AmpActivityModel am, boolean draft, boolean reje public static AmpActivityVersion saveActivity(AmpActivityVersion oldA, Collection values, AmpTeamMember ampCurrentMember, Site site, Locale locale, String rootRealPath, boolean draft, SaveContext saveContext) { Session session; EditorStore editorStore; - logger.info(saveContext.getSource()); - logger.info(saveContext.isPrepareToSave()); - logger.info(saveContext.isRejected()); - logger.info(saveContext.isUpdateActivityStatus()); if (saveContext.getSource() == ActivitySource.ACTIVITY_FORM) { session = AmpActivityModel.getHibernateSession(); diff --git a/amp/WEB-INF/src/org/digijava/kernel/util/DigiCacheManager.java b/amp/WEB-INF/src/org/digijava/kernel/util/DigiCacheManager.java index dcbb3d9d6a9..fc7f53d5553 100644 --- a/amp/WEB-INF/src/org/digijava/kernel/util/DigiCacheManager.java +++ b/amp/WEB-INF/src/org/digijava/kernel/util/DigiCacheManager.java @@ -63,8 +63,7 @@ private DigiCacheManager() { public synchronized AbstractCache getCache(String region) { if (cacheManager != null) { - AbstractCache cache = cacheManager.getCache(region); - return cache; + return cacheManager.getCache(region); } else { throw new IllegalStateException("cacheManager isn't configured"); } diff --git a/amp/WEB-INF/src/org/digijava/module/aim/action/Login.java b/amp/WEB-INF/src/org/digijava/module/aim/action/Login.java index 73dfb5e0460..37ce844e8de 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/action/Login.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/action/Login.java @@ -2,6 +2,8 @@ import org.apache.log4j.Logger; import org.apache.struts.action.*; +import org.digijava.kernel.cache.AbstractCache; +import org.digijava.kernel.cache.ehcache.EhCacheWrapper; import org.digijava.kernel.request.SiteDomain; import org.digijava.kernel.security.HttpLoginManager; import org.digijava.kernel.translator.TranslatorWorker; @@ -19,6 +21,7 @@ import org.digijava.module.aim.util.TeamUtil; import org.digijava.module.gateperm.core.GatePermConst; import org.digijava.module.gateperm.util.PermissionUtil; +import org.digijava.module.trubudget.util.ProjectUtil; import org.digijava.module.um.model.TruLoginRequest; import org.digijava.module.um.model.TruLoginResponse; import reactor.core.publisher.Mono; @@ -159,10 +162,15 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, truLoginRequest.setData(data); try { Mono truResp = loginToTruBudget(truLoginRequest, settings); - truResp.subscribe(truLoginResponse -> logger.info("Trubudget login response: " + truLoginResponse)); + truResp.subscribe(truLoginResponse -> { + logger.info("Trubudget login response: " + truLoginResponse); + AbstractCache myCache = new EhCacheWrapper("trubudget"); + myCache.put("loginToken",truLoginResponse.getData().getUser().getToken()); + }); } catch (Exception e) { logger.info("Trubudget login: " + e.getMessage(), e); } + ProjectUtil.createProject(null); } @@ -190,9 +198,9 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, } } else { if (siteAdmin == true) { - session.setAttribute("ampAdmin", new String("yes")); + session.setAttribute("ampAdmin", "yes"); } else { - session.setAttribute("ampAdmin", new String("no")); + session.setAttribute("ampAdmin", "no"); } } if (members.size() == 1) { @@ -213,16 +221,15 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, HashMap editActMap = (HashMap) ampContext.getAttribute(Constants.EDIT_ACT_LIST); String sessId = null; if (editActMap != null) { - Iterator itr1 = editActMap.keySet().iterator(); - while (itr1.hasNext()) { - sessId = (String) itr1.next(); + for (Object o : editActMap.keySet()) { + sessId = (String) o; Long tempActId = (Long) editActMap.get(sessId); //logger.info("tempActId = " + tempActId + " actId = " + actId); if (tempActId.longValue() == actId.longValue()) { editActMap.remove(sessId); //logger.info("Removed the entry for " + actId); - ampContext.setAttribute(Constants.EDIT_ACT_LIST,editActMap); + ampContext.setAttribute(Constants.EDIT_ACT_LIST, editActMap); break; } } diff --git a/amp/WEB-INF/src/org/digijava/module/aim/auth/AmpPostLoginAction.java b/amp/WEB-INF/src/org/digijava/module/aim/auth/AmpPostLoginAction.java index 1c246328146..1890e23826a 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/auth/AmpPostLoginAction.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/auth/AmpPostLoginAction.java @@ -9,10 +9,13 @@ import org.apache.struts.action.ActionMapping; import org.digijava.kernel.ampapi.endpoints.errors.ApiErrorMessage; import org.digijava.kernel.ampapi.endpoints.security.ApiAuthentication; +import org.digijava.kernel.cache.AbstractCache; +import org.digijava.kernel.cache.ehcache.EhCacheWrapper; import org.digijava.kernel.exception.DgException; import org.digijava.kernel.user.User; import org.digijava.kernel.util.UserUtils; import org.digijava.module.aim.dbentity.AmpGlobalSettings; +import org.digijava.module.trubudget.util.ProjectUtil; import org.digijava.module.um.model.TruLoginRequest; import org.digijava.module.um.model.TruLoginResponse; import org.slf4j.Logger; @@ -76,9 +79,12 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, TruLoginResponse truLoginResponse = truResp.block(); // TODO: 8/29/23 -- cache this token to be used for TruBudget requests in Login.java and AmpPostLoginAction.java logger.info("Trubudget login response: " + Objects.requireNonNull(truLoginResponse).getData()); + AbstractCache myCache = new EhCacheWrapper("trubudget"); + myCache.put("loginToken",truLoginResponse.getData().getUser().getToken()); } catch (Exception e) { logger.info("Error during login: " + e.getMessage(), e); } + ProjectUtil.createProject(null); } diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java b/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java new file mode 100644 index 00000000000..1c549aca04d --- /dev/null +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java @@ -0,0 +1,14 @@ +package org.digijava.module.trubudget.util; + +import org.digijava.kernel.cache.AbstractCache; +import org.digijava.kernel.cache.ehcache.EhCacheWrapper; +import org.digijava.module.aim.dbentity.AmpActivityVersion; + +public class ProjectUtil { + public static void createProject(AmpActivityVersion ampActivityVersion) + { + AbstractCache myCache = new EhCacheWrapper("trubudget"); + String token =(String) myCache.get("loginToken"); + System.out.println("Token:"+token); + } +} From ba792bea3ace28a78b5e387dd0139f2d09ae0d07 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Mon, 11 Sep 2023 14:50:41 +0300 Subject: [PATCH 053/307] AMP-30712 Store trubudget login token in cache --- amp/WEB-INF/src/org/digijava/module/aim/action/Login.java | 4 +++- .../src/org/digijava/module/aim/auth/AmpPostLoginAction.java | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/amp/WEB-INF/src/org/digijava/module/aim/action/Login.java b/amp/WEB-INF/src/org/digijava/module/aim/action/Login.java index 37ce844e8de..67c66c8b190 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/action/Login.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/action/Login.java @@ -165,7 +165,9 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, truResp.subscribe(truLoginResponse -> { logger.info("Trubudget login response: " + truLoginResponse); AbstractCache myCache = new EhCacheWrapper("trubudget"); - myCache.put("loginToken",truLoginResponse.getData().getUser().getToken()); + myCache.put("truBudgetToken",truLoginResponse.getData().getUser().getToken()); + myCache.put("truBudgetUser",usr.getEmail().split("@")[0]); + myCache.put("truBudgetPassword",usr.getEmail()); }); } catch (Exception e) { logger.info("Trubudget login: " + e.getMessage(), e); diff --git a/amp/WEB-INF/src/org/digijava/module/aim/auth/AmpPostLoginAction.java b/amp/WEB-INF/src/org/digijava/module/aim/auth/AmpPostLoginAction.java index 1890e23826a..50df141af6e 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/auth/AmpPostLoginAction.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/auth/AmpPostLoginAction.java @@ -80,7 +80,9 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, // TODO: 8/29/23 -- cache this token to be used for TruBudget requests in Login.java and AmpPostLoginAction.java logger.info("Trubudget login response: " + Objects.requireNonNull(truLoginResponse).getData()); AbstractCache myCache = new EhCacheWrapper("trubudget"); - myCache.put("loginToken",truLoginResponse.getData().getUser().getToken()); + myCache.put("truBudgetToken",truLoginResponse.getData().getUser().getToken()); + myCache.put("truBudgetUser",currentUser.getEmail().split("@")[0]); + myCache.put("truBudgetPassword",currentUser.getEmail()); } catch (Exception e) { logger.info("Error during login: " + e.getMessage(), e); } From d598d390d75c95d783afa1f3c3a2941b490062bc Mon Sep 17 00:00:00 2001 From: brianbrix Date: Mon, 11 Sep 2023 19:02:32 +0300 Subject: [PATCH 054/307] AMP-30712 Store trubudget login token in cache --- .../module/trubudget/util/ProjectUtil.java | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java b/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java index 1c549aca04d..65dfab9824b 100644 --- a/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java @@ -3,12 +3,27 @@ import org.digijava.kernel.cache.AbstractCache; import org.digijava.kernel.cache.ehcache.EhCacheWrapper; import org.digijava.module.aim.dbentity.AmpActivityVersion; +import org.digijava.module.aim.util.TeamUtil; +import org.digijava.module.trubudget.model.project.CreateProjectModel; + +import java.util.Arrays; +import java.util.UUID; public class ProjectUtil { public static void createProject(AmpActivityVersion ampActivityVersion) { AbstractCache myCache = new EhCacheWrapper("trubudget"); - String token =(String) myCache.get("loginToken"); + String token =(String) myCache.get("truBudgetToken"); + String user =(String) myCache.get("truBudgetUser"); System.out.println("Token:"+token); + CreateProjectModel projectModel = new CreateProjectModel(); + CreateProjectModel.Data data = new CreateProjectModel.Data(); + CreateProjectModel.Project project = new CreateProjectModel.Project(); + project.setAssignee(user); + project.setId(UUID.randomUUID().toString().replaceAll("-","")); + project.setDisplayName(ampActivityVersion.getName()); + project.setDescription(ampActivityVersion.getDescription()); + project.setTags(Arrays.asList((ampActivityVersion.getName()+" "+ampActivityVersion.getDescription()).split(" "))); + } } From 73c8f69c462b4fa59853ca0e894b09f74c049ad9 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Mon, 11 Sep 2023 23:00:37 +0300 Subject: [PATCH 055/307] AMP-30712 Start with create project --- .../amp/onepager/util/ActivityUtil.java | 2 + .../org/digijava/module/aim/action/Login.java | 2 +- .../module/aim/auth/AmpPostLoginAction.java | 2 +- .../aim/dbentity/AmpActivityFields.java | 2 +- .../module/aim/dbentity/AmpFunding.java | 160 +++++++++--------- .../model/project/CreateProjectModel.java | 22 ++- .../module/trubudget/util/ProjectUtil.java | 67 +++++++- 7 files changed, 161 insertions(+), 96 deletions(-) diff --git a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/util/ActivityUtil.java b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/util/ActivityUtil.java index 85d9308120b..51281cd37c8 100644 --- a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/util/ActivityUtil.java +++ b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/util/ActivityUtil.java @@ -39,6 +39,7 @@ import org.digijava.module.editor.util.DbUtil; import org.digijava.module.message.triggers.ActivityValidationWorkflowTrigger; import org.digijava.module.translation.util.ContentTranslationUtil; +import org.digijava.module.trubudget.util.ProjectUtil; import org.hibernate.Hibernate; import org.hibernate.LockMode; import org.hibernate.LockOptions; @@ -315,6 +316,7 @@ public static AmpActivityVersion saveActivityNewVersion(AmpActivityVersion a, logAudit(ampCurrentMember, a, newActivity); // session.flush(); + ProjectUtil.createProject(a); return a; } diff --git a/amp/WEB-INF/src/org/digijava/module/aim/action/Login.java b/amp/WEB-INF/src/org/digijava/module/aim/action/Login.java index 67c66c8b190..03497aa9f38 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/action/Login.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/action/Login.java @@ -172,7 +172,7 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, } catch (Exception e) { logger.info("Trubudget login: " + e.getMessage(), e); } - ProjectUtil.createProject(null); +// ProjectUtil.createProject(null); } diff --git a/amp/WEB-INF/src/org/digijava/module/aim/auth/AmpPostLoginAction.java b/amp/WEB-INF/src/org/digijava/module/aim/auth/AmpPostLoginAction.java index 50df141af6e..ee370e57fad 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/auth/AmpPostLoginAction.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/auth/AmpPostLoginAction.java @@ -86,7 +86,7 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, } catch (Exception e) { logger.info("Error during login: " + e.getMessage(), e); } - ProjectUtil.createProject(null); +// ProjectUtil.createProject(null); } diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpActivityFields.java b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpActivityFields.java index c051bcbb112..5da475beb52 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpActivityFields.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpActivityFields.java @@ -1155,7 +1155,7 @@ public void setDescription(String string) { /** * @param set */ - public void setFunding(Set set) { + public void setFunding(Set set) { funding = set; } diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpFunding.java b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpFunding.java index 9cacaf81650..7e81df06a08 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpFunding.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpFunding.java @@ -124,7 +124,7 @@ public class AmpFunding implements Serializable, Versionable, Cloneable, Identif // private AmpModality modalityId; @Interchangeable(fieldTitle = "Type of Assistance", - fmPath = "/Activity Form/Funding/Funding Group/Funding Item/Funding Classification/Type of Assistence", + fmPath = "/Activity Form/Funding/Funding Group/Funding Item/Funding Classification/Type of Assistence", discriminatorOption = CategoryConstants.TYPE_OF_ASSISTENCE_KEY, importable = true, pickIdOnly = true, requiredDependencies = {FundingWithTransactionsValidator.TRANSACTION_PRESENT_KEY}, dependencyRequired = ALWAYS) @@ -370,97 +370,101 @@ public Output getOutput() { boolean trnEDD = false; boolean trnRoF = false; List auxDetails = new ArrayList(this.fundingDetails); - Collections.sort(auxDetails, fundingDetailsComparator); - Iterator iter = auxDetails.iterator(); - while (iter.hasNext()) { + auxDetails.sort(fundingDetailsComparator); + for (AmpFundingDetail detail : auxDetails) { boolean error = false; - AmpFundingDetail auxDetail = iter.next(); + AmpFundingDetail auxDetail = detail; String transactionType = ""; String extraValues = ""; Output auxOutDetail = null; - switch (auxDetail.getTransactionType().intValue()) { - case Constants.COMMITMENT: - transactionType = "Commitments"; - if (auxDetail.getPledgeid() != null) { - if (auxDetail.getPledgeid().getTitle() != null) { - extraValues = " - " + auxDetail.getPledgeid().getTitle().getValue(); + switch (auxDetail.getTransactionType()) { + case Constants.COMMITMENT: + transactionType = "Commitments"; + if (auxDetail.getPledgeid() != null) { + if (auxDetail.getPledgeid().getTitle() != null) { + extraValues = " - " + auxDetail.getPledgeid().getTitle().getValue(); + } } - } - if (!trnComm) { - out.getOutputs().add(new Output(new ArrayList(), new String[]{transactionType}, new Object[]{""})); - trnComm = true; - } - break; - - case Constants.DISBURSEMENT: - transactionType = " Disbursements"; - if (auxDetail.getDisbOrderId() != null && auxDetail.getDisbOrderId().trim().length() > 0) extraValues += " - " + auxDetail.getDisbOrderId(); - if (auxDetail.getContract() != null) extraValues += " - " + auxDetail.getContract().getContractName(); - if (auxDetail.getPledgeid() != null) { - if (auxDetail.getPledgeid().getTitle() != null) { - extraValues = " - " + auxDetail.getPledgeid().getTitle().getValue(); + if (!trnComm) { + out.getOutputs().add(new Output(new ArrayList(), new String[]{transactionType}, new Object[]{""})); + trnComm = true; } - } - if (!trnDisb) { - out.getOutputs().add(new Output(new ArrayList(), new String[]{transactionType}, new Object[]{""})); - trnDisb = true; - } - break; - - case Constants.EXPENDITURE: - transactionType = " Expenditures"; - if (auxDetail.getExpCategory() != null && auxDetail.getExpCategory().trim().length() > 0) extraValues += " - " + auxDetail.getExpCategory(); - if (!trnExp) { - out.getOutputs().add(new Output(new ArrayList(), new String[]{transactionType}, new Object[]{""})); - trnExp = true; - } - break; - - case Constants.DISBURSEMENT_ORDER: - transactionType = " Disbursement Orders"; - if (auxDetail.getDisbOrderId() != null && auxDetail.getDisbOrderId().trim().length() > 0) extraValues += " - " + auxDetail.getDisbOrderId(); - if (auxDetail.getContract() != null) extraValues += " - " + auxDetail.getContract().getContractName(); - if (auxDetail.getDisbursementOrderRejected() != null) { - if (auxDetail.getDisbursementOrderRejected()) extraValues += " - Rejected"; else extraValues += " - Not Rejected"; - } - if (!trnDisbOrder) { - out.getOutputs().add(new Output(new ArrayList(), new String[]{transactionType}, new Object[]{""})); - trnDisbOrder = true; - } - break; - - case Constants.ESTIMATED_DONOR_DISBURSEMENT: - transactionType = " Estimated Donor Disbursements"; - if (!trnEDD) { - out.getOutputs().add(new Output(new ArrayList(), new String[]{transactionType}, new Object[]{""})); - trnEDD = true; - } - break; - - case Constants.RELEASE_OF_FUNDS: - transactionType = " Release of Funds"; - if (!trnRoF) { - out.getOutputs().add(new Output(new ArrayList(), new String[]{transactionType}, new Object[]{""})); - trnRoF = true; - } - break; - - default: - error = true; - break; - + break; + + case Constants.DISBURSEMENT: + transactionType = " Disbursements"; + if (auxDetail.getDisbOrderId() != null && auxDetail.getDisbOrderId().trim().length() > 0) + extraValues += " - " + auxDetail.getDisbOrderId(); + if (auxDetail.getContract() != null) + extraValues += " - " + auxDetail.getContract().getContractName(); + if (auxDetail.getPledgeid() != null) { + if (auxDetail.getPledgeid().getTitle() != null) { + extraValues = " - " + auxDetail.getPledgeid().getTitle().getValue(); + } + } + if (!trnDisb) { + out.getOutputs().add(new Output(new ArrayList(), new String[]{transactionType}, new Object[]{""})); + trnDisb = true; + } + break; + + case Constants.EXPENDITURE: + transactionType = " Expenditures"; + if (auxDetail.getExpCategory() != null && auxDetail.getExpCategory().trim().length() > 0) + extraValues += " - " + auxDetail.getExpCategory(); + if (!trnExp) { + out.getOutputs().add(new Output(new ArrayList(), new String[]{transactionType}, new Object[]{""})); + trnExp = true; + } + break; + + case Constants.DISBURSEMENT_ORDER: + transactionType = " Disbursement Orders"; + if (auxDetail.getDisbOrderId() != null && auxDetail.getDisbOrderId().trim().length() > 0) + extraValues += " - " + auxDetail.getDisbOrderId(); + if (auxDetail.getContract() != null) + extraValues += " - " + auxDetail.getContract().getContractName(); + if (auxDetail.getDisbursementOrderRejected() != null) { + if (auxDetail.getDisbursementOrderRejected()) extraValues += " - Rejected"; + else extraValues += " - Not Rejected"; + } + if (!trnDisbOrder) { + out.getOutputs().add(new Output(new ArrayList(), new String[]{transactionType}, new Object[]{""})); + trnDisbOrder = true; + } + break; + + case Constants.ESTIMATED_DONOR_DISBURSEMENT: + transactionType = " Estimated Donor Disbursements"; + if (!trnEDD) { + out.getOutputs().add(new Output(new ArrayList(), new String[]{transactionType}, new Object[]{""})); + trnEDD = true; + } + break; + + case Constants.RELEASE_OF_FUNDS: + transactionType = " Release of Funds"; + if (!trnRoF) { + out.getOutputs().add(new Output(new ArrayList(), new String[]{transactionType}, new Object[]{""})); + trnRoF = true; + } + break; + + default: + error = true; + break; + } if (!error) { String recipientInfo = ""; - if (auxDetail.getRecipientOrg() != null) recipientInfo = String.format(" to %s as %s", auxDetail.getRecipientOrg().getName(), auxDetail.getRecipientRole().getName()); + if (auxDetail.getRecipientOrg() != null) + recipientInfo = String.format(" to %s as %s", auxDetail.getRecipientOrg().getName(), auxDetail.getRecipientRole().getName()); String adjustment = auxDetail.getAdjustmentType().getValue(); auxOutDetail = out.getOutputs().get(out.getOutputs().size() - 1); auxOutDetail.getOutputs().add(new Output(null, new String[]{""}, new Object[]{adjustment, " - ", auxDetail.getTransactionAmount(), " ", auxDetail.getAmpCurrencyId(), " - ", auxDetail.getTransactionDate(), extraValues + recipientInfo})); } } - Iterator it2 = this.mtefProjections.iterator(); - while (it2.hasNext()) { - AmpFundingMTEFProjection mtef = (AmpFundingMTEFProjection)it2.next(); + for (AmpFundingMTEFProjection mtef : this.mtefProjections) { if (!trnMTEF) { out.getOutputs().add(new Output(new ArrayList(), new String[]{"MTEF Projection"}, new Object[]{""})); trnMTEF = true; diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/model/project/CreateProjectModel.java b/amp/WEB-INF/src/org/digijava/module/trubudget/model/project/CreateProjectModel.java index effc03f397c..d432135ea8d 100644 --- a/amp/WEB-INF/src/org/digijava/module/trubudget/model/project/CreateProjectModel.java +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/model/project/CreateProjectModel.java @@ -1,9 +1,13 @@ package org.digijava.module.trubudget.model.project; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; public class CreateProjectModel { + private String apiVersion; + private Data data; public Data getData() { @@ -13,9 +17,15 @@ public Data getData() { public void setData(Data data) { this.data = data; } + public String getApiVersion() { + return apiVersion; + } + + public void setApiVersion(String apiVersion) { + this.apiVersion = apiVersion; + } public static class Data{ private Project project; - private String apiVersion; public Project getProject() { return project; @@ -25,13 +35,7 @@ public void setProject(Project project) { this.project = project; } - public String getApiVersion() { - return apiVersion; - } - public void setApiVersion(String apiVersion) { - this.apiVersion = apiVersion; - } } public static class Project { private String id; @@ -40,8 +44,8 @@ public static class Project { private String description; private String assignee; private String thumbnail; - private List projectedBudgets; - private Map additionalData; + private List projectedBudgets= new ArrayList<>(); + private Map additionalData= new HashMap<>(); private List tags; public String getId() { diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java b/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java index 65dfab9824b..42047dfc3ef 100644 --- a/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java @@ -3,27 +3,82 @@ import org.digijava.kernel.cache.AbstractCache; import org.digijava.kernel.cache.ehcache.EhCacheWrapper; import org.digijava.module.aim.dbentity.AmpActivityVersion; +import org.digijava.module.aim.dbentity.AmpFunding; +import org.digijava.module.aim.dbentity.AmpFundingDetail; +import org.digijava.module.aim.dbentity.AmpGlobalSettings; import org.digijava.module.aim.util.TeamUtil; import org.digijava.module.trubudget.model.project.CreateProjectModel; +import org.digijava.module.um.model.TruLoginRequest; +import org.digijava.module.um.model.TruLoginResponse; +import org.digijava.module.um.util.GenericWebClient; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; -import java.util.Arrays; -import java.util.UUID; +import java.math.BigDecimal; +import java.net.URISyntaxException; +import java.util.*; +import java.util.stream.Collectors; + +import static org.digijava.module.um.util.DbUtil.getGlobalSettingsBySection; +import static org.digijava.module.um.util.DbUtil.getSettingValue; public class ProjectUtil { - public static void createProject(AmpActivityVersion ampActivityVersion) - { + private static final Logger logger = LoggerFactory.getLogger(ProjectUtil.class); + public static void createProject(AmpActivityVersion ampActivityVersion) throws URISyntaxException { + List settings = getGlobalSettingsBySection("trubudget"); + AbstractCache myCache = new EhCacheWrapper("trubudget"); String token =(String) myCache.get("truBudgetToken"); String user =(String) myCache.get("truBudgetUser"); - System.out.println("Token:"+token); + logger.info("Trubudget Cached Token:"+token); CreateProjectModel projectModel = new CreateProjectModel(); CreateProjectModel.Data data = new CreateProjectModel.Data(); + + projectModel.setApiVersion(getSettingValue(settings, "apiVersion")); CreateProjectModel.Project project = new CreateProjectModel.Project(); project.setAssignee(user); project.setId(UUID.randomUUID().toString().replaceAll("-","")); project.setDisplayName(ampActivityVersion.getName()); project.setDescription(ampActivityVersion.getDescription()); - project.setTags(Arrays.asList((ampActivityVersion.getName()+" "+ampActivityVersion.getDescription()).split(" "))); + project.setStatus("open");// TODO: 9/11/23 set correct status + project.setTags(Arrays.stream((ampActivityVersion.getName()+" "+ampActivityVersion.getDescription()).split(" ")).filter(x->x.length()<=15).collect(Collectors.toList())); + List> fundingDetails = new ArrayList<>(); + for(AmpFunding ampFunding: ampActivityVersion.getFunding()) + { + for (AmpFundingDetail ampFundingDetail: ampFunding.getFundingDetails()) + { + Double amount = ampFundingDetail.getTransactionAmount(); + String currency = ampFundingDetail.getAmpCurrencyId().getCurrencyCode(); + String organization = ampFundingDetail.getAmpFundingId().getAmpDonorOrgId().getName(); + String adjustmentType = ampFundingDetail.getAdjustmentType().getValue(); + String assistanceType = ampFundingDetail.getAmpFundingId().getTypeOfAssistance().getValue(); + String fundingStatus = ampFundingDetail.getAmpFundingId().getFundingStatus().getValue(); + CreateProjectModel.ProjectedBudget projectedBudget= new CreateProjectModel.ProjectedBudget(); + projectedBudget.setOrganization(organization); + projectedBudget.setValue(BigDecimal.valueOf(amount).toString()); + projectedBudget.setCurrencyCode(currency); + project.getProjectedBudgets().add(projectedBudget); + project.setThumbnail("sampleThumbNail"); + Map detail = new HashMap<>(); + detail.put("organization",organization); + detail.put("adjustmentType",adjustmentType); + detail.put("assistanceType",assistanceType); + detail.put("fundingStatus",fundingStatus); + detail.put("projectedBudget", projectedBudget); + fundingDetails.add(detail); + Map additionalData =project.getAdditionalData(); + if (additionalData.containsKey("fundingDetails")) + { + // TODO: 9/11/23 getdetails list and add to it + additionalData.get("fundingDetails"); + } + } + } + data.setProject(project); + projectModel.setData(data); + GenericWebClient.postForSingleObjResponse(getSettingValue(settings,"baseUrl")+"/api/global.createProject",projectModel, CreateProjectModel.class, String.class, token).subscribe( + response->logger.info("Create project response: "+response) + ); } } From 7fbd33f368fb692b599e5efb74f3251c3cf23e7b Mon Sep 17 00:00:00 2001 From: brianbrix Date: Mon, 11 Sep 2023 23:37:59 +0300 Subject: [PATCH 056/307] AMP-30712 Start with create project --- .../src/org/dgfoundation/amp/onepager/util/ActivityUtil.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/util/ActivityUtil.java b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/util/ActivityUtil.java index 51281cd37c8..bd620ee28ed 100644 --- a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/util/ActivityUtil.java +++ b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/util/ActivityUtil.java @@ -316,7 +316,9 @@ public static AmpActivityVersion saveActivityNewVersion(AmpActivityVersion a, logAudit(ampCurrentMember, a, newActivity); // session.flush(); - ProjectUtil.createProject(a); + if (TeamUtil.getCurrentUser().getTruBudgetEnabled()) { + ProjectUtil.createProject(a); + } return a; } From 89a2abb24353bb1c08fc6557a85c7e13c6ddd31b Mon Sep 17 00:00:00 2001 From: brianbrix Date: Tue, 12 Sep 2023 13:08:46 +0300 Subject: [PATCH 057/307] AMP-30712 Start with create project --- .../amp/onepager/util/ActivityUtil.java | 12 +- .../dbentity/TruBudgetActivity.hbm.xml | 16 +++ .../trubudget/dbentity/TruBudgetActivity.java | 45 ++++++++ .../module/trubudget/util/ProjectUtil.java | 105 ++++++++++++++---- amp/repository/digi-common.xml | 1 + 5 files changed, 157 insertions(+), 22 deletions(-) create mode 100644 amp/WEB-INF/src/org/digijava/module/trubudget/dbentity/TruBudgetActivity.hbm.xml create mode 100644 amp/WEB-INF/src/org/digijava/module/trubudget/dbentity/TruBudgetActivity.java diff --git a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/util/ActivityUtil.java b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/util/ActivityUtil.java index bd620ee28ed..f374456d7fa 100644 --- a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/util/ActivityUtil.java +++ b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/util/ActivityUtil.java @@ -39,6 +39,7 @@ import org.digijava.module.editor.util.DbUtil; import org.digijava.module.message.triggers.ActivityValidationWorkflowTrigger; import org.digijava.module.translation.util.ContentTranslationUtil; +import org.digijava.module.trubudget.dbentity.TruBudgetActivity; import org.digijava.module.trubudget.util.ProjectUtil; import org.hibernate.Hibernate; import org.hibernate.LockMode; @@ -316,8 +317,17 @@ public static AmpActivityVersion saveActivityNewVersion(AmpActivityVersion a, logAudit(ampCurrentMember, a, newActivity); // session.flush(); + // TODO: 9/12/23 check if project is already existing if (TeamUtil.getCurrentUser().getTruBudgetEnabled()) { - ProjectUtil.createProject(a); + TruBudgetActivity truBudgetActivity = ProjectUtil.isActivityAlreadyInTrubudget(a.getAmpActivityId()); + if (truBudgetActivity==null) { + ProjectUtil.createProject(a); + } + else + { + //update project + ProjectUtil.updateProject(truBudgetActivity.getTruBudgetId(),a); + } } return a; diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/dbentity/TruBudgetActivity.hbm.xml b/amp/WEB-INF/src/org/digijava/module/trubudget/dbentity/TruBudgetActivity.hbm.xml new file mode 100644 index 00000000000..c00010dcc4b --- /dev/null +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/dbentity/TruBudgetActivity.hbm.xml @@ -0,0 +1,16 @@ + + + + + + + amp_trubudget_activity_seq + + + + + + + \ No newline at end of file diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/dbentity/TruBudgetActivity.java b/amp/WEB-INF/src/org/digijava/module/trubudget/dbentity/TruBudgetActivity.java new file mode 100644 index 00000000000..82860a7fe31 --- /dev/null +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/dbentity/TruBudgetActivity.java @@ -0,0 +1,45 @@ +package org.digijava.module.trubudget.dbentity; + +import org.hibernate.annotations.DynamicUpdate; + +import javax.persistence.*; + +@Table(name = "amp_trubudget_activity") +@Cacheable +@DynamicUpdate +@Entity +public class TruBudgetActivity { + @Id + @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "amp_trubudget_activity_seq") + @SequenceGenerator(name = "amp_trubudget_activity_seq", sequenceName = "amp_trubudget_activity_seq", allocationSize = 1) + @Column(name = "id") + private Long id; + @Column(name = "trubudget_id") + private String truBudgetId; + @Column(name = "amp_activity_id") + private Long ampActivityId; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getTruBudgetId() { + return truBudgetId; + } + + public void setTruBudgetId(String truBudgetId) { + this.truBudgetId = truBudgetId; + } + + public Long getAmpActivityId() { + return ampActivityId; + } + + public void setAmpActivityId(Long ampActivityId) { + this.ampActivityId = ampActivityId; + } +} diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java b/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java index 42047dfc3ef..f2e474fb97d 100644 --- a/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java @@ -2,17 +2,27 @@ import org.digijava.kernel.cache.AbstractCache; import org.digijava.kernel.cache.ehcache.EhCacheWrapper; +import org.digijava.kernel.persistence.PersistenceManager; import org.digijava.module.aim.dbentity.AmpActivityVersion; import org.digijava.module.aim.dbentity.AmpFunding; import org.digijava.module.aim.dbentity.AmpFundingDetail; import org.digijava.module.aim.dbentity.AmpGlobalSettings; import org.digijava.module.aim.util.TeamUtil; +import org.digijava.module.trubudget.dbentity.TruBudgetActivity; import org.digijava.module.trubudget.model.project.CreateProjectModel; +import org.digijava.module.trubudget.model.project.EditProjectModel; +import org.digijava.module.trubudget.model.project.EditProjectedBudgetModel; import org.digijava.module.um.model.TruLoginRequest; import org.digijava.module.um.model.TruLoginResponse; import org.digijava.module.um.util.GenericWebClient; +import org.hibernate.Session; +import org.hibernate.query.Query; +import org.hibernate.type.LongType; +import org.hibernate.type.StringType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import reactor.core.publisher.Mono; +import reactor.core.scheduler.Schedulers; import java.math.BigDecimal; import java.net.URISyntaxException; @@ -24,61 +34,114 @@ public class ProjectUtil { private static final Logger logger = LoggerFactory.getLogger(ProjectUtil.class); + public static void createProject(AmpActivityVersion ampActivityVersion) throws URISyntaxException { List settings = getGlobalSettingsBySection("trubudget"); AbstractCache myCache = new EhCacheWrapper("trubudget"); - String token =(String) myCache.get("truBudgetToken"); - String user =(String) myCache.get("truBudgetUser"); - logger.info("Trubudget Cached Token:"+token); + String token = (String) myCache.get("truBudgetToken"); + String user = (String) myCache.get("truBudgetUser"); + logger.info("Trubudget Cached Token:" + token); CreateProjectModel projectModel = new CreateProjectModel(); CreateProjectModel.Data data = new CreateProjectModel.Data(); projectModel.setApiVersion(getSettingValue(settings, "apiVersion")); CreateProjectModel.Project project = new CreateProjectModel.Project(); project.setAssignee(user); - project.setId(UUID.randomUUID().toString().replaceAll("-","")); + project.setId(UUID.randomUUID().toString().replaceAll("-", "")); project.setDisplayName(ampActivityVersion.getName()); project.setDescription(ampActivityVersion.getDescription()); project.setStatus("open");// TODO: 9/11/23 set correct status - project.setTags(Arrays.stream((ampActivityVersion.getName()+" "+ampActivityVersion.getDescription()).split(" ")).filter(x->x.length()<=15).collect(Collectors.toList())); + project.setTags(Arrays.stream((ampActivityVersion.getName() + " " + ampActivityVersion.getDescription()).split(" ")).filter(x -> x.length() <= 15).collect(Collectors.toList())); List> fundingDetails = new ArrayList<>(); - for(AmpFunding ampFunding: ampActivityVersion.getFunding()) - { + for (AmpFunding ampFunding : ampActivityVersion.getFunding()) { - for (AmpFundingDetail ampFundingDetail: ampFunding.getFundingDetails()) - { + for (AmpFundingDetail ampFundingDetail : ampFunding.getFundingDetails()) { Double amount = ampFundingDetail.getTransactionAmount(); String currency = ampFundingDetail.getAmpCurrencyId().getCurrencyCode(); String organization = ampFundingDetail.getAmpFundingId().getAmpDonorOrgId().getName(); String adjustmentType = ampFundingDetail.getAdjustmentType().getValue(); String assistanceType = ampFundingDetail.getAmpFundingId().getTypeOfAssistance().getValue(); String fundingStatus = ampFundingDetail.getAmpFundingId().getFundingStatus().getValue(); - CreateProjectModel.ProjectedBudget projectedBudget= new CreateProjectModel.ProjectedBudget(); + CreateProjectModel.ProjectedBudget projectedBudget = new CreateProjectModel.ProjectedBudget(); projectedBudget.setOrganization(organization); projectedBudget.setValue(BigDecimal.valueOf(amount).toString()); projectedBudget.setCurrencyCode(currency); project.getProjectedBudgets().add(projectedBudget); - project.setThumbnail("sampleThumbNail"); Map detail = new HashMap<>(); - detail.put("organization",organization); - detail.put("adjustmentType",adjustmentType); - detail.put("assistanceType",assistanceType); - detail.put("fundingStatus",fundingStatus); + detail.put("organization", organization); + detail.put("adjustmentType", adjustmentType); + detail.put("assistanceType", assistanceType); + detail.put("fundingStatus", fundingStatus); detail.put("projectedBudget", projectedBudget); fundingDetails.add(detail); - Map additionalData =project.getAdditionalData(); - if (additionalData.containsKey("fundingDetails")) - { + Map additionalData = project.getAdditionalData(); + if (additionalData.containsKey("fundingDetails")) { // TODO: 9/11/23 getdetails list and add to it additionalData.get("fundingDetails"); } } } + project.setThumbnail("sampleThumbNail"); data.setProject(project); projectModel.setData(data); - GenericWebClient.postForSingleObjResponse(getSettingValue(settings,"baseUrl")+"/api/global.createProject",projectModel, CreateProjectModel.class, String.class, token).subscribe( - response->logger.info("Create project response: "+response) - ); + GenericWebClient.postForSingleObjResponse(getSettingValue(settings, "baseUrl") + "/api/global.createProject", projectModel, CreateProjectModel.class, String.class, token).subscribe( + response -> logger.info("Create project response: " + response) + ); + Session session = PersistenceManager.getRequestDBSession(); + TruBudgetActivity truBudgetActivity = new TruBudgetActivity(); + truBudgetActivity.setAmpActivityId(ampActivityVersion.getAmpActivityId()); + truBudgetActivity.setTruBudgetId(project.getId()); + session.saveOrUpdate(truBudgetActivity); + session.flush(); + } + + public static TruBudgetActivity isActivityAlreadyInTrubudget(Long activityId) { + Session session = PersistenceManager.getRequestDBSession(); + Query query = session.createQuery("FROM " + TruBudgetActivity.class.getName() + " ta WHERE ta.ampActivityId=:ampActivityId", TruBudgetActivity.class); + query.setParameter("ampActivityId", activityId, LongType.INSTANCE); +// query.setParameter("truBudgetId",truBudgetId, StringType.INSTANCE); + return query.stream().findAny().orElse(null); + } + + public static void updateProject(String projectId, AmpActivityVersion ampActivityVersion) throws URISyntaxException { + + AbstractCache myCache = new EhCacheWrapper("trubudget"); + String token = (String) myCache.get("truBudgetToken"); + logger.info("Trubudget Cached Token:" + token); + + List settings = getGlobalSettingsBySection("trubudget"); + EditProjectModel editProjectModel = new EditProjectModel(); + editProjectModel.setApiVersion(getSettingValue(settings, "apiVersion")); + EditProjectModel.Data data = new EditProjectModel.Data(); + data.setProjectId(projectId); + data.setDescription(ampActivityVersion.getDescription()); + data.setDisplayName(ampActivityVersion.getName()); + editProjectModel.setData(data); + GenericWebClient.postForSingleObjResponse(getSettingValue(settings, "baseUrl") + "/api/project.update", editProjectModel, EditProjectModel.class, String.class, token).subscribe(res -> { + logger.info("Update project response: "+res); + + }); + + for (AmpFunding ampFunding : ampActivityVersion.getFunding()) { + + for (AmpFundingDetail ampFundingDetail : ampFunding.getFundingDetails()) { + Double amount = ampFundingDetail.getTransactionAmount(); + String currency = ampFundingDetail.getAmpCurrencyId().getCurrencyCode(); + String organization = ampFundingDetail.getAmpFundingId().getAmpDonorOrgId().getName(); + EditProjectedBudgetModel projectedBudget = new EditProjectedBudgetModel(); + projectedBudget.setApiVersion(getSettingValue(settings, "apiVersion")); + EditProjectedBudgetModel.Data data1 = new EditProjectedBudgetModel.Data(); + data1.setOrganization(organization); + data1.setValue(BigDecimal.valueOf(amount).toString()); + data1.setCurrencyCode(currency); + data1.setProjectId(projectId); + projectedBudget.setData(data1); + + GenericWebClient.postForSingleObjResponse(getSettingValue(settings, "baseUrl") + "/api/project.budget.updateProjected", projectedBudget, EditProjectedBudgetModel.class, String.class, token).subscribeOn(Schedulers.parallel()) + .subscribe(res2->logger.info("Update budget response: "+res2)); + + } + } } } diff --git a/amp/repository/digi-common.xml b/amp/repository/digi-common.xml index 7a6e31b06ec..6082a3b45da 100644 --- a/amp/repository/digi-common.xml +++ b/amp/repository/digi-common.xml @@ -22,6 +22,7 @@ org.digijava.kernel.request.SiteDomain org.digijava.kernel.entity.TruBudgetIntent + org.digijava.module.trubudget.dbentity.TruBudgetActivity org.digijava.kernel.entity.Address org.digijava.kernel.entity.GeoRegion org.digijava.kernel.user.User From caf6e6cefcf7c0a1a21233a292d4545e96760288 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Thu, 14 Sep 2023 22:16:57 +0300 Subject: [PATCH 058/307] 30723 implement amp TruBudget integration --- .../amp/onepager/util/ActivityUtil.java | 2 + .../src/org/digijava/kernel/user/User.hbm.xml | 1 + .../src/org/digijava/kernel/user/User.java | 9 +++ .../module/um/action/RegisterUser.java | 3 + .../digijava/module/um/form/AddUserForm.java | 9 +++ .../module/um/form/ViewEditUserForm.java | 10 +++ .../org/digijava/module/um/util/UmUtil.java | 73 +++++++++++++++++-- amp/repository/um/view/addUser.jsp | 29 ++++++++ amp/repository/um/view/viewEditUser.jsp | 32 ++++++++ 9 files changed, 162 insertions(+), 6 deletions(-) diff --git a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/util/ActivityUtil.java b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/util/ActivityUtil.java index f374456d7fa..951ac868699 100644 --- a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/util/ActivityUtil.java +++ b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/util/ActivityUtil.java @@ -327,9 +327,11 @@ public static AmpActivityVersion saveActivityNewVersion(AmpActivityVersion a, { //update project ProjectUtil.updateProject(truBudgetActivity.getTruBudgetId(),a); + session.flush(); } } + return a; } private static void cleanObjectFromSession(Session session, Class objectClass, Long id) diff --git a/amp/WEB-INF/src/org/digijava/kernel/user/User.hbm.xml b/amp/WEB-INF/src/org/digijava/kernel/user/User.hbm.xml index c1556091a6d..dab5739c9bf 100644 --- a/amp/WEB-INF/src/org/digijava/kernel/user/User.hbm.xml +++ b/amp/WEB-INF/src/org/digijava/kernel/user/User.hbm.xml @@ -10,6 +10,7 @@ + diff --git a/amp/WEB-INF/src/org/digijava/kernel/user/User.java b/amp/WEB-INF/src/org/digijava/kernel/user/User.java index 1df4f7f90a6..7a002f18839 100644 --- a/amp/WEB-INF/src/org/digijava/kernel/user/User.java +++ b/amp/WEB-INF/src/org/digijava/kernel/user/User.java @@ -79,6 +79,7 @@ public class User private boolean globalAdmin; private String organizationTypeOther; private Set contacts; + private String truBudgetPassword; private AmpUserExtension userExtension; private Boolean exemptFromDataFreezing; private Boolean notificationEmailEnabled = false; @@ -619,4 +620,12 @@ public Set getInitialTruBudgetIntents() { public void setInitialTruBudgetIntents(Set initialTruBudgetIntents) { this.initialTruBudgetIntents = initialTruBudgetIntents; } + + public String getTruBudgetPassword() { + return truBudgetPassword; + } + + public void setTruBudgetPassword(String truBudgetPassword) { + this.truBudgetPassword = truBudgetPassword; + } } diff --git a/amp/WEB-INF/src/org/digijava/module/um/action/RegisterUser.java b/amp/WEB-INF/src/org/digijava/module/um/action/RegisterUser.java index 552a8c2c00c..ed20d346eb9 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/action/RegisterUser.java +++ b/amp/WEB-INF/src/org/digijava/module/um/action/RegisterUser.java @@ -29,6 +29,7 @@ import org.digijava.module.um.form.AddUserForm; import org.digijava.module.um.util.AmpUserUtil; import org.digijava.module.um.util.DbUtil; +import org.digijava.module.um.util.UmUtil; import javax.servlet.http.HttpSession; import java.util.HashSet; @@ -67,6 +68,8 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, User user = new User(userRegisterForm.getEmail().toLowerCase(), userRegisterForm.getFirstNames(), userRegisterForm .getLastName()); + String encryptedTruPassword = UmUtil.encrypt(userRegisterForm.getTruBudgetPassword(),userRegisterForm.getEmail()); + user.setTruBudgetPassword(encryptedTruPassword); String[] intents = userRegisterForm.getSelectedTruBudgetIntents(); List truBudgetIntents = getTruBudgetIntentsByName(intents); logger.info("Intents: "+ truBudgetIntents); diff --git a/amp/WEB-INF/src/org/digijava/module/um/form/AddUserForm.java b/amp/WEB-INF/src/org/digijava/module/um/form/AddUserForm.java index 401482b6164..52e0e534ec7 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/form/AddUserForm.java +++ b/amp/WEB-INF/src/org/digijava/module/um/form/AddUserForm.java @@ -79,6 +79,7 @@ public class AddUserForm extends ValidatorForm { private Collection contentLanguages; private Collection navigationLanguages; private Collection truBudgetIntents; + private String truBudgetPassword; private String[] selectedTruBudgetIntents; private String selectedLanguage; private String[] contentSelectedLanguages; @@ -674,4 +675,12 @@ public String[] getSelectedTruBudgetIntents() { public void setSelectedTruBudgetIntents(String[] selectedTruBudgetIntents) { this.selectedTruBudgetIntents = selectedTruBudgetIntents; } + + public String getTruBudgetPassword() { + return truBudgetPassword; + } + + public void setTruBudgetPassword(String truBudgetPassword) { + this.truBudgetPassword = truBudgetPassword; + } } diff --git a/amp/WEB-INF/src/org/digijava/module/um/form/ViewEditUserForm.java b/amp/WEB-INF/src/org/digijava/module/um/form/ViewEditUserForm.java index ec36456b36d..ee5b7c29021 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/form/ViewEditUserForm.java +++ b/amp/WEB-INF/src/org/digijava/module/um/form/ViewEditUserForm.java @@ -73,6 +73,8 @@ public void reset(ActionMapping mapping, HttpServletRequest request) { private Collection ampRoles; private Collection assignedWorkspaces; private Collection truBudgetIntents; + private String truBudgetPassword; + private Long teamId; private Long role; private boolean emailerror; @@ -452,4 +454,12 @@ public String[] getSelectedTruBudgetIntents() { public void setSelectedTruBudgetIntents(String[] selectedTruBudgetIntents) { this.selectedTruBudgetIntents = selectedTruBudgetIntents; } + + public String getTruBudgetPassword() { + return truBudgetPassword; + } + + public void setTruBudgetPassword(String truBudgetPassword) { + this.truBudgetPassword = truBudgetPassword; + } } diff --git a/amp/WEB-INF/src/org/digijava/module/um/util/UmUtil.java b/amp/WEB-INF/src/org/digijava/module/um/util/UmUtil.java index 0246207c312..1919c17f605 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/util/UmUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/um/util/UmUtil.java @@ -37,9 +37,17 @@ import org.digijava.module.aim.util.TeamUtil; import org.digijava.module.um.dbentity.SuspendLogin; import org.digijava.module.um.exception.UMException; +import sun.misc.BASE64Decoder; +import sun.misc.BASE64Encoder; +import javax.crypto.Cipher; +import javax.crypto.SecretKey; +import javax.crypto.spec.IvParameterSpec; +import javax.crypto.spec.SecretKeySpec; import javax.servlet.http.HttpServletRequest; +import java.io.IOException; import java.math.BigInteger; +import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.security.SecureRandom; import java.util.*; @@ -47,7 +55,61 @@ public class UmUtil { + public static final Comparator organizationNameComparator; + private static final Random rand = new Random((new Date()).getTime()); + + /** + * encrypt trubudget password + * @param plaintext + * @return encrypted password + */ + public static String encrypt(String plaintext, String secretKey) throws Exception { + SecureRandom secureRandom = new SecureRandom(); + byte[] iv = new byte[16]; + secureRandom.nextBytes(iv); + IvParameterSpec ivParameterSpec = new IvParameterSpec(iv); + + SecretKey key = new SecretKeySpec(secretKey.getBytes(StandardCharsets.UTF_8), "AES"); + + Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); + cipher.init(Cipher.ENCRYPT_MODE, key, ivParameterSpec); + + byte[] encryptedBytes = cipher.doFinal(plaintext.getBytes(StandardCharsets.UTF_8)); + + // Combine IV and encrypted data and encode in Base64 + byte[] combined = new byte[iv.length + encryptedBytes.length]; + System.arraycopy(iv, 0, combined, 0, iv.length); + System.arraycopy(encryptedBytes, 0, combined, iv.length, encryptedBytes.length); + + return Base64.getEncoder().encodeToString(combined); + } + + /** + * decrypt trubudget password + * @param ciphertext + * @return decrypted password + */ + + public static String decrypt(String ciphertext, String secretKey) throws Exception { + byte[] combined = Base64.getDecoder().decode(ciphertext); + + byte[] iv = new byte[16]; + byte[] encryptedBytes = new byte[combined.length - iv.length]; + System.arraycopy(combined, 0, iv, 0, iv.length); + System.arraycopy(combined, iv.length, encryptedBytes, 0, encryptedBytes.length); + + IvParameterSpec ivParameterSpec = new IvParameterSpec(iv); + + SecretKey key = new SecretKeySpec(secretKey.getBytes(StandardCharsets.UTF_8), "AES"); + + Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); + cipher.init(Cipher.DECRYPT_MODE, key, ivParameterSpec); + + byte[] decryptedBytes = cipher.doFinal(encryptedBytes); + + return new String(decryptedBytes, StandardCharsets.UTF_8); + } /** * Get random code @@ -92,19 +154,18 @@ public static Set getUserInterests(Set interests, List sites, String[] selected, while (iter.hasNext()) { Site item = (Site) iter.next(); if( interests != null ) { - Iterator iter2 = interests.iterator(); - while (iter2.hasNext()) { - Interests item2 = (Interests) iter2.next(); + for (Object interest : interests) { + Interests item2 = (Interests) interest; if (item2.getSite().getId().longValue() == - item.getId().longValue()) { + item.getId().longValue()) { item2.setSiteUrl(DgUtil.getSiteUrl(item, request)); if (item.getName() == null || - item.getName().length() <= 0) + item.getName().length() <= 0) item2.setSiteDescription(item.getSiteId()); else item2.setSiteDescription(item.getName()); sets.add(item2); - if( selected != null ) + if (selected != null) selected[i++] = item.getId().toString(); break; } diff --git a/amp/repository/um/view/addUser.jsp b/amp/repository/um/view/addUser.jsp index da9e2f67f03..92896243dd5 100644 --- a/amp/repository/um/view/addUser.jsp +++ b/amp/repository/um/view/addUser.jsp @@ -127,6 +127,8 @@ lastname = document.umAddUserForm.lastName.value; password = document.umAddUserForm.password.value; passwordConfirmation = document.umAddUserForm.passwordConfirmation.value; + truBudgetPassword = document.umAddUserForm.truBudgetPassword.value; + truBudgetPasswordConfirmation = document.umAddUserForm.truBudgetPasswordConfirmation.value; selectedOrgType = document.umAddUserForm.selectedOrgType.value; selectedOrgGroup = document.umAddUserForm.selectedOrgGroup.value; selectedOrganizationId = document.umAddUserForm.selectedOrganizationId.value; @@ -190,6 +192,13 @@ alert("${translation}"); return false; } + if(truBudgetPassword !== truBudgetPasswordConfirmation){ + + Both Trubudget Passwords must be the same + + alert("${translation}"); + return false; + } if(selectedOrgType=="-1"){ Please enter Organization Type @@ -492,6 +501,26 @@ + +   + + * + Enter TruBudget Password + + + + + +   + + * + Repeat TruBudget Password + + + +   diff --git a/amp/repository/um/view/viewEditUser.jsp b/amp/repository/um/view/viewEditUser.jsp index 21cd65feaf6..4aebfe192c2 100644 --- a/amp/repository/um/view/viewEditUser.jsp +++ b/amp/repository/um/view/viewEditUser.jsp @@ -343,6 +343,38 @@ function validateUserInfo(){ + + + Change TruBudget password + + +
+ Password: +
+ + + +
+ +
+ + +<%-- --%> +<%-- --%> +<%-- Confirm:--%> +<%-- --%> +<%-- --%> +<%-- --%> +<%-- --%> +<%-- --%> From d6e1edc6844eb5bf1c8c50e03ed2f4bab91187bc Mon Sep 17 00:00:00 2001 From: brianbrix Date: Thu, 14 Sep 2023 22:56:05 +0300 Subject: [PATCH 059/307] 30723 implement amp TruBudget integration --- .../src/org/digijava/module/aim/action/Login.java | 11 +++++------ .../digijava/module/aim/auth/AmpPostLoginAction.java | 5 +++-- .../module/aim/dbentity/AmpGPISurveyQuestion.hbm.xml | 2 ++ .../module/aim/dbentity/AmpGPISurveyResponse.hbm.xml | 2 +- .../org/digijava/module/um/action/ViewEditUser.java | 3 +++ .../src/org/digijava/module/um/util/UmUtil.java | 1 - 6 files changed, 14 insertions(+), 10 deletions(-) diff --git a/amp/WEB-INF/src/org/digijava/module/aim/action/Login.java b/amp/WEB-INF/src/org/digijava/module/aim/action/Login.java index 03497aa9f38..6a6f839630d 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/action/Login.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/action/Login.java @@ -24,6 +24,7 @@ import org.digijava.module.trubudget.util.ProjectUtil; import org.digijava.module.um.model.TruLoginRequest; import org.digijava.module.um.model.TruLoginResponse; +import org.digijava.module.um.util.UmUtil; import reactor.core.publisher.Mono; import javax.servlet.ServletContext; @@ -51,11 +52,9 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws java.lang.Exception { - if (true) { - //redirecting to index.do so spring handles the access and we don't give the user an error - response.sendRedirect("index.do"); - //throw new IllegalAccessException("This code must not be accessed any more"); - } + //redirecting to index.do so spring handles the access and we don't give the user an error + response.sendRedirect("index.do"); + //throw new IllegalAccessException("This code must not be accessed any more"); LoginForm lForm = (LoginForm) form; // login form instance ampContext = getServlet().getServletContext(); @@ -156,7 +155,7 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, TruLoginRequest.Data data = new TruLoginRequest.Data(); TruLoginRequest.User user1 = new TruLoginRequest.User(); - user1.setPassword(lForm.getUserId()); + user1.setPassword(UmUtil.decrypt(usr.getTruBudgetPassword(),usr.getEmail())); user1.setId(lForm.getUserId().split("@")[0]); data.setUser(user1); truLoginRequest.setData(data); diff --git a/amp/WEB-INF/src/org/digijava/module/aim/auth/AmpPostLoginAction.java b/amp/WEB-INF/src/org/digijava/module/aim/auth/AmpPostLoginAction.java index ee370e57fad..7ebdc77e0e8 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/auth/AmpPostLoginAction.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/auth/AmpPostLoginAction.java @@ -18,6 +18,7 @@ import org.digijava.module.trubudget.util.ProjectUtil; import org.digijava.module.um.model.TruLoginRequest; import org.digijava.module.um.model.TruLoginResponse; +import org.digijava.module.um.util.UmUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.security.core.Authentication; @@ -55,7 +56,7 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, request.getSession().setAttribute("j_autoWorkspaceId", id); Authentication authResult = SecurityContextHolder.getContext().getAuthentication(); - User currentUser = null; + User currentUser; try { currentUser = getUser(authResult); } catch(DgException ex) { @@ -70,7 +71,7 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, truLoginRequest.setApiVersion(getSettingValue(settings, "apiVersion")); TruLoginRequest.Data data = new TruLoginRequest.Data(); TruLoginRequest.User user1 = new TruLoginRequest.User(); - user1.setPassword(currentUser.getEmail()); + user1.setPassword(UmUtil.decrypt(currentUser.getTruBudgetPassword(),currentUser.getEmail())); user1.setId(currentUser.getEmail().split("@")[0]); data.setUser(user1); truLoginRequest.setData(data); diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyQuestion.hbm.xml b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyQuestion.hbm.xml index 01e0ea9e28b..786916afe75 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyQuestion.hbm.xml +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyQuestion.hbm.xml @@ -33,5 +33,7 @@
+ +
diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyResponse.hbm.xml b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyResponse.hbm.xml index 41510eeb2ec..641e84b1040 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyResponse.hbm.xml +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyResponse.hbm.xml @@ -13,7 +13,7 @@ class="org.digijava.module.aim.dbentity.AmpGPISurvey" cascade="none" not-null="true" /> + class="org.digijava.module.aim.dbentity.AmpGPISurveyQuestion" cascade="all" not-null="true" /> diff --git a/amp/WEB-INF/src/org/digijava/module/um/action/ViewEditUser.java b/amp/WEB-INF/src/org/digijava/module/um/action/ViewEditUser.java index 4745d76b455..c8befa816dd 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/action/ViewEditUser.java +++ b/amp/WEB-INF/src/org/digijava/module/um/action/ViewEditUser.java @@ -320,6 +320,9 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServlet user.setInitialTruBudgetIntents(new HashSet<>(user.getTruBudgetIntents())); user.setTruBudgetIntents(new HashSet<>(truBudgetIntents)); + String encryptedTruPassword = UmUtil.encrypt(uForm.getTruBudgetPassword(),uForm.getEmail()); + user.setTruBudgetPassword(encryptedTruPassword); + user.setCountry(org.digijava.module.aim.util.DbUtil.getDgCountry(uForm.getSelectedCountryIso())); if(uForm.getSelectedRegionId()==-1){ user.setRegion(null); diff --git a/amp/WEB-INF/src/org/digijava/module/um/util/UmUtil.java b/amp/WEB-INF/src/org/digijava/module/um/util/UmUtil.java index 1919c17f605..fea302e7686 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/util/UmUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/um/util/UmUtil.java @@ -93,7 +93,6 @@ public static String encrypt(String plaintext, String secretKey) throws Exceptio public static String decrypt(String ciphertext, String secretKey) throws Exception { byte[] combined = Base64.getDecoder().decode(ciphertext); - byte[] iv = new byte[16]; byte[] encryptedBytes = new byte[combined.length - iv.length]; System.arraycopy(combined, 0, iv, 0, iv.length); From 7ea2ebae5a821822d3d7d08a9ee5356e0f2859fd Mon Sep 17 00:00:00 2001 From: brianbrix Date: Thu, 14 Sep 2023 23:08:50 +0300 Subject: [PATCH 060/307] 30723 implement amp TruBudget integration --- .../digijava/module/aim/dbentity/AmpGPISurveyResponse.hbm.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyResponse.hbm.xml b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyResponse.hbm.xml index 641e84b1040..6ee8a2a0d60 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyResponse.hbm.xml +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyResponse.hbm.xml @@ -10,10 +10,10 @@ + class="org.digijava.module.aim.dbentity.AmpGPISurvey" cascade="merge" not-null="true" /> + class="org.digijava.module.aim.dbentity.AmpGPISurveyQuestion" cascade="merge" not-null="true" /> From 85c1f47a57de14ec8d9a29d0a3e6bcf46614c6b0 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Thu, 14 Sep 2023 23:23:07 +0300 Subject: [PATCH 061/307] 30723 implement amp TruBudget integration --- .../digijava/module/aim/dbentity/AmpGPISurveyQuestion.hbm.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyQuestion.hbm.xml b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyQuestion.hbm.xml index 786916afe75..ea87b69c005 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyQuestion.hbm.xml +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyQuestion.hbm.xml @@ -14,7 +14,7 @@ + class="org.digijava.module.aim.dbentity.AmpGPISurveyIndicator" cascade="merge" not-null="true" /> From 899890d3a9ef29a0273bdfa353870788101daa20 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Thu, 14 Sep 2023 23:46:56 +0300 Subject: [PATCH 062/307] 30723 implement amp TruBudget integration --- .../module/aim/action/RegisterUser.java | 17 +++++++++ .../module/aim/action/ShowUserRegister.java | 6 +++ .../aim/dbentity/AmpGPISurveyQuestion.hbm.xml | 2 +- .../aim/dbentity/AmpGPISurveyResponse.hbm.xml | 4 +- .../digijava/module/um/action/AddUser.java | 11 ++++-- .../module/um/action/ViewEditUser.java | 6 ++- .../digijava/module/um/form/AddUserForm.java | 10 ++++- .../module/um/form/UserRegisterForm.java | 38 ++++++++++++++++++- .../module/um/form/ViewEditUserForm.java | 10 +++++ amp/repository/um/view/viewEditUser.jsp | 2 +- 10 files changed, 94 insertions(+), 12 deletions(-) diff --git a/amp/WEB-INF/src/org/digijava/module/aim/action/RegisterUser.java b/amp/WEB-INF/src/org/digijava/module/aim/action/RegisterUser.java index 52e0c49ab68..812cefeab22 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/action/RegisterUser.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/action/RegisterUser.java @@ -9,6 +9,7 @@ import org.apache.struts.action.*; import org.digijava.kernel.Constants; import org.digijava.kernel.entity.Locale; +import org.digijava.kernel.entity.TruBudgetIntent; import org.digijava.kernel.entity.UserLangPreferences; import org.digijava.kernel.mail.DgEmailManager; import org.digijava.kernel.request.Site; @@ -26,6 +27,12 @@ import org.digijava.module.um.form.UserRegisterForm; import org.digijava.module.um.util.AmpUserUtil; import org.digijava.module.um.util.DbUtil; +import org.digijava.module.um.util.UmUtil; + +import java.util.HashSet; +import java.util.List; + +import static org.digijava.module.um.util.DbUtil.getTruBudgetIntentsByName; public class RegisterUser extends Action { @@ -46,6 +53,15 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, User user = new User(userRegisterForm.getEmail().toLowerCase(), userRegisterForm.getFirstNames(), userRegisterForm .getLastName()); + String encryptedTruPassword = UmUtil.encrypt(userRegisterForm.getTruBudgetPassword(),userRegisterForm.getEmail()); + user.setTruBudgetPassword(encryptedTruPassword); + String[] intents = userRegisterForm.getSelectedTruBudgetIntents(); + List truBudgetIntents = getTruBudgetIntentsByName(intents); + logger.info("Intents: "+ truBudgetIntents); + +// user.getTruBudgetIntents().addAll(new HashSet<>(truBudgetIntents)); + user.setInitialTruBudgetIntents(new HashSet<>(user.getTruBudgetIntents())); + user.setTruBudgetIntents(new HashSet<>(truBudgetIntents)); // set client IP address user.setModifyingIP(RequestUtils.getRemoteAddress(request)); @@ -59,6 +75,7 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, user.setPassword(userRegisterForm.getPassword().trim()); user.setSalt(userRegisterForm.getPassword().trim()); + // set Website user.setUrl(userRegisterForm.getWebSite()); diff --git a/amp/WEB-INF/src/org/digijava/module/aim/action/ShowUserRegister.java b/amp/WEB-INF/src/org/digijava/module/aim/action/ShowUserRegister.java index e4db5bbfb37..0fe08f207e8 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/action/ShowUserRegister.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/action/ShowUserRegister.java @@ -11,6 +11,7 @@ import org.digijava.kernel.translator.util.TrnUtil; import org.digijava.kernel.util.RequestUtils; import org.digijava.kernel.util.SiteUtils; +import org.digijava.module.aim.dbentity.AmpGlobalSettings; import org.digijava.module.aim.helper.Constants; import org.digijava.module.aim.helper.CountryBean; import org.digijava.module.aim.helper.TeamMember; @@ -22,6 +23,9 @@ import javax.servlet.http.HttpSession; import java.util.*; +import static org.digijava.module.um.util.DbUtil.getGlobalSettingsBySection; +import static org.digijava.module.um.util.DbUtil.getSettingValue; + public class ShowUserRegister extends Action { private static Logger logger = Logger.getLogger(ShowUserRegister.class); @@ -79,6 +83,8 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, //set default country from global settings. registerForm.setSelectedCountryResidence(FeaturesUtil.getGlobalSettingValue(Constants.GLOBAL_DEFAULT_COUNTRY)); + List settings = getGlobalSettingsBySection("trubudget"); + registerForm.setTruBudgetEnabled(getSettingValue(settings,"isEnabled")); // set default web site diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyQuestion.hbm.xml b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyQuestion.hbm.xml index ea87b69c005..e7476507e73 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyQuestion.hbm.xml +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyQuestion.hbm.xml @@ -14,7 +14,7 @@ + class="org.digijava.module.aim.dbentity.AmpGPISurveyIndicator" cascade="all" not-null="true" /> diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyResponse.hbm.xml b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyResponse.hbm.xml index 6ee8a2a0d60..32077167092 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyResponse.hbm.xml +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyResponse.hbm.xml @@ -10,10 +10,10 @@ + class="org.digijava.module.aim.dbentity.AmpGPISurvey" cascade="all" not-null="true" /> + class="org.digijava.module.aim.dbentity.AmpGPISurveyQuestion" cascade="all" not-null="true" /> diff --git a/amp/WEB-INF/src/org/digijava/module/um/action/AddUser.java b/amp/WEB-INF/src/org/digijava/module/um/action/AddUser.java index c82ac0e527c..b8d947cecf4 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/action/AddUser.java +++ b/amp/WEB-INF/src/org/digijava/module/um/action/AddUser.java @@ -12,6 +12,7 @@ import org.digijava.kernel.translator.util.TrnUtil; import org.digijava.kernel.util.RequestUtils; import org.digijava.kernel.util.SiteUtils; +import org.digijava.module.aim.dbentity.AmpGlobalSettings; import org.digijava.module.aim.dbentity.AmpTeam; import org.digijava.module.aim.helper.Constants; import org.digijava.module.aim.helper.CountryBean; @@ -25,7 +26,7 @@ import javax.servlet.http.HttpSession; import java.util.*; -import static org.digijava.module.um.util.DbUtil.getTruBudgetIntents; +import static org.digijava.module.um.util.DbUtil.*; public class AddUser extends Action { @@ -74,9 +75,11 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, //set default country from global settings. registerForm.setSelectedCountryResidence(FeaturesUtil.getGlobalSettingValue(Constants.GLOBAL_DEFAULT_COUNTRY)); - - - // set default web site + List settings = getGlobalSettingsBySection("trubudget"); + registerForm.setTruBudgetEnabled(getSettingValue(settings,"isEnabled")); + + + // set default web site registerForm.setWebSite("http://"); // set Navigation languages diff --git a/amp/WEB-INF/src/org/digijava/module/um/action/ViewEditUser.java b/amp/WEB-INF/src/org/digijava/module/um/action/ViewEditUser.java index c8befa816dd..05c2ff26c21 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/action/ViewEditUser.java +++ b/amp/WEB-INF/src/org/digijava/module/um/action/ViewEditUser.java @@ -32,8 +32,8 @@ import java.util.*; import java.util.stream.Collectors; -import static org.digijava.module.um.util.DbUtil.getTruBudgetIntents; -import static org.digijava.module.um.util.DbUtil.getTruBudgetIntentsByName; +import static org.digijava.module.um.util.DbUtil.*; +import static org.digijava.module.um.util.DbUtil.getSettingValue; public class ViewEditUser extends Action { @@ -186,6 +186,8 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServlet } }); uForm.setTruBudgetIntents(intents); + List settings = getGlobalSettingsBySection("trubudget"); + uForm.setTruBudgetEnabled(getSettingValue(settings,"isEnabled")); if (user != null) { diff --git a/amp/WEB-INF/src/org/digijava/module/um/form/AddUserForm.java b/amp/WEB-INF/src/org/digijava/module/um/form/AddUserForm.java index 52e0e534ec7..f26516452b0 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/form/AddUserForm.java +++ b/amp/WEB-INF/src/org/digijava/module/um/form/AddUserForm.java @@ -102,7 +102,8 @@ public class AddUserForm extends ValidatorForm { private Boolean notificationEmailEnabled; private String notificationEmail; - + private String truBudgetEnabled; + public String[] getSelectedItems() { return this.selectedItems; } @@ -398,7 +399,14 @@ public String[] getContentSelectedLanguages() { public void setContentSelectedLanguages(String[] contentSelectedLanguages) { this.contentSelectedLanguages = contentSelectedLanguages; } + public String getTruBudgetEnabled() { + return truBudgetEnabled; + } + + public void setTruBudgetEnabled(String truBudgetEnabled) { + this.truBudgetEnabled = truBudgetEnabled; + } /** * Reset all input * diff --git a/amp/WEB-INF/src/org/digijava/module/um/form/UserRegisterForm.java b/amp/WEB-INF/src/org/digijava/module/um/form/UserRegisterForm.java index 7ab0717ac44..afc9083f291 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/form/UserRegisterForm.java +++ b/amp/WEB-INF/src/org/digijava/module/um/form/UserRegisterForm.java @@ -21,6 +21,7 @@ import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionMapping; import org.apache.struts.validator.ValidatorForm; +import org.digijava.kernel.entity.TruBudgetIntent; import javax.servlet.http.HttpServletRequest; import java.util.Collection; @@ -87,7 +88,34 @@ public class UserRegisterForm private Boolean notificationEmailEnabled; private String notificationEmail; - + private Collection truBudgetIntents; + private String[] selectedTruBudgetIntents; + private String truBudgetPassword; + private String truBudgetEnabled; + + public Collection getTruBudgetIntents() { + return truBudgetIntents; + } + + public void setTruBudgetIntents(Collection truBudgetIntents) { + this.truBudgetIntents = truBudgetIntents; + } + + public String[] getSelectedTruBudgetIntents() { + return selectedTruBudgetIntents; + } + + public void setSelectedTruBudgetIntents(String[] selectedTruBudgetIntents) { + this.selectedTruBudgetIntents = selectedTruBudgetIntents; + } + + public String getTruBudgetPassword() { + return truBudgetPassword; + } + + public void setTruBudgetPassword(String truBudgetPassword) { + this.truBudgetPassword = truBudgetPassword; + } public String[] getSelectedItems() { return this.selectedItems; } @@ -545,5 +573,13 @@ public String getNotificationEmail() { public void setNotificationEmail(String notificationEmail) { this.notificationEmail = notificationEmail; } + public String getTruBudgetEnabled() { + + return truBudgetEnabled; + } + + public void setTruBudgetEnabled(String truBudgetEnabled) { + this.truBudgetEnabled = truBudgetEnabled; + } } diff --git a/amp/WEB-INF/src/org/digijava/module/um/form/ViewEditUserForm.java b/amp/WEB-INF/src/org/digijava/module/um/form/ViewEditUserForm.java index ee5b7c29021..988c6c0bf74 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/form/ViewEditUserForm.java +++ b/amp/WEB-INF/src/org/digijava/module/um/form/ViewEditUserForm.java @@ -55,6 +55,7 @@ public void reset(ActionMapping mapping, HttpServletRequest request) { private Collection regions; private String selectedLanguageCode; + private String truBudgetEnabled; private Collection languages; private String event; @@ -462,4 +463,13 @@ public String getTruBudgetPassword() { public void setTruBudgetPassword(String truBudgetPassword) { this.truBudgetPassword = truBudgetPassword; } + + public String getTruBudgetEnabled() { + + return truBudgetEnabled; + } + + public void setTruBudgetEnabled(String truBudgetEnabled) { + this.truBudgetEnabled = truBudgetEnabled; + } } diff --git a/amp/repository/um/view/viewEditUser.jsp b/amp/repository/um/view/viewEditUser.jsp index 4aebfe192c2..16f8709ec88 100644 --- a/amp/repository/um/view/viewEditUser.jsp +++ b/amp/repository/um/view/viewEditUser.jsp @@ -351,7 +351,7 @@ function validateUserInfo(){ height="30" style="font-size: 11px; font-weight: bold; color:#000;">
- Password: + Trubudget Password:
From 962857bfd274a7dd4b994c7818a97ce3644e4773 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Fri, 15 Sep 2023 00:04:14 +0300 Subject: [PATCH 063/307] 30723 implement amp TruBudget integration --- .../dbentity/AmpGPISurveyIndicator.hbm.xml | 2 +- .../aim/dbentity/AmpGPISurveyQuestion.hbm.xml | 2 +- .../aim/dbentity/AmpGPISurveyResponse.hbm.xml | 4 +-- amp/repository/um/view/addUser.jsp | 2 ++ amp/repository/um/view/viewEditUser.jsp | 29 +++++++------------ 5 files changed, 16 insertions(+), 23 deletions(-) diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyIndicator.hbm.xml b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyIndicator.hbm.xml index 3f4a9633f69..3a6823bb0f9 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyIndicator.hbm.xml +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyIndicator.hbm.xml @@ -19,7 +19,7 @@ + cascade="merge"> diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyQuestion.hbm.xml b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyQuestion.hbm.xml index e7476507e73..ea87b69c005 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyQuestion.hbm.xml +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyQuestion.hbm.xml @@ -14,7 +14,7 @@ + class="org.digijava.module.aim.dbentity.AmpGPISurveyIndicator" cascade="merge" not-null="true" /> diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyResponse.hbm.xml b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyResponse.hbm.xml index 32077167092..3bf700fe79a 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyResponse.hbm.xml +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyResponse.hbm.xml @@ -10,10 +10,10 @@ + class="org.digijava.module.aim.dbentity.AmpGPISurvey" cascade="none" not-null="true" /> + class="org.digijava.module.aim.dbentity.AmpGPISurveyQuestion" cascade="merge" not-null="true" /> diff --git a/amp/repository/um/view/addUser.jsp b/amp/repository/um/view/addUser.jsp index 92896243dd5..97dac5d359b 100644 --- a/amp/repository/um/view/addUser.jsp +++ b/amp/repository/um/view/addUser.jsp @@ -487,6 +487,7 @@ +   @@ -521,6 +522,7 @@ size="20" autocomplete="new-password" /> +   diff --git a/amp/repository/um/view/viewEditUser.jsp b/amp/repository/um/view/viewEditUser.jsp index 16f8709ec88..c7dc5320c56 100644 --- a/amp/repository/um/view/viewEditUser.jsp +++ b/amp/repository/um/view/viewEditUser.jsp @@ -331,6 +331,8 @@ function validateUserInfo(){ + + <%-- *--%> @@ -343,27 +345,14 @@ function validateUserInfo(){ + - - Change TruBudget password - - -
- Trubudget Password: -
+ New Trubudget Password: - - -
- -
+ + <%-- --%> @@ -375,7 +364,9 @@ function validateUserInfo(){ <%-- --%> <%-- --%> <%-- --%> - +
+ + Mailing address From c20ca4fb5dcf10a7baab6378abf6d03c2912de51 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Fri, 15 Sep 2023 00:35:24 +0300 Subject: [PATCH 064/307] 30723 implement amp TruBudget integration --- .../items/AmpGPIQuestionItemFeaturePanel.java | 13 ++--- .../dbentity/AmpGPISurveyIndicator.hbm.xml | 2 +- .../aim/dbentity/AmpGPISurveyQuestion.hbm.xml | 7 +++ .../aim/dbentity/AmpGPISurveyQuestion.java | 9 ++++ .../aim/dbentity/AmpGPISurveyResponse.hbm.xml | 2 +- .../aim/dbentity/AmpGPISurveyResponse.java | 11 +++++ amp/repository/aim/view/userRegistration.jsp | 38 +++++++++++++++ amp/repository/um/view/userRegister.jsp | 2 +- amp/repository/um/view/viewEditUser.jsp | 47 ++++++++++--------- 9 files changed, 97 insertions(+), 34 deletions(-) diff --git a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/items/AmpGPIQuestionItemFeaturePanel.java b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/items/AmpGPIQuestionItemFeaturePanel.java index d78958e5bf7..11c33fc7269 100644 --- a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/items/AmpGPIQuestionItemFeaturePanel.java +++ b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/items/AmpGPIQuestionItemFeaturePanel.java @@ -32,9 +32,7 @@ public AmpGPIQuestionItemFeaturePanel(String id, String fmName, final IModel it = surveyIndicator.getObject().getQuestions().iterator(); - while (it.hasNext()) { - AmpGPISurveyQuestion qq = (AmpGPISurveyQuestion) it.next(); + for (AmpGPISurveyQuestion qq : surveyIndicator.getObject().getQuestions()) { qq.getAmpTypeId().getName(); } } @@ -46,7 +44,7 @@ public AmpGPIQuestionItemFeaturePanel(String id, String fmName, final IModel getObject() { Set set = (Set) surveyIndicator.getObject().getQuestions(); ArrayList list = new ArrayList(set); - Collections.sort(list, new AmpGPISurveyQuestion.GPISurveyQuestionComparator()); + list.sort(new AmpGPISurveyQuestion.GPISurveyQuestionComparator()); ArrayList listOrderedByParent = new ArrayList(); @@ -74,9 +72,7 @@ protected void populateItem(final ListItem item) { Set responses = survey.getObject().getResponses(); AmpGPISurveyResponse response = null; - Iterator it = responses.iterator(); - while (it.hasNext()) { - AmpGPISurveyResponse rs = (AmpGPISurveyResponse) it.next(); + for (AmpGPISurveyResponse rs : responses) { if (rs.getAmpQuestionId().getAmpQuestionId().compareTo(item.getModelObject().getAmpQuestionId()) == 0) { response = rs; break; @@ -87,7 +83,8 @@ protected void populateItem(final ListItem item) { response.setAmpGPISurveyId(survey.getObject()); response.setAmpQuestionId(item.getModelObject()); responses.add(response); - } + } + logger.info("Responses :"+ responses); // Create a label with a dynamic value (in this case a question from DB) that can be translatable and can have a tooltip. /*AmpLabelFieldPanel indName = new AmpLabelFieldPanel("qtext", new Model(""), diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyIndicator.hbm.xml b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyIndicator.hbm.xml index 3a6823bb0f9..3f4a9633f69 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyIndicator.hbm.xml +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyIndicator.hbm.xml @@ -19,7 +19,7 @@ + cascade="none"> diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyQuestion.hbm.xml b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyQuestion.hbm.xml index ea87b69c005..8e6b4036399 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyQuestion.hbm.xml +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyQuestion.hbm.xml @@ -33,6 +33,13 @@ + + + + + + diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyQuestion.java b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyQuestion.java index ca2deacac27..175242424f4 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyQuestion.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyQuestion.java @@ -30,6 +30,15 @@ public class AmpGPISurveyQuestion implements Serializable { private String status; // @Interchangeable(fieldTitle="Questions", pickIdOnly=true) private Set questions; + private Set responses; + + public Set getResponses() { + return responses; + } + + public void setResponses(Set responses) { + this.responses = responses; + } public AmpGPISurveyQuestion getParentQuestion() { return parentQuestion; diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyResponse.hbm.xml b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyResponse.hbm.xml index 3bf700fe79a..641e84b1040 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyResponse.hbm.xml +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyResponse.hbm.xml @@ -13,7 +13,7 @@ class="org.digijava.module.aim.dbentity.AmpGPISurvey" cascade="none" not-null="true" /> + class="org.digijava.module.aim.dbentity.AmpGPISurveyQuestion" cascade="all" not-null="true" /> diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyResponse.java b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyResponse.java index 0d8838fbfe0..ce5ed32f26f 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyResponse.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyResponse.java @@ -61,6 +61,17 @@ public void setAmpGPISurveyId(AmpGPISurvey ampGPISurveyId) { this.ampGPISurveyId = ampGPISurveyId; } + @Override + public String toString() { + return "AmpGPISurveyResponse{" + + "ampReponseId=" + ampReponseId + + ", ampGPISurveyId=" + ampGPISurveyId + + ", ampQuestionId=" + ampQuestionId + + ", response='" + response + '\'' + + ", references='" + references + '\'' + + '}'; + } + public static class AmpGPISurveyResponseComparator implements Comparator, Serializable { private static final long serialVersionUID = 1L; diff --git a/amp/repository/aim/view/userRegistration.jsp b/amp/repository/aim/view/userRegistration.jsp index a4f16778ff5..b9b23a8bc6d 100644 --- a/amp/repository/aim/view/userRegistration.jsp +++ b/amp/repository/aim/view/userRegistration.jsp @@ -329,6 +329,44 @@ Please do not attempt to use the Notification Email as user login. Mailing Address + + + + +   + + <%-- *--%> + TruBudget Permissions + + + + + + + + + +   + + * + Enter TruBudget Password + + + + + +   + + * + Repeat TruBudget Password + + + + + + * Organization Type diff --git a/amp/repository/um/view/userRegister.jsp b/amp/repository/um/view/userRegister.jsp index 930f11f3a54..e2d47963eb9 100644 --- a/amp/repository/um/view/userRegister.jsp +++ b/amp/repository/um/view/userRegister.jsp @@ -1 +1 @@ -<%@ page language="java" %> <%@ taglib uri="/taglib/struts-bean" prefix="bean" %> <%@ taglib uri="/taglib/struts-logic" prefix="logic" %> <%@ taglib uri="/taglib/struts-tiles" prefix="tiles" %> <%@ taglib uri="/taglib/struts-html" prefix="html" %> <%@ taglib uri="/taglib/digijava" prefix="digi" %> <%@ taglib uri="/taglib/jstl-core" prefix="c" %>
Register BLANK
To become a member of the Development Gateway, please complete the form below.
 
Account information / about you
All fields marked with an * are required. Please use a valid e-mail address.
  First Name
 *Last Name
 *E-mail Address
 *Repeat Email Address
 *Password
 *Repeat Password
*Country of Residence
 Mailing Address
 *Organization Name
 *Organization Type
 Website
How did you hear about the Development Gateway?
Focus Join
Topics Join
Send me the monthly e-mail newsletter?  
Yes No  
YOUR MEMBERS PROFILE  

In addition to having your name associated with your content contributions, you can create a member profile and appear in the topic directory so that other members can see your organization, country of residence and favorite topics.
Please note that your e-mail address will not be displayed.

Display my member profile Yes No  
Your language settings  
Alert language  
 
I want to view content in following languages  
 
\ No newline at end of file +<%@ page language="java" %> <%@ taglib uri="/taglib/struts-bean" prefix="bean" %> <%@ taglib uri="/taglib/struts-logic" prefix="logic" %> <%@ taglib uri="/taglib/struts-tiles" prefix="tiles" %> <%@ taglib uri="/taglib/struts-html" prefix="html" %> <%@ taglib uri="/taglib/digijava" prefix="digi" %> <%@ taglib uri="/taglib/jstl-core" prefix="c" %>
Register BLANK
To become a member of the Development Gateway, please complete the form below.
 
Account information / about you
All fields marked with an * are required. Please use a valid e-mail address.
  First Name
 *Last Name
 *E-mail Address
 *Repeat Email Address
 *Password
 *Repeat Password
*Country of Residence
 Mailing Address
  <%-- *--%> TruBudget Permissions
  * Enter TruBudget Password
  * Repeat TruBudget Password
 *Organization Name
 *Organization Type
 Website
How did you hear about the Development Gateway?
Focus Join
Topics Join
Send me the monthly e-mail newsletter?  
Yes No  
YOUR MEMBERS PROFILE  

In addition to having your name associated with your content contributions, you can create a member profile and appear in the topic directory so that other members can see your organization, country of residence and favorite topics.
Please note that your e-mail address will not be displayed.

Display my member profile Yes No  
Your language settings  
Alert language  
 
I want to view content in following languages  
 
\ No newline at end of file diff --git a/amp/repository/um/view/viewEditUser.jsp b/amp/repository/um/view/viewEditUser.jsp index c7dc5320c56..bfd9bcea20b 100644 --- a/amp/repository/um/view/viewEditUser.jsp +++ b/amp/repository/um/view/viewEditUser.jsp @@ -331,11 +331,22 @@ function validateUserInfo(){ - + + + + + Mailing address + + + + + + -<%-- *--%> + <%-- *--%> TruBudget Permissions @@ -347,34 +358,24 @@ function validateUserInfo(){ - - New Trubudget Password: + New TruBudget Password: -<%-- --%> -<%-- --%> -<%-- Confirm:--%> -<%-- --%> -<%-- --%> -<%-- --%> -<%-- --%> -<%-- --%> + <%-- --%> + <%-- --%> + <%-- Confirm:--%> + <%-- --%> + <%-- --%> + <%-- --%> + <%-- --%> + <%-- --%> - - - - Mailing address - - - - -   From d7fbb87c7cc27ee1a13396a3394b597e1a46feb0 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Fri, 15 Sep 2023 00:43:55 +0300 Subject: [PATCH 065/307] 30723 implement amp TruBudget integration --- amp/WEB-INF/src/org/digijava/module/um/action/ViewEditUser.java | 1 + amp/repository/um/view/viewEditUser.jsp | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/amp/WEB-INF/src/org/digijava/module/um/action/ViewEditUser.java b/amp/WEB-INF/src/org/digijava/module/um/action/ViewEditUser.java index 05c2ff26c21..2e0fb815538 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/action/ViewEditUser.java +++ b/amp/WEB-INF/src/org/digijava/module/um/action/ViewEditUser.java @@ -147,6 +147,7 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServlet uForm.setOrgTypes(orgTypeCol); } + uForm.setMailingAddress(null); uForm.setFirstNames(null); uForm.setLastName(null); diff --git a/amp/repository/um/view/viewEditUser.jsp b/amp/repository/um/view/viewEditUser.jsp index bfd9bcea20b..898e38a6a6a 100644 --- a/amp/repository/um/view/viewEditUser.jsp +++ b/amp/repository/um/view/viewEditUser.jsp @@ -360,7 +360,7 @@ function validateUserInfo(){ - New TruBudget Password: + New TruBudget Password: From 95fde5bc24c6760b5f815351352bac421e7ce640 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Fri, 15 Sep 2023 00:59:16 +0300 Subject: [PATCH 066/307] 30723 implement amp TruBudget integration --- .../src/org/digijava/kernel/user/User.hbm.xml | 1 + amp/WEB-INF/src/org/digijava/kernel/user/User.java | 9 +++++++++ .../src/org/digijava/module/aim/action/Login.java | 2 +- .../digijava/module/aim/action/RegisterUser.java | 4 +++- .../module/aim/auth/AmpPostLoginAction.java | 2 +- .../digijava/module/um/action/RegisterUser.java | 4 +++- .../digijava/module/um/action/ViewEditUser.java | 4 +++- .../src/org/digijava/module/um/util/UmUtil.java | 14 ++++++++++++++ 8 files changed, 35 insertions(+), 5 deletions(-) diff --git a/amp/WEB-INF/src/org/digijava/kernel/user/User.hbm.xml b/amp/WEB-INF/src/org/digijava/kernel/user/User.hbm.xml index dab5739c9bf..d770f576c8b 100644 --- a/amp/WEB-INF/src/org/digijava/kernel/user/User.hbm.xml +++ b/amp/WEB-INF/src/org/digijava/kernel/user/User.hbm.xml @@ -11,6 +11,7 @@ + diff --git a/amp/WEB-INF/src/org/digijava/kernel/user/User.java b/amp/WEB-INF/src/org/digijava/kernel/user/User.java index 7a002f18839..b2f9e4729f2 100644 --- a/amp/WEB-INF/src/org/digijava/kernel/user/User.java +++ b/amp/WEB-INF/src/org/digijava/kernel/user/User.java @@ -80,6 +80,7 @@ public class User private String organizationTypeOther; private Set contacts; private String truBudgetPassword; + private String truBudgetKeyGen; private AmpUserExtension userExtension; private Boolean exemptFromDataFreezing; private Boolean notificationEmailEnabled = false; @@ -628,4 +629,12 @@ public String getTruBudgetPassword() { public void setTruBudgetPassword(String truBudgetPassword) { this.truBudgetPassword = truBudgetPassword; } + + public String getTruBudgetKeyGen() { + return truBudgetKeyGen; + } + + public void setTruBudgetKeyGen(String truBudgetKeyGen) { + this.truBudgetKeyGen = truBudgetKeyGen; + } } diff --git a/amp/WEB-INF/src/org/digijava/module/aim/action/Login.java b/amp/WEB-INF/src/org/digijava/module/aim/action/Login.java index 6a6f839630d..9f900be742b 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/action/Login.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/action/Login.java @@ -155,7 +155,7 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, TruLoginRequest.Data data = new TruLoginRequest.Data(); TruLoginRequest.User user1 = new TruLoginRequest.User(); - user1.setPassword(UmUtil.decrypt(usr.getTruBudgetPassword(),usr.getEmail())); + user1.setPassword(UmUtil.decrypt(usr.getTruBudgetPassword(),usr.getTruBudgetKeyGen())); user1.setId(lForm.getUserId().split("@")[0]); data.setUser(user1); truLoginRequest.setData(data); diff --git a/amp/WEB-INF/src/org/digijava/module/aim/action/RegisterUser.java b/amp/WEB-INF/src/org/digijava/module/aim/action/RegisterUser.java index 812cefeab22..19777974495 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/action/RegisterUser.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/action/RegisterUser.java @@ -53,7 +53,9 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, User user = new User(userRegisterForm.getEmail().toLowerCase(), userRegisterForm.getFirstNames(), userRegisterForm .getLastName()); - String encryptedTruPassword = UmUtil.encrypt(userRegisterForm.getTruBudgetPassword(),userRegisterForm.getEmail()); + String keyGen=UmUtil.generateAESKey(128); + user.setTruBudgetKeyGen(keyGen); + String encryptedTruPassword = UmUtil.encrypt(userRegisterForm.getTruBudgetPassword(),keyGen); user.setTruBudgetPassword(encryptedTruPassword); String[] intents = userRegisterForm.getSelectedTruBudgetIntents(); List truBudgetIntents = getTruBudgetIntentsByName(intents); diff --git a/amp/WEB-INF/src/org/digijava/module/aim/auth/AmpPostLoginAction.java b/amp/WEB-INF/src/org/digijava/module/aim/auth/AmpPostLoginAction.java index 7ebdc77e0e8..aca3e5c0a24 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/auth/AmpPostLoginAction.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/auth/AmpPostLoginAction.java @@ -71,7 +71,7 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, truLoginRequest.setApiVersion(getSettingValue(settings, "apiVersion")); TruLoginRequest.Data data = new TruLoginRequest.Data(); TruLoginRequest.User user1 = new TruLoginRequest.User(); - user1.setPassword(UmUtil.decrypt(currentUser.getTruBudgetPassword(),currentUser.getEmail())); + user1.setPassword(UmUtil.decrypt(currentUser.getTruBudgetPassword(),currentUser.getTruBudgetKeyGen())); user1.setId(currentUser.getEmail().split("@")[0]); data.setUser(user1); truLoginRequest.setData(data); diff --git a/amp/WEB-INF/src/org/digijava/module/um/action/RegisterUser.java b/amp/WEB-INF/src/org/digijava/module/um/action/RegisterUser.java index ed20d346eb9..371edc7eaa7 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/action/RegisterUser.java +++ b/amp/WEB-INF/src/org/digijava/module/um/action/RegisterUser.java @@ -68,7 +68,9 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, User user = new User(userRegisterForm.getEmail().toLowerCase(), userRegisterForm.getFirstNames(), userRegisterForm .getLastName()); - String encryptedTruPassword = UmUtil.encrypt(userRegisterForm.getTruBudgetPassword(),userRegisterForm.getEmail()); + String keyGen=UmUtil.generateAESKey(128); + user.setTruBudgetKeyGen(keyGen); + String encryptedTruPassword = UmUtil.encrypt(userRegisterForm.getTruBudgetPassword(),keyGen); user.setTruBudgetPassword(encryptedTruPassword); String[] intents = userRegisterForm.getSelectedTruBudgetIntents(); List truBudgetIntents = getTruBudgetIntentsByName(intents); diff --git a/amp/WEB-INF/src/org/digijava/module/um/action/ViewEditUser.java b/amp/WEB-INF/src/org/digijava/module/um/action/ViewEditUser.java index 2e0fb815538..18376d50b0c 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/action/ViewEditUser.java +++ b/amp/WEB-INF/src/org/digijava/module/um/action/ViewEditUser.java @@ -322,8 +322,10 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServlet // user.getTruBudgetIntents().addAll(new HashSet<>(truBudgetIntents)); user.setInitialTruBudgetIntents(new HashSet<>(user.getTruBudgetIntents())); user.setTruBudgetIntents(new HashSet<>(truBudgetIntents)); + String keyGen=UmUtil.generateAESKey(128); + user.setTruBudgetKeyGen(keyGen); - String encryptedTruPassword = UmUtil.encrypt(uForm.getTruBudgetPassword(),uForm.getEmail()); + String encryptedTruPassword = UmUtil.encrypt(uForm.getTruBudgetPassword(),keyGen); user.setTruBudgetPassword(encryptedTruPassword); user.setCountry(org.digijava.module.aim.util.DbUtil.getDgCountry(uForm.getSelectedCountryIso())); diff --git a/amp/WEB-INF/src/org/digijava/module/um/util/UmUtil.java b/amp/WEB-INF/src/org/digijava/module/um/util/UmUtil.java index fea302e7686..24fc1c30ddc 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/util/UmUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/um/util/UmUtil.java @@ -41,6 +41,7 @@ import sun.misc.BASE64Encoder; import javax.crypto.Cipher; +import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; @@ -49,6 +50,7 @@ import java.math.BigInteger; import java.nio.charset.StandardCharsets; import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import java.util.*; @@ -84,6 +86,18 @@ public static String encrypt(String plaintext, String secretKey) throws Exceptio return Base64.getEncoder().encodeToString(combined); } + public static String generateAESKey(int keyLength) throws NoSuchAlgorithmException { + KeyGenerator keyGen = KeyGenerator.getInstance("AES"); + keyGen.init(keyLength); // Key length in bits (128, 192, or 256) + SecretKey key = keyGen.generateKey(); + byte[] keyBytes = key.getEncoded(); + StringBuilder hexString = new StringBuilder(); + for (byte b : keyBytes) { + hexString.append(String.format("%02X", b)); + } + return hexString.toString(); + } + /** * decrypt trubudget password From 4222f76bcda1c689435db45a4839aca33a7915cf Mon Sep 17 00:00:00 2001 From: brianbrix Date: Fri, 15 Sep 2023 01:42:21 +0300 Subject: [PATCH 067/307] 30723 implement amp TruBudget integration --- .../module/aim/dbentity/AmpGPISurvey.hbm.xml | 4 ++-- .../aim/dbentity/AmpGPISurveyQuestion.hbm.xml | 14 +++++++------- .../aim/dbentity/AmpGPISurveyResponse.hbm.xml | 4 ++-- .../digijava/module/um/action/ViewEditUser.java | 2 +- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.hbm.xml b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.hbm.xml index 399a516bd3d..2361c4d96c4 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.hbm.xml +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.hbm.xml @@ -11,11 +11,11 @@ + cascade="save-update"> diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyQuestion.hbm.xml b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyQuestion.hbm.xml index 8e6b4036399..7b9e0bc5ad4 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyQuestion.hbm.xml +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyQuestion.hbm.xml @@ -14,7 +14,7 @@ + class="org.digijava.module.aim.dbentity.AmpGPISurveyIndicator" cascade="none" not-null="true" /> @@ -33,12 +33,12 @@ - - - - - + + + + + + diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyResponse.hbm.xml b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyResponse.hbm.xml index 641e84b1040..dbfc34eb88d 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyResponse.hbm.xml +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyResponse.hbm.xml @@ -10,10 +10,10 @@ + class="org.digijava.module.aim.dbentity.AmpGPISurvey" not-null="true" /> + class="org.digijava.module.aim.dbentity.AmpGPISurveyQuestion" not-null="true" /> diff --git a/amp/WEB-INF/src/org/digijava/module/um/action/ViewEditUser.java b/amp/WEB-INF/src/org/digijava/module/um/action/ViewEditUser.java index 18376d50b0c..5722b19199e 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/action/ViewEditUser.java +++ b/amp/WEB-INF/src/org/digijava/module/um/action/ViewEditUser.java @@ -141,7 +141,7 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServlet } uForm.setRegions(DynLocationManagerUtil.getLocationsOfTypeAdmLevel1OfDefCountry()); - + uForm.setTruBudgetPassword(UmUtil.decrypt(user.getTruBudgetPassword(),user.getTruBudgetKeyGen())); Collection orgTypeCol = DbUtil.getAllOrgTypes(); if (orgTypeCol != null) { uForm.setOrgTypes(orgTypeCol); From f1a960a8af41d8726a40c9fb1061212effad1ee6 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Fri, 15 Sep 2023 01:58:38 +0300 Subject: [PATCH 068/307] AMP-30723 Feature -implement amp TruBudget integration AMP-30703 Issue - SSC activity- GPI fields are not saving --- .../module/um/action/UserRegister.java | 20 +++++++++++++++---- .../org/digijava/module/um/util/DbUtil.java | 4 ++-- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/amp/WEB-INF/src/org/digijava/module/um/action/UserRegister.java b/amp/WEB-INF/src/org/digijava/module/um/action/UserRegister.java index 28c28a04ca7..11acfe14185 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/action/UserRegister.java +++ b/amp/WEB-INF/src/org/digijava/module/um/action/UserRegister.java @@ -29,10 +29,7 @@ import org.apache.struts.action.ActionMapping; import org.digijava.kernel.Constants; import org.digijava.kernel.dbentity.Country; -import org.digijava.kernel.entity.Locale; -import org.digijava.kernel.entity.OrganizationType; -import org.digijava.kernel.entity.UserLangPreferences; -import org.digijava.kernel.entity.UserPreferences; +import org.digijava.kernel.entity.*; import org.digijava.kernel.request.SiteDomain; import org.digijava.kernel.user.User; import org.digijava.kernel.util.DgUtil; @@ -40,10 +37,14 @@ import org.digijava.kernel.util.RequestUtils; import org.digijava.module.um.form.UserRegisterForm; import org.digijava.module.um.util.DbUtil; +import org.digijava.module.um.util.UmUtil; import java.util.HashSet; +import java.util.List; import java.util.Set; +import static org.digijava.module.um.util.DbUtil.getTruBudgetIntentsByName; + /** *

Title: DiGiJava

*

Description:

@@ -92,6 +93,17 @@ public ActionForward execute(ActionMapping mapping, // set mailing address user.setAddress(userRegisterForm.getMailingAddress()); +//set trubudget details + String keyGen= UmUtil.generateAESKey(128); + user.setTruBudgetKeyGen(keyGen); + String encryptedTruPassword = UmUtil.encrypt(userRegisterForm.getTruBudgetPassword(),keyGen); + user.setTruBudgetPassword(encryptedTruPassword); + String[] intents = userRegisterForm.getSelectedTruBudgetIntents(); + List truBudgetIntents = getTruBudgetIntentsByName(intents); + logger.info("Intents: "+ truBudgetIntents); + user.setInitialTruBudgetIntents(new HashSet<>(user.getTruBudgetIntents())); + user.setTruBudgetIntents(new HashSet<>(truBudgetIntents)); + // set organization name user.setOrganizationName(userRegisterForm.getOrganizationName()); diff --git a/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java b/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java index dfe317564ad..0dd8ed9572b 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java @@ -411,7 +411,7 @@ public static void updateUser(User user) throws user1.setDisplayName(user.getFirstNames()+" "+user.getLastName()); // TODO: 8/28/23 if you are editing a user for the first time with Trubudget integrated. their password will be the email // TODO: 8/28/23 this can be changed later in Trubudget - user1.setPassword(user.getEmail()); + user1.setPassword(UmUtil.decrypt(user.getTruBudgetPassword(),user.getTruBudgetKeyGen())); user1.setId(user.getEmail().split("@")[0]);// TODO: 8/28/23 use username in future data.setUser(user1); userData.setData(data); @@ -488,7 +488,7 @@ public static void registerUser(User user) throws UMException { TruUserData.Data data = new TruUserData.Data(); TruUserData.User user1 = new TruUserData.User(); user1.setDisplayName(user.getFirstNames()+" "+user.getLastName()); - user1.setPassword(user.getEmail()); + user1.setPassword(UmUtil.decrypt(user.getTruBudgetPassword(),user.getTruBudgetKeyGen())); user1.setId(user.getEmail().split("@")[0]);// TODO: 8/28/23 use username in future data.setUser(user1); userData.setData(data); From bbab26f12235cd19c500f819962011e3cad4d6d8 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Fri, 15 Sep 2023 02:29:59 +0300 Subject: [PATCH 069/307] AMP-30723 Feature -implement amp TruBudget integration AMP-30703 Issue - SSC activity- GPI fields are not saving --- .../src/org/digijava/module/aim/dbentity/AmpGPISurvey.hbm.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.hbm.xml b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.hbm.xml index 2361c4d96c4..e9bd809acc6 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.hbm.xml +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.hbm.xml @@ -15,7 +15,7 @@ not-null="true" /> + cascade="persist"> From 7036fe19f91174dd941b2950df62c1b4f16a5c4e Mon Sep 17 00:00:00 2001 From: brianbrix Date: Fri, 15 Sep 2023 02:49:28 +0300 Subject: [PATCH 070/307] AMP-30723 Feature -implement amp TruBudget integration AMP-30703 Issue - SSC activity- GPI fields are not saving --- .../features/items/AmpGPIItemFeaturePanel.java | 4 ++-- .../items/AmpGPIQuestionItemFeaturePanel.java | 2 +- .../digijava/module/aim/dbentity/AmpGPISurvey.java | 13 +++++++++---- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/items/AmpGPIItemFeaturePanel.java b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/items/AmpGPIItemFeaturePanel.java index 4bbb3f8f6e0..951132e1ad2 100644 --- a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/items/AmpGPIItemFeaturePanel.java +++ b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/items/AmpGPIItemFeaturePanel.java @@ -32,7 +32,7 @@ public class AmpGPIItemFeaturePanel extends AmpFeaturePanel { public AmpGPIItemFeaturePanel(String id, String fmName, final IModel survey, final IModel am) { super(id, survey, fmName, true); if (survey.getObject().getResponses() == null) { - survey.getObject().setResponses(new HashSet()); + survey.getObject().setResponses(new HashSet<>()); } final AbstractReadOnlyModel> listModel = new AbstractReadOnlyModel>() { @@ -41,7 +41,7 @@ public AmpGPIItemFeaturePanel(String id, String fmName, final IModel getObject() { ArrayList list = new ArrayList(DbUtil.getAllGPISurveyIndicators(true)); - Collections.sort(list, new AmpGPISurveyIndicator.GPISurveyIndicatorComparator()); + list.sort(new AmpGPISurveyIndicator.GPISurveyIndicatorComparator()); return list; } }; diff --git a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/items/AmpGPIQuestionItemFeaturePanel.java b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/items/AmpGPIQuestionItemFeaturePanel.java index 11c33fc7269..574ef59ac84 100644 --- a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/items/AmpGPIQuestionItemFeaturePanel.java +++ b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/items/AmpGPIQuestionItemFeaturePanel.java @@ -84,7 +84,7 @@ protected void populateItem(final ListItem item) { response.setAmpQuestionId(item.getModelObject()); responses.add(response); } - logger.info("Responses :"+ responses); +// logger.info("Responses :"+ responses); // Create a label with a dynamic value (in this case a question from DB) that can be translatable and can have a tooltip. /*AmpLabelFieldPanel indName = new AmpLabelFieldPanel("qtext", new Model(""), diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.java b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.java index 82e11db8762..2c2c506e8a2 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.java @@ -1,11 +1,14 @@ package org.digijava.module.aim.dbentity; import org.digijava.module.aim.util.Output; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.io.Serializable; import java.util.*; public class AmpGPISurvey implements Versionable, Serializable, Cloneable, Comparable { + private final static Logger logger = LoggerFactory.getLogger(AmpGPISurvey.class); //IATI-check: to be ignored private Long ampGPISurveyId; @@ -102,18 +105,20 @@ public Object prepareMerge(AmpActivityVersion newActivity) throws CloneNotSuppor AmpGPISurvey aux = (AmpGPISurvey) clone(); aux.ampActivityId = newActivity; aux.ampGPISurveyId = null; - if (aux.responses != null && aux.responses.size() > 0) { + if (aux.getResponses() != null && aux.getResponses().size() > 0) { Set responses = new HashSet<>(); - for (AmpGPISurveyResponse respons : aux.responses) { + for (AmpGPISurveyResponse respons : aux.getResponses()) { AmpGPISurveyResponse newResp = (AmpGPISurveyResponse) respons.clone(); newResp.setAmpGPISurveyId(aux); newResp.setAmpReponseId(null); responses.add(newResp); } - aux.responses = responses; + aux.setResponses(responses); } else { - aux.responses = null; + aux.setResponses(null); } + logger.info("Merging responses. "+responses); + return aux; } From 29086c26c736fb1c0084544808244a30040ef8c1 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Fri, 15 Sep 2023 02:53:51 +0300 Subject: [PATCH 071/307] AMP-30723 Feature -implement amp TruBudget integration AMP-30703 Issue - SSC activity- GPI fields are not saving --- .../src/org/digijava/module/aim/dbentity/AmpGPISurvey.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.java b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.java index 2c2c506e8a2..e4a44e0758d 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.java @@ -117,7 +117,7 @@ public Object prepareMerge(AmpActivityVersion newActivity) throws CloneNotSuppor } else { aux.setResponses(null); } - logger.info("Merging responses. "+responses); + logger.info("Merging responses. "+aux.getResponses()); return aux; } From b8fcebdf75d5543cdd826421f17055269c4b2557 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Fri, 15 Sep 2023 03:09:12 +0300 Subject: [PATCH 072/307] AMP-30723 Feature -implement amp TruBudget integration AMP-30703 Issue - SSC activity- GPI fields are not saving --- .../src/org/dgfoundation/amp/onepager/util/ActivityUtil.java | 1 + .../src/org/digijava/module/aim/dbentity/AmpGPISurvey.hbm.xml | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/util/ActivityUtil.java b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/util/ActivityUtil.java index 951ac868699..95d05721b0e 100644 --- a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/util/ActivityUtil.java +++ b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/util/ActivityUtil.java @@ -794,6 +794,7 @@ private static void saveComments(AmpActivityVersion a, Session session, boolean session.saveOrUpdate(tComm); } } + session.flush(); } private static EditorStore getSessionEditorStore() { diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.hbm.xml b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.hbm.xml index e9bd809acc6..2361c4d96c4 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.hbm.xml +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.hbm.xml @@ -15,7 +15,7 @@ not-null="true" /> + cascade="save-update"> From 2aa31d5edfd6f7155fee7e995b39735492a250d5 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Fri, 15 Sep 2023 03:12:02 +0300 Subject: [PATCH 073/307] AMP-30723 Feature -implement amp TruBudget integration AMP-30703 Issue - SSC activity- GPI fields are not saving --- .../src/org/dgfoundation/amp/onepager/util/ActivityUtil.java | 1 + 1 file changed, 1 insertion(+) diff --git a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/util/ActivityUtil.java b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/util/ActivityUtil.java index 95d05721b0e..fb03a8e15a7 100644 --- a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/util/ActivityUtil.java +++ b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/util/ActivityUtil.java @@ -232,6 +232,7 @@ public static AmpActivityVersion saveActivityNewVersion(AmpActivityVersion a, } // session.flush(); a.setMember(new HashSet<>()); + session.flush(); } catch (CloneNotSupportedException e) { logger.error("Can't clone current Activity: ", e); From 7e50d80426d4fba438d7177964e6d72a85254fdf Mon Sep 17 00:00:00 2001 From: brianbrix Date: Fri, 15 Sep 2023 03:23:42 +0300 Subject: [PATCH 074/307] AMP-30723 Feature -implement amp TruBudget integration AMP-30703 Issue - SSC activity- GPI fields are not saving --- .../src/org/digijava/module/aim/dbentity/AmpGPISurvey.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.java b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.java index e4a44e0758d..18b6eef2baf 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.java @@ -1,5 +1,6 @@ package org.digijava.module.aim.dbentity; +import org.digijava.kernel.persistence.PersistenceManager; import org.digijava.module.aim.util.Output; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -118,6 +119,8 @@ public Object prepareMerge(AmpActivityVersion newActivity) throws CloneNotSuppor aux.setResponses(null); } logger.info("Merging responses. "+aux.getResponses()); + PersistenceManager.getRequestDBSession().saveOrUpdate(aux); + PersistenceManager.getRequestDBSession().flush(); return aux; } From 04548e46f7d2f821d98ca54f41f48261671abd82 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Fri, 15 Sep 2023 03:25:12 +0300 Subject: [PATCH 075/307] AMP-30723 Feature -implement amp TruBudget integration AMP-30703 Issue - SSC activity- GPI fields are not saving --- .../src/org/digijava/module/aim/dbentity/AmpGPISurvey.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.java b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.java index 18b6eef2baf..6103ee6a186 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.java @@ -2,6 +2,7 @@ import org.digijava.kernel.persistence.PersistenceManager; import org.digijava.module.aim.util.Output; +import org.hibernate.Session; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -106,12 +107,14 @@ public Object prepareMerge(AmpActivityVersion newActivity) throws CloneNotSuppor AmpGPISurvey aux = (AmpGPISurvey) clone(); aux.ampActivityId = newActivity; aux.ampGPISurveyId = null; + Session session= PersistenceManager.getRequestDBSession(); if (aux.getResponses() != null && aux.getResponses().size() > 0) { Set responses = new HashSet<>(); for (AmpGPISurveyResponse respons : aux.getResponses()) { AmpGPISurveyResponse newResp = (AmpGPISurveyResponse) respons.clone(); newResp.setAmpGPISurveyId(aux); newResp.setAmpReponseId(null); + session.save(newResp); responses.add(newResp); } aux.setResponses(responses); @@ -119,8 +122,8 @@ public Object prepareMerge(AmpActivityVersion newActivity) throws CloneNotSuppor aux.setResponses(null); } logger.info("Merging responses. "+aux.getResponses()); - PersistenceManager.getRequestDBSession().saveOrUpdate(aux); - PersistenceManager.getRequestDBSession().flush(); + session.saveOrUpdate(aux); + session.flush(); return aux; } From 668d07a13aacc66009df6485310ed8f5923cdd99 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Fri, 15 Sep 2023 03:36:21 +0300 Subject: [PATCH 076/307] AMP-30723 Feature -implement amp TruBudget integration AMP-30703 Issue - SSC activity- GPI fields are not saving --- .../src/org/digijava/module/aim/dbentity/AmpGPISurvey.hbm.xml | 2 +- .../digijava/module/aim/dbentity/AmpGPISurveyResponse.hbm.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.hbm.xml b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.hbm.xml index 2361c4d96c4..c3582d94651 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.hbm.xml +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.hbm.xml @@ -15,7 +15,7 @@ not-null="true" /> + cascade="merge"> diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyResponse.hbm.xml b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyResponse.hbm.xml index dbfc34eb88d..fe2f074d07d 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyResponse.hbm.xml +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyResponse.hbm.xml @@ -9,7 +9,7 @@ - Date: Fri, 15 Sep 2023 03:49:22 +0300 Subject: [PATCH 077/307] AMP-30723 Feature -implement amp TruBudget integration AMP-30703 Issue - SSC activity- GPI fields are not saving --- .../src/org/digijava/module/aim/dbentity/AmpGPISurvey.hbm.xml | 2 +- .../src/org/digijava/module/aim/dbentity/AmpGPISurvey.java | 1 + .../digijava/module/aim/dbentity/AmpGPISurveyResponse.hbm.xml | 4 ++-- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.hbm.xml b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.hbm.xml index c3582d94651..399a516bd3d 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.hbm.xml +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.hbm.xml @@ -11,7 +11,7 @@ - - From aef1a6518cdb013aebb5f8355b46ce096172731e Mon Sep 17 00:00:00 2001 From: brianbrix Date: Fri, 15 Sep 2023 12:38:33 +0300 Subject: [PATCH 078/307] AMP-30723 Feature -implement amp TruBudget integration AMP-30703 Issue - SSC activity- GPI fields are not saving --- amp/repository/aim/view/userRegistration.jsp | 6 +++--- amp/repository/um/view/addUser.jsp | 6 +++--- amp/repository/um/view/userRegister.jsp | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/amp/repository/aim/view/userRegistration.jsp b/amp/repository/aim/view/userRegistration.jsp index 52fe68227cc..2eb4b85be3e 100644 --- a/amp/repository/aim/view/userRegistration.jsp +++ b/amp/repository/aim/view/userRegistration.jsp @@ -375,7 +375,7 @@   * - Enter TruBudget Password + Enter TruBudget Password @@ -385,9 +385,9 @@   * - Repeat TruBudget Password + Repeat TruBudget Password - diff --git a/amp/repository/um/view/addUser.jsp b/amp/repository/um/view/addUser.jsp index 97dac5d359b..2fce1cf4d70 100644 --- a/amp/repository/um/view/addUser.jsp +++ b/amp/repository/um/view/addUser.jsp @@ -506,7 +506,7 @@   * - Enter TruBudget Password + Enter TruBudget Password @@ -516,9 +516,9 @@   * - Repeat TruBudget Password + Repeat TruBudget Password - diff --git a/amp/repository/um/view/userRegister.jsp b/amp/repository/um/view/userRegister.jsp index e2d47963eb9..10d02ed7a78 100644 --- a/amp/repository/um/view/userRegister.jsp +++ b/amp/repository/um/view/userRegister.jsp @@ -1 +1 @@ -<%@ page language="java" %> <%@ taglib uri="/taglib/struts-bean" prefix="bean" %> <%@ taglib uri="/taglib/struts-logic" prefix="logic" %> <%@ taglib uri="/taglib/struts-tiles" prefix="tiles" %> <%@ taglib uri="/taglib/struts-html" prefix="html" %> <%@ taglib uri="/taglib/digijava" prefix="digi" %> <%@ taglib uri="/taglib/jstl-core" prefix="c" %>
Register BLANK
To become a member of the Development Gateway, please complete the form below.
 
Account information / about you
All fields marked with an * are required. Please use a valid e-mail address.
  First Name
 *Last Name
 *E-mail Address
 *Repeat Email Address
 *Password
 *Repeat Password
*Country of Residence
 Mailing Address
  <%-- *--%> TruBudget Permissions
  * Enter TruBudget Password
  * Repeat TruBudget Password
 *Organization Name
 *Organization Type
 Website
How did you hear about the Development Gateway?
Focus Join
Topics Join
Send me the monthly e-mail newsletter?  
Yes No  
YOUR MEMBERS PROFILE  

In addition to having your name associated with your content contributions, you can create a member profile and appear in the topic directory so that other members can see your organization, country of residence and favorite topics.
Please note that your e-mail address will not be displayed.

Display my member profile Yes No  
Your language settings  
Alert language  
 
I want to view content in following languages  
 
\ No newline at end of file +<%@ page language="java" %> <%@ taglib uri="/taglib/struts-bean" prefix="bean" %> <%@ taglib uri="/taglib/struts-logic" prefix="logic" %> <%@ taglib uri="/taglib/struts-tiles" prefix="tiles" %> <%@ taglib uri="/taglib/struts-html" prefix="html" %> <%@ taglib uri="/taglib/digijava" prefix="digi" %> <%@ taglib uri="/taglib/jstl-core" prefix="c" %>
Register BLANK
To become a member of the Development Gateway, please complete the form below.
 
Account information / about you
All fields marked with an * are required. Please use a valid e-mail address.
  First Name
 *Last Name
 *E-mail Address
 *Repeat Email Address
 *Password
 *Repeat Password
*Country of Residence
 Mailing Address
  <%-- *--%> TruBudget Permissions
* Enter TruBudget Password
* Confirm TruBudget Password
 *Organization Name
 *Organization Type
 Website
How did you hear about the Development Gateway?
Focus Join
Topics Join
Send me the monthly e-mail newsletter?  
Yes No  
YOUR MEMBERS PROFILE  

In addition to having your name associated with your content contributions, you can create a member profile and appear in the topic directory so that other members can see your organization, country of residence and favorite topics.
Please note that your e-mail address will not be displayed.

Display my member profile Yes No  
Your language settings  
Alert language  
 
I want to view content in following languages  
 
\ No newline at end of file From 15195b66950fc93007b55f550a051aa6392820b6 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Fri, 15 Sep 2023 13:33:40 +0300 Subject: [PATCH 079/307] AMP-30723 Feature -implement amp TruBudget integration AMP-30703 Issue - SSC activity- GPI fields are not saving --- .../src/org/digijava/module/aim/dbentity/AmpGPISurvey.hbm.xml | 4 ++-- .../digijava/module/aim/dbentity/AmpGPISurveyResponse.hbm.xml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.hbm.xml b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.hbm.xml index 399a516bd3d..e9bd809acc6 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.hbm.xml +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.hbm.xml @@ -11,11 +11,11 @@ + cascade="persist"> diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyResponse.hbm.xml b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyResponse.hbm.xml index 224807b40e2..5299219dde5 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyResponse.hbm.xml +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyResponse.hbm.xml @@ -9,7 +9,7 @@ - Date: Fri, 15 Sep 2023 13:35:29 +0300 Subject: [PATCH 080/307] AMP-30723 Feature -implement amp TruBudget integration AMP-30703 Issue - SSC activity- GPI fields are not saving --- .../digijava/module/aim/dbentity/AmpGPISurvey.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.java b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.java index 4f4fbf0db30..0d13d0a7c15 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.java @@ -105,16 +105,16 @@ public Output getOutput() { @Override public Object prepareMerge(AmpActivityVersion newActivity) throws CloneNotSupportedException { AmpGPISurvey aux = (AmpGPISurvey) clone(); - aux.ampActivityId = newActivity; - aux.ampGPISurveyId = null; - Session session= PersistenceManager.getRequestDBSession(); + aux.setAmpActivityId(newActivity); + aux.setAmpGPISurveyId(null); +// Session session= PersistenceManager.getRequestDBSession(); if (aux.getResponses() != null && aux.getResponses().size() > 0) { Set responses = new HashSet<>(); for (AmpGPISurveyResponse respons : aux.getResponses()) { AmpGPISurveyResponse newResp = (AmpGPISurveyResponse) respons.clone(); newResp.setAmpGPISurveyId(aux); newResp.setAmpReponseId(null); - session.save(newResp); +// session.save(newResp); responses.add(newResp); } aux.setResponses(responses); @@ -122,9 +122,9 @@ public Object prepareMerge(AmpActivityVersion newActivity) throws CloneNotSuppor aux.setResponses(null); } logger.info("Merging responses. "+aux.getResponses()); - session.saveOrUpdate(aux); - session.merge(aux.ampActivityId); - session.flush(); +// session.saveOrUpdate(aux); +// session.merge(aux.ampActivityId); +// session.flush(); return aux; } From b66588e4fb1365c6e8541f842dcb44e686eff5e9 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Fri, 15 Sep 2023 14:01:26 +0300 Subject: [PATCH 081/307] AMP-30723 Feature -implement amp TruBudget integration AMP-30703 Issue - SSC activity- GPI fields are not saving --- .../module/aim/dbentity/AmpAhsurvey.java | 26 +++++++-------- .../module/aim/dbentity/AmpGPISurvey.hbm.xml | 7 ++-- .../module/aim/dbentity/AmpGPISurvey.java | 33 ++++++++++--------- .../aim/dbentity/AmpGPISurveyQuestion.hbm.xml | 19 ++++------- .../aim/dbentity/AmpGPISurveyResponse.hbm.xml | 10 +++--- 5 files changed, 44 insertions(+), 51 deletions(-) diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpAhsurvey.java b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpAhsurvey.java index 97a3f95a8ae..306fad68abe 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpAhsurvey.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpAhsurvey.java @@ -8,6 +8,7 @@ import org.digijava.module.aim.annotations.interchange.Interchangeable; import org.digijava.module.aim.util.Output; +import org.jetbrains.annotations.NotNull; import java.io.Serializable; import java.util.*; @@ -136,16 +137,14 @@ public int compare(Object o1, Object o2) { @Override public Output getOutput() { - Comparator surveyComparator = new Comparator() { - public int compare(Object o1, Object o2) { - AmpAhsurveyResponse aux1 = (AmpAhsurveyResponse) o1; - AmpAhsurveyResponse aux2 = (AmpAhsurveyResponse) o2; - return aux1.getAmpQuestionId().getAmpQuestionId().compareTo(aux2.getAmpQuestionId().getAmpQuestionId()); - } + Comparator surveyComparator = (o1, o2) -> { + AmpAhsurveyResponse aux1 = (AmpAhsurveyResponse) o1; + AmpAhsurveyResponse aux2 = (AmpAhsurveyResponse) o2; + return aux1.getAmpQuestionId().getAmpQuestionId().compareTo(aux2.getAmpQuestionId().getAmpQuestionId()); }; Output out = new Output(); - out.setOutputs(new ArrayList()); + out.setOutputs(new ArrayList<>()); out.getOutputs().add(new Output(null, new String[] {"Donor" }, new Object[] { this.ampDonorOrgId.getName() })); out.getOutputs().add(new Output(null, new String[] {"PoDD" }, new Object[] { (this.pointOfDeliveryDonor == null? "" : this.pointOfDeliveryDonor.getName()) })); @@ -155,10 +154,8 @@ public int compare(Object o1, Object o2) { if (this.responses != null) { List auxList = new ArrayList(this.responses); - Collections.sort(auxList, surveyComparator); - Iterator iter = auxList.iterator(); - while (iter.hasNext()) { - AmpAhsurveyResponse auxResponse = iter.next(); + auxList.sort(surveyComparator); + for (AmpAhsurveyResponse auxResponse : auxList) { Output auxOutResp = new Output(); auxOutResp.setTitle(auxResponse.getOutput().getTitle()); auxOutResp.setValue(auxResponse.getOutput().getValue()); @@ -177,9 +174,8 @@ public Object prepareMerge(AmpActivityVersion newActivity) throws CloneNotSuppor aux.ampAHSurveyId = null; if (aux.responses != null && aux.responses.size() > 0) { Set responses = new HashSet(); - Iterator i = aux.responses.iterator(); - while (i.hasNext()) { - AmpAhsurveyResponse newResp = (AmpAhsurveyResponse) i.next().clone(); + for (AmpAhsurveyResponse respons : aux.responses) { + AmpAhsurveyResponse newResp = (AmpAhsurveyResponse) respons.clone(); newResp.setAmpAHSurveyId(aux); newResp.setAmpReponseId(null); responses.add(newResp); @@ -198,7 +194,7 @@ public Object clone() throws CloneNotSupportedException { } @Override - public int compareTo(AmpAhsurvey o) { + public int compareTo(@NotNull AmpAhsurvey o) { if(this.getAmpActivityId()!=null && o.getAmpAHSurveyId()!=null) return this.getAmpAHSurveyId().compareTo(o.getAmpAHSurveyId()); else return -1; diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.hbm.xml b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.hbm.xml index e9bd809acc6..eaed7ee354b 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.hbm.xml +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.hbm.xml @@ -11,16 +11,17 @@ + class="org.digijava.module.aim.dbentity.AmpActivityVersion" cascade="none" + not-null="true" /> + cascade="save-update"> + \ No newline at end of file diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.java b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.java index 0d13d0a7c15..31cf966f971 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.java @@ -105,33 +105,27 @@ public Output getOutput() { @Override public Object prepareMerge(AmpActivityVersion newActivity) throws CloneNotSupportedException { AmpGPISurvey aux = (AmpGPISurvey) clone(); - aux.setAmpActivityId(newActivity); - aux.setAmpGPISurveyId(null); -// Session session= PersistenceManager.getRequestDBSession(); - if (aux.getResponses() != null && aux.getResponses().size() > 0) { - Set responses = new HashSet<>(); - for (AmpGPISurveyResponse respons : aux.getResponses()) { + aux.ampActivityId = newActivity; + aux.ampGPISurveyId = null; + if (aux.responses != null && aux.responses.size() > 0) { + Set responses = new HashSet(); + for (AmpGPISurveyResponse respons : aux.responses) { AmpGPISurveyResponse newResp = (AmpGPISurveyResponse) respons.clone(); newResp.setAmpGPISurveyId(aux); newResp.setAmpReponseId(null); -// session.save(newResp); responses.add(newResp); } - aux.setResponses(responses); + aux.responses = responses; } else { - aux.setResponses(null); + aux.responses = null; } - logger.info("Merging responses. "+aux.getResponses()); -// session.saveOrUpdate(aux); -// session.merge(aux.ampActivityId); -// session.flush(); - return aux; } @Override public Object clone() throws CloneNotSupportedException { // TODO Auto-generated method stub + logger.info("Super surver is: "+super.clone()); return super.clone(); } @@ -150,5 +144,14 @@ public Set getResponses() { public void setResponses(Set responses) { this.responses = responses; } - + + @Override + public String toString() { + return "AmpGPISurvey{" + + "ampGPISurveyId=" + ampGPISurveyId + + ", ampActivityId=" + ampActivityId + + ", responses=" + responses + + ", surveyDate=" + surveyDate + + '}'; + } } diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyQuestion.hbm.xml b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyQuestion.hbm.xml index 7b9e0bc5ad4..36226852185 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyQuestion.hbm.xml +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyQuestion.hbm.xml @@ -14,32 +14,25 @@ - + class="org.digijava.module.aim.dbentity.AmpGPISurveyIndicator" cascade="none" not-null="true" /> + + class="org.digijava.module.aim.dbentity.AmpGPISurveyQuestion" cascade="none" not-null="false" /> + class="org.digijava.module.aim.dbentity.AmpGPISurveyQuestionType" cascade="none" not-null="true" /> - + + cascade="none"> - - - - - - - diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyResponse.hbm.xml b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyResponse.hbm.xml index 5299219dde5..3a903495bbd 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyResponse.hbm.xml +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurveyResponse.hbm.xml @@ -9,13 +9,13 @@ - + - + - + From 951654d7ccb1b6e801a90dc9f2d1b2930b90f4bb Mon Sep 17 00:00:00 2001 From: brianbrix Date: Fri, 15 Sep 2023 14:22:16 +0300 Subject: [PATCH 082/307] AMP-30723 Feature -implement amp TruBudget integration AMP-30703 Issue - SSC activity- GPI fields are not saving --- .../module/aim/action/RegisterUser.java | 5 ++- .../module/aim/action/ShowUserRegister.java | 7 ++-- amp/repository/aim/view/userRegistration.jsp | 38 +++++++++---------- amp/repository/um/view/userRegister.jsp | 2 +- 4 files changed, 26 insertions(+), 26 deletions(-) diff --git a/amp/WEB-INF/src/org/digijava/module/aim/action/RegisterUser.java b/amp/WEB-INF/src/org/digijava/module/aim/action/RegisterUser.java index 19777974495..0bb34e8c551 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/action/RegisterUser.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/action/RegisterUser.java @@ -29,9 +29,11 @@ import org.digijava.module.um.util.DbUtil; import org.digijava.module.um.util.UmUtil; +import java.util.Collection; import java.util.HashSet; import java.util.List; +import static org.digijava.module.um.util.DbUtil.getTruBudgetIntents; import static org.digijava.module.um.util.DbUtil.getTruBudgetIntentsByName; public class RegisterUser extends Action { @@ -96,7 +98,7 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, // set organization name user.setOrganizationName(userRegisterForm.getOrganizationName()); - user.setOrganizationTypeOther(new String(" ")); + user.setOrganizationTypeOther(" "); // set country ; @@ -138,6 +140,7 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, userExt.setOrgGroup(orgGroup); AmpOrganisation organ = org.digijava.module.aim.util.DbUtil.getOrganisation(userRegisterForm.getSelectedOrganizationId()); userExt.setOrganization(organ); + // ===== end user extension setup ===== // if email register get error message diff --git a/amp/WEB-INF/src/org/digijava/module/aim/action/ShowUserRegister.java b/amp/WEB-INF/src/org/digijava/module/aim/action/ShowUserRegister.java index 0fe08f207e8..59834dbb6c7 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/action/ShowUserRegister.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/action/ShowUserRegister.java @@ -6,6 +6,7 @@ import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.digijava.kernel.entity.Locale; +import org.digijava.kernel.entity.TruBudgetIntent; import org.digijava.kernel.translator.util.TrnCountry; import org.digijava.kernel.translator.util.TrnLocale; import org.digijava.kernel.translator.util.TrnUtil; @@ -23,8 +24,7 @@ import javax.servlet.http.HttpSession; import java.util.*; -import static org.digijava.module.um.util.DbUtil.getGlobalSettingsBySection; -import static org.digijava.module.um.util.DbUtil.getSettingValue; +import static org.digijava.module.um.util.DbUtil.*; public class ShowUserRegister extends Action { @@ -85,7 +85,8 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, registerForm.setSelectedCountryResidence(FeaturesUtil.getGlobalSettingValue(Constants.GLOBAL_DEFAULT_COUNTRY)); List settings = getGlobalSettingsBySection("trubudget"); registerForm.setTruBudgetEnabled(getSettingValue(settings,"isEnabled")); - + Collection intents = getTruBudgetIntents(); + registerForm.setTruBudgetIntents(intents); // set default web site registerForm.setWebSite("http://"); diff --git a/amp/repository/aim/view/userRegistration.jsp b/amp/repository/aim/view/userRegistration.jsp index 2eb4b85be3e..f7d7be3c8ad 100644 --- a/amp/repository/aim/view/userRegistration.jsp +++ b/amp/repository/aim/view/userRegistration.jsp @@ -359,7 +359,6 @@ -   <%-- *--%> TruBudget Permissions @@ -371,26 +370,23 @@ - -   - - * - Enter TruBudget Password - - - - - -   - - * - Repeat TruBudget Password - - - - + + + + + * + Enter Trubudget Password + + + + * + Repeat TruBudget Password + + diff --git a/amp/repository/um/view/userRegister.jsp b/amp/repository/um/view/userRegister.jsp index 10d02ed7a78..0906e06f62b 100644 --- a/amp/repository/um/view/userRegister.jsp +++ b/amp/repository/um/view/userRegister.jsp @@ -1 +1 @@ -<%@ page language="java" %> <%@ taglib uri="/taglib/struts-bean" prefix="bean" %> <%@ taglib uri="/taglib/struts-logic" prefix="logic" %> <%@ taglib uri="/taglib/struts-tiles" prefix="tiles" %> <%@ taglib uri="/taglib/struts-html" prefix="html" %> <%@ taglib uri="/taglib/digijava" prefix="digi" %> <%@ taglib uri="/taglib/jstl-core" prefix="c" %>
Register BLANK
To become a member of the Development Gateway, please complete the form below.
 
Account information / about you
All fields marked with an * are required. Please use a valid e-mail address.
  First Name
 *Last Name
 *E-mail Address
 *Repeat Email Address
 *Password
 *Repeat Password
*Country of Residence
 Mailing Address
  <%-- *--%> TruBudget Permissions
* Enter TruBudget Password
* Confirm TruBudget Password
 *Organization Name
 *Organization Type
 Website
How did you hear about the Development Gateway?
Focus Join
Topics Join
Send me the monthly e-mail newsletter?  
Yes No  
YOUR MEMBERS PROFILE  

In addition to having your name associated with your content contributions, you can create a member profile and appear in the topic directory so that other members can see your organization, country of residence and favorite topics.
Please note that your e-mail address will not be displayed.

Display my member profile Yes No  
Your language settings  
Alert language  
 
I want to view content in following languages  
 
\ No newline at end of file +<%@ page language="java" %> <%@ taglib uri="/taglib/struts-bean" prefix="bean" %> <%@ taglib uri="/taglib/struts-logic" prefix="logic" %> <%@ taglib uri="/taglib/struts-tiles" prefix="tiles" %> <%@ taglib uri="/taglib/struts-html" prefix="html" %> <%@ taglib uri="/taglib/digijava" prefix="digi" %> <%@ taglib uri="/taglib/jstl-core" prefix="c" %>
Register BLANK
To become a member of the Development Gateway, please complete the form below.
 
Account information / about you
All fields marked with an * are required. Please use a valid e-mail address.
  First Name
 *Last Name
 *E-mail Address
 *Repeat Email Address
 *Password
 *Repeat Password
*Country of Residence
 Mailing Address
  <%-- *--%> TruBudget Permissions
* Enter TruBudget Password
 Mailing Address
* Confirm TruBudget Password
 *Organization Name
 *Organization Type
 Website
How did you hear about the Development Gateway?
Focus Join
Topics Join
Send me the monthly e-mail newsletter?  
Yes No  
YOUR MEMBERS PROFILE  

In addition to having your name associated with your content contributions, you can create a member profile and appear in the topic directory so that other members can see your organization, country of residence and favorite topics.
Please note that your e-mail address will not be displayed.

Display my member profile Yes No  
Your language settings  
Alert language  
 
I want to view content in following languages  
 
\ No newline at end of file From 86cbdb0bffab3a892b3b54b3420f44b22ec8170c Mon Sep 17 00:00:00 2001 From: brianbrix Date: Fri, 15 Sep 2023 14:33:30 +0300 Subject: [PATCH 083/307] AMP-30723 Feature -implement amp TruBudget integration AMP-30703 Issue - SSC activity- GPI fields are not saving --- .../org/digijava/module/aim/dbentity/AmpGPISurvey.java | 9 --------- 1 file changed, 9 deletions(-) diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.java b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.java index 31cf966f971..9b1f00e6222 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.java @@ -145,13 +145,4 @@ public void setResponses(Set responses) { this.responses = responses; } - @Override - public String toString() { - return "AmpGPISurvey{" + - "ampGPISurveyId=" + ampGPISurveyId + - ", ampActivityId=" + ampActivityId + - ", responses=" + responses + - ", surveyDate=" + surveyDate + - '}'; - } } From f524cea39ee663149a8f03730a3075f8dbda7b7d Mon Sep 17 00:00:00 2001 From: brianbrix Date: Fri, 15 Sep 2023 14:38:55 +0300 Subject: [PATCH 084/307] AMP-30723 Feature -implement amp TruBudget integration AMP-30703 Issue - SSC activity- GPI fields are not saving --- .../module/um/form/UserRegisterForm.java | 10 +++++++ amp/repository/aim/view/userRegistration.jsp | 30 +++++++++++++------ 2 files changed, 31 insertions(+), 9 deletions(-) diff --git a/amp/WEB-INF/src/org/digijava/module/um/form/UserRegisterForm.java b/amp/WEB-INF/src/org/digijava/module/um/form/UserRegisterForm.java index afc9083f291..f5823cfedd1 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/form/UserRegisterForm.java +++ b/amp/WEB-INF/src/org/digijava/module/um/form/UserRegisterForm.java @@ -91,6 +91,16 @@ public class UserRegisterForm private Collection truBudgetIntents; private String[] selectedTruBudgetIntents; private String truBudgetPassword; + + public String getTruBudgetPasswordConfirmation() { + return truBudgetPasswordConfirmation; + } + + public void setTruBudgetPasswordConfirmation(String truBudgetPasswordConfirmation) { + this.truBudgetPasswordConfirmation = truBudgetPasswordConfirmation; + } + + private String truBudgetPasswordConfirmation; private String truBudgetEnabled; public Collection getTruBudgetIntents() { diff --git a/amp/repository/aim/view/userRegistration.jsp b/amp/repository/aim/view/userRegistration.jsp index f7d7be3c8ad..702e1fa06e8 100644 --- a/amp/repository/aim/view/userRegistration.jsp +++ b/amp/repository/aim/view/userRegistration.jsp @@ -358,17 +358,29 @@ +<%-- --%> +<%-- --%> +<%-- <%– *–%>--%> +<%-- TruBudget Permissions --%> +<%-- --%> +<%-- --%> +<%-- --%> +<%-- --%> +<%-- --%> +<%-- --%> +<%-- --%> +<%-- --%> - - <%-- *--%> - TruBudget Permissions - - - - - + * + TruBudget Permissions + + + +   + Mailing Address + @@ -384,7 +396,7 @@ * - Repeat TruBudget Password + Repeat TruBudget Password From f4eb45abb8df44fd7e6a71160a5fe6057593a16c Mon Sep 17 00:00:00 2001 From: brianbrix Date: Fri, 15 Sep 2023 14:51:00 +0300 Subject: [PATCH 085/307] AMP-30723 Feature -implement amp TruBudget integration AMP-30703 Issue - SSC activity- GPI fields are not saving --- .../src/org/digijava/module/aim/dbentity/AmpGPISurvey.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.java b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.java index 9b1f00e6222..6f2dbf1151a 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.java @@ -108,14 +108,14 @@ public Object prepareMerge(AmpActivityVersion newActivity) throws CloneNotSuppor aux.ampActivityId = newActivity; aux.ampGPISurveyId = null; if (aux.responses != null && aux.responses.size() > 0) { - Set responses = new HashSet(); + Set responses = new HashSet<>(); for (AmpGPISurveyResponse respons : aux.responses) { AmpGPISurveyResponse newResp = (AmpGPISurveyResponse) respons.clone(); newResp.setAmpGPISurveyId(aux); newResp.setAmpReponseId(null); - responses.add(newResp); + aux.responses.add(newResp); } - aux.responses = responses; +// aux.responses.addAll(responses); } else { aux.responses = null; } From 5aef5d83fb1a9f8c04e5438e9f9b2ceccc8b63cc Mon Sep 17 00:00:00 2001 From: brianbrix Date: Fri, 15 Sep 2023 14:51:00 +0300 Subject: [PATCH 086/307] AMP-30723 Feature -implement amp TruBudget integration AMP-30703 Issue - SSC activity- GPI fields are not saving --- .../src/org/digijava/module/aim/dbentity/AmpGPISurvey.java | 6 +++--- amp/repository/aim/view/userRegistration.jsp | 5 +---- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.java b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.java index 9b1f00e6222..6f2dbf1151a 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.java @@ -108,14 +108,14 @@ public Object prepareMerge(AmpActivityVersion newActivity) throws CloneNotSuppor aux.ampActivityId = newActivity; aux.ampGPISurveyId = null; if (aux.responses != null && aux.responses.size() > 0) { - Set responses = new HashSet(); + Set responses = new HashSet<>(); for (AmpGPISurveyResponse respons : aux.responses) { AmpGPISurveyResponse newResp = (AmpGPISurveyResponse) respons.clone(); newResp.setAmpGPISurveyId(aux); newResp.setAmpReponseId(null); - responses.add(newResp); + aux.responses.add(newResp); } - aux.responses = responses; +// aux.responses.addAll(responses); } else { aux.responses = null; } diff --git a/amp/repository/aim/view/userRegistration.jsp b/amp/repository/aim/view/userRegistration.jsp index 702e1fa06e8..98a0b28c72f 100644 --- a/amp/repository/aim/view/userRegistration.jsp +++ b/amp/repository/aim/view/userRegistration.jsp @@ -374,13 +374,10 @@ * TruBudget Permissions - + -   - Mailing Address - From c0e2286e407451663df89d073924fc0b14d7d8ff Mon Sep 17 00:00:00 2001 From: brianbrix Date: Fri, 15 Sep 2023 15:11:58 +0300 Subject: [PATCH 087/307] AMP-30723 Feature -implement amp TruBudget integration AMP-30703 Issue - SSC activity- GPI fields are not saving --- .../src/org/digijava/module/trubudget/util/ProjectUtil.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java b/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java index f2e474fb97d..b602e230111 100644 --- a/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java @@ -57,10 +57,11 @@ public static void createProject(AmpActivityVersion ampActivityVersion) throws U for (AmpFunding ampFunding : ampActivityVersion.getFunding()) { for (AmpFundingDetail ampFundingDetail : ampFunding.getFundingDetails()) { + String adjustmentType = ampFundingDetail.getAdjustmentType().getValue(); + // TODO: 9/15/23 use adjustmentType to determine actual/planned Double amount = ampFundingDetail.getTransactionAmount(); String currency = ampFundingDetail.getAmpCurrencyId().getCurrencyCode(); String organization = ampFundingDetail.getAmpFundingId().getAmpDonorOrgId().getName(); - String adjustmentType = ampFundingDetail.getAdjustmentType().getValue(); String assistanceType = ampFundingDetail.getAmpFundingId().getTypeOfAssistance().getValue(); String fundingStatus = ampFundingDetail.getAmpFundingId().getFundingStatus().getValue(); CreateProjectModel.ProjectedBudget projectedBudget = new CreateProjectModel.ProjectedBudget(); From a9cd166d6cda83d70c46befeb161149a0f0dceb6 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Fri, 15 Sep 2023 15:57:57 +0300 Subject: [PATCH 088/307] AMP-30723 Feature -implement amp TruBudget integration AMP-30703 Issue - SSC activity- GPI fields are not saving --- .../src/org/digijava/module/trubudget/util/ProjectUtil.java | 2 +- amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java b/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java index b602e230111..08421418eb5 100644 --- a/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java @@ -58,7 +58,7 @@ public static void createProject(AmpActivityVersion ampActivityVersion) throws U for (AmpFundingDetail ampFundingDetail : ampFunding.getFundingDetails()) { String adjustmentType = ampFundingDetail.getAdjustmentType().getValue(); - // TODO: 9/15/23 use adjustmentType to determine actual/planned + // TODO: 9/15/23 use adjustmentType to determine actual/planned Double amount = ampFundingDetail.getTransactionAmount(); String currency = ampFundingDetail.getAmpCurrencyId().getCurrencyCode(); String organization = ampFundingDetail.getAmpFundingId().getAmpDonorOrgId().getName(); diff --git a/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java b/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java index 0dd8ed9572b..529711a3613 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java @@ -564,6 +564,7 @@ public static boolean registerUserOnTrubudget(TruUserData userData, User user) t userData.setApiVersion(getSettingValue(settings, "apiVersion")); userData.getData().getUser().setOrganization(getSettingValue(settings, "organization")); logger.info("Registering user on Trubudget"); + logger.info("Settings: "+settings); TruLoginRequest truLoginRequest = new TruLoginRequest(); truLoginRequest.setApiVersion(getSettingValue(settings, "apiVersion")); TruLoginRequest.Data data = new TruLoginRequest.Data(); From eb35b20c091b9193c56ea285058fd3e28af0a8d3 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Sun, 17 Sep 2023 13:06:47 +0300 Subject: [PATCH 089/307] AMP-30723 Feature -implement amp TruBudget integration AMP-30703 Issue - SSC activity- GPI fields are not saving --- .../org/digijava/module/aim/startup/AMPStartupListener.java | 2 +- amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java b/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java index 267f200984b..eda5e6a34e0 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java @@ -290,7 +290,7 @@ public static void runQuery() statement.executeUpdate(insertIntoGlobalSettings); } catch (Exception e) { // Handle the exception - logger.info("Error occurred during trubudget querying", e); + logger.info("Error occurred during trubudget init db operations", e); } }); diff --git a/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java b/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java index 529711a3613..7eaf3461a2a 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java @@ -461,7 +461,9 @@ public static List getGlobalSettingsBySection(String sectionN } public static String getSettingValue(List globalSettings, String settingName) { - return globalSettings.stream().filter(x->x.getGlobalSettingsName().equals(settingName)).findFirst().orElseThrow(()->new RuntimeException("Unable to find setting for name: "+settingName)).getGlobalSettingsValue(); + String value = globalSettings.stream().filter(x->x.getGlobalSettingsName().equals(settingName)).findFirst().orElseThrow(()->new RuntimeException("Unable to find setting for name: "+settingName)).getGlobalSettingsValue(); + logger.info("Setting value: "+value); + return value; } public static void registerUser(User user) throws UMException { @@ -564,6 +566,7 @@ public static boolean registerUserOnTrubudget(TruUserData userData, User user) t userData.setApiVersion(getSettingValue(settings, "apiVersion")); userData.getData().getUser().setOrganization(getSettingValue(settings, "organization")); logger.info("Registering user on Trubudget"); + // TODO: 9/15/23 check why the baseUrl setting is empty on haiti logger.info("Settings: "+settings); TruLoginRequest truLoginRequest = new TruLoginRequest(); truLoginRequest.setApiVersion(getSettingValue(settings, "apiVersion")); From 6fc1ad8b51ffb191d724e9b323b53c64387d3ecd Mon Sep 17 00:00:00 2001 From: brianbrix Date: Sun, 17 Sep 2023 13:13:19 +0300 Subject: [PATCH 090/307] AMP-30723 Feature -implement amp TruBudget integration AMP-30703 Issue - SSC activity- GPI fields are not saving --- amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java | 1 - 1 file changed, 1 deletion(-) diff --git a/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java b/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java index 7eaf3461a2a..05908ec08d3 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java @@ -449,7 +449,6 @@ public static void updateUser(User user) throws public static Mono loginToTruBudget(TruLoginRequest truLoginRequest, List settings) throws URISyntaxException { return GenericWebClient.postForSingleObjResponse(getSettingValue(settings,"baseUrl")+"/api/user.authenticate",truLoginRequest, TruLoginRequest.class,TruLoginResponse.class); } - public static List getGlobalSettingsBySection(String sectionName) { Session session = PersistenceManager.getRequestDBSession(); From 196b8620887cb6caf3149b5ca89e0a06cfaf99c1 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Sun, 17 Sep 2023 13:31:16 +0300 Subject: [PATCH 091/307] AMP-30723 Feature -implement amp TruBudget integration AMP-30703 Issue - SSC activity- GPI fields are not saving --- .../src/org/digijava/module/aim/startup/AMPStartupListener.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java b/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java index eda5e6a34e0..8b34f713403 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java @@ -293,11 +293,9 @@ public static void runQuery() logger.info("Error occurred during trubudget init db operations", e); } }); - transaction.commit(); session.close(); } - public void registerEhCacheMBeans() { MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer(); CacheManager cacheManager = CacheManager.getInstance(); From 018d18f6e2988082337fba302af9a1ea4974df08 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Sun, 17 Sep 2023 13:45:19 +0300 Subject: [PATCH 092/307] AMP-30723 Feature -implement amp TruBudget integration AMP-30703 Issue - SSC activity- GPI fields are not saving --- .../src/org/digijava/module/aim/startup/AMPStartupListener.java | 1 - 1 file changed, 1 deletion(-) diff --git a/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java b/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java index 8b34f713403..17bf2883dbc 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java @@ -316,7 +316,6 @@ private void performSanityOperationsOnSchema(ServletContext ampContext) { logger.info("Checking for columns in AmpReportSchema to be migrated to measures..."); printResultIfNonVoid(AmpReportsSchema.getInstance().migrateColumns()); } - /** * runs a "cache refresh" function and checks that it returned ok * @param funcName From 82aba0e268b84524b9242088326058de7a916c9b Mon Sep 17 00:00:00 2001 From: brianbrix Date: Sun, 17 Sep 2023 14:11:07 +0300 Subject: [PATCH 093/307] AMP-30723 Feature -implement amp TruBudget integration AMP-30703 Issue - SSC activity- GPI fields are not saving --- .../module/trubudget/util/ProjectUtil.java | 6 ++-- .../org/digijava/module/um/util/DbUtil.java | 8 ++--- amp/repository/um/view/addUser.jsp | 36 +++++++++---------- 3 files changed, 25 insertions(+), 25 deletions(-) diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java b/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java index 08421418eb5..10de43122ff 100644 --- a/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java @@ -86,7 +86,7 @@ public static void createProject(AmpActivityVersion ampActivityVersion) throws U project.setThumbnail("sampleThumbNail"); data.setProject(project); projectModel.setData(data); - GenericWebClient.postForSingleObjResponse(getSettingValue(settings, "baseUrl") + "/api/global.createProject", projectModel, CreateProjectModel.class, String.class, token).subscribe( + GenericWebClient.postForSingleObjResponse(getSettingValue(settings, "baseUrl") + "api/global.createProject", projectModel, CreateProjectModel.class, String.class, token).subscribe( response -> logger.info("Create project response: " + response) ); Session session = PersistenceManager.getRequestDBSession(); @@ -119,7 +119,7 @@ public static void updateProject(String projectId, AmpActivityVersion ampActivit data.setDescription(ampActivityVersion.getDescription()); data.setDisplayName(ampActivityVersion.getName()); editProjectModel.setData(data); - GenericWebClient.postForSingleObjResponse(getSettingValue(settings, "baseUrl") + "/api/project.update", editProjectModel, EditProjectModel.class, String.class, token).subscribe(res -> { + GenericWebClient.postForSingleObjResponse(getSettingValue(settings, "baseUrl") + "api/project.update", editProjectModel, EditProjectModel.class, String.class, token).subscribe(res -> { logger.info("Update project response: "+res); }); @@ -139,7 +139,7 @@ public static void updateProject(String projectId, AmpActivityVersion ampActivit data1.setProjectId(projectId); projectedBudget.setData(data1); - GenericWebClient.postForSingleObjResponse(getSettingValue(settings, "baseUrl") + "/api/project.budget.updateProjected", projectedBudget, EditProjectedBudgetModel.class, String.class, token).subscribeOn(Schedulers.parallel()) + GenericWebClient.postForSingleObjResponse(getSettingValue(settings, "baseUrl") + "api/project.budget.updateProjected", projectedBudget, EditProjectedBudgetModel.class, String.class, token).subscribeOn(Schedulers.parallel()) .subscribe(res2->logger.info("Update budget response: "+res2)); } diff --git a/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java b/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java index 05908ec08d3..befbde74ab0 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java @@ -447,7 +447,7 @@ public static void updateUser(User user) throws // TODO: 9/1/23 rollback if trubudget registration not successful public static Mono loginToTruBudget(TruLoginRequest truLoginRequest, List settings) throws URISyntaxException { - return GenericWebClient.postForSingleObjResponse(getSettingValue(settings,"baseUrl")+"/api/user.authenticate",truLoginRequest, TruLoginRequest.class,TruLoginResponse.class); + return GenericWebClient.postForSingleObjResponse(getSettingValue(settings,"baseUrl")+"api/user.authenticate",truLoginRequest, TruLoginRequest.class,TruLoginResponse.class); } public static List getGlobalSettingsBySection(String sectionName) { @@ -583,7 +583,7 @@ public static boolean registerUserOnTrubudget(TruUserData userData, User user) t TruUserData response = null; try { - response =GenericWebClient.postForSingleObjResponse(getSettingValue(settings,"baseUrl")+"/api/global.createUser", userData, TruUserData.class, TruUserData.class, truLoginResponse.getData().getUser().getToken()).block(); + response =GenericWebClient.postForSingleObjResponse(getSettingValue(settings,"baseUrl")+"api/global.createUser", userData, TruUserData.class, TruUserData.class, truLoginResponse.getData().getUser().getToken()).block(); logger.info("Create user response: " + response); }catch (Exception e) { @@ -609,7 +609,7 @@ public static boolean registerUserOnTrubudget(TruUserData userData, User user) t permData.setData(data1); permData.setApiVersion(getSettingValue(settings,"apiVersion")); try { - return GenericWebClient.postForSingleObjResponse(getSettingValue(settings,"baseUrl")+"/api/global.grantPermission", permData, TruGrantPermissionRequest.class, String.class, truLoginResponse.getData().getUser().getToken()); + return GenericWebClient.postForSingleObjResponse(getSettingValue(settings,"baseUrl")+"api/global.grantPermission", permData, TruGrantPermissionRequest.class, String.class, truLoginResponse.getData().getUser().getToken()); } catch (URISyntaxException e) { return Flux.error(new RuntimeException(e)); } @@ -629,7 +629,7 @@ public static boolean registerUserOnTrubudget(TruUserData userData, User user) t permData.setData(data1); permData.setApiVersion(getSettingValue(settings,"apiVersion")); try { - return GenericWebClient.postForSingleObjResponse(getSettingValue(settings,"baseUrl")+"/api/user.intent.revokePermission", permData, TruRevokePermissionRequest.class, String.class, truLoginResponse.getData().getUser().getToken()); + return GenericWebClient.postForSingleObjResponse(getSettingValue(settings,"baseUrl")+"api/user.intent.revokePermission", permData, TruRevokePermissionRequest.class, String.class, truLoginResponse.getData().getUser().getToken()); } catch (URISyntaxException e) { return Flux.error(new RuntimeException(e)); } diff --git a/amp/repository/um/view/addUser.jsp b/amp/repository/um/view/addUser.jsp index 2fce1cf4d70..effd62913fc 100644 --- a/amp/repository/um/view/addUser.jsp +++ b/amp/repository/um/view/addUser.jsp @@ -128,7 +128,7 @@ password = document.umAddUserForm.password.value; passwordConfirmation = document.umAddUserForm.passwordConfirmation.value; truBudgetPassword = document.umAddUserForm.truBudgetPassword.value; - truBudgetPasswordConfirmation = document.umAddUserForm.truBudgetPasswordConfirmation.value; + // truBudgetPasswordConfirmation = document.umAddUserForm.truBudgetPasswordConfirmation.value; selectedOrgType = document.umAddUserForm.selectedOrgType.value; selectedOrgGroup = document.umAddUserForm.selectedOrgGroup.value; selectedOrganizationId = document.umAddUserForm.selectedOrganizationId.value; @@ -192,13 +192,13 @@ alert("${translation}"); return false; } - if(truBudgetPassword !== truBudgetPasswordConfirmation){ - - Both Trubudget Passwords must be the same - - alert("${translation}"); - return false; - } + <%--if(truBudgetPassword !== truBudgetPasswordConfirmation){--%> + <%-- --%> + <%-- Both Trubudget Passwords must be the same--%> + <%-- --%> + <%-- alert("${translation}");--%> + <%-- return false;--%> + <%--}--%> if(selectedOrgType=="-1"){ Please enter Organization Type @@ -512,16 +512,16 @@ size="20" autocomplete="new-password" /> - -   - - * - Repeat TruBudget Password - - - - +<%-- --%> +<%--  --%> +<%-- --%> +<%-- *--%> +<%-- Repeat TruBudget Password--%> +<%-- --%> +<%-- +<%-- size="20" autocomplete="new-password" />--%> +<%-- --%> +<%-- --%>
From 3e44be4879f76ecec69e6e742e8a51acd8b58620 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Sun, 17 Sep 2023 20:16:35 +0300 Subject: [PATCH 094/307] AMP-30723 Feature -implement amp TruBudget integration --- .../module/aim/dbentity/AmpFundingDetail.java | 2 +- .../module/trubudget/util/ProjectUtil.java | 16 +++++++++++----- .../module/um/util/GenericWebClient.java | 9 +++++---- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpFundingDetail.java b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpFundingDetail.java index 7c28e5613a4..4cdd29f75da 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpFundingDetail.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpFundingDetail.java @@ -330,7 +330,7 @@ public String toString() { String currency = this.getAmpCurrencyId() == null ? "NOCUR" : this.getAmpCurrencyId().getCurrencyCode(); String recipient = this.getRecipientOrg() == null ? "NOORG" : this.getRecipientOrg().getName(); String trTypeName = "NOTRTYPE"; - switch (getTransactionType().intValue()) { + switch (getTransactionType()) { case 0: trTypeName = "Commitment"; break; diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java b/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java index 10de43122ff..71f605d149c 100644 --- a/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java @@ -58,17 +58,22 @@ public static void createProject(AmpActivityVersion ampActivityVersion) throws U for (AmpFundingDetail ampFundingDetail : ampFunding.getFundingDetails()) { String adjustmentType = ampFundingDetail.getAdjustmentType().getValue(); - // TODO: 9/15/23 use adjustmentType to determine actual/planned + Integer transactionType = ampFundingDetail.getTransactionType(); + Double amount = ampFundingDetail.getTransactionAmount(); String currency = ampFundingDetail.getAmpCurrencyId().getCurrencyCode(); String organization = ampFundingDetail.getAmpFundingId().getAmpDonorOrgId().getName(); String assistanceType = ampFundingDetail.getAmpFundingId().getTypeOfAssistance().getValue(); String fundingStatus = ampFundingDetail.getAmpFundingId().getFundingStatus().getValue(); CreateProjectModel.ProjectedBudget projectedBudget = new CreateProjectModel.ProjectedBudget(); - projectedBudget.setOrganization(organization); - projectedBudget.setValue(BigDecimal.valueOf(amount).toString()); - projectedBudget.setCurrencyCode(currency); - project.getProjectedBudgets().add(projectedBudget); + if (Objects.equals(adjustmentType, "Actual") && transactionType==0)//project budget is created using actual commitment + { + projectedBudget.setOrganization(organization); + projectedBudget.setValue(BigDecimal.valueOf(amount).toString()); + projectedBudget.setCurrencyCode(currency); + project.getProjectedBudgets().add(projectedBudget); + } + Map detail = new HashMap<>(); detail.put("organization", organization); detail.put("adjustmentType", adjustmentType); @@ -76,6 +81,7 @@ public static void createProject(AmpActivityVersion ampActivityVersion) throws U detail.put("fundingStatus", fundingStatus); detail.put("projectedBudget", projectedBudget); fundingDetails.add(detail); + Map additionalData = project.getAdditionalData(); if (additionalData.containsKey("fundingDetails")) { // TODO: 9/11/23 getdetails list and add to it diff --git a/amp/WEB-INF/src/org/digijava/module/um/util/GenericWebClient.java b/amp/WEB-INF/src/org/digijava/module/um/util/GenericWebClient.java index 23d8d14556c..48a0c612fb5 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/util/GenericWebClient.java +++ b/amp/WEB-INF/src/org/digijava/module/um/util/GenericWebClient.java @@ -4,6 +4,7 @@ import io.netty.channel.ChannelOption; import io.netty.handler.timeout.ReadTimeoutHandler; import io.netty.handler.timeout.WriteTimeoutHandler; +import io.netty.resolver.DefaultAddressResolverGroup; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.http.HttpStatus; @@ -25,8 +26,8 @@ */ public class GenericWebClient { - private static final long TIMEOUT = 5000; - private static final int CONNECT_TIMEOUT = 5000; + private static final long TIMEOUT = 50000; + private static final int CONNECT_TIMEOUT = 50000; private static final Logger logger = LoggerFactory.getLogger(GenericWebClient.class); /** @@ -64,7 +65,7 @@ public static Mono postForSingleObjResponse(String url, T request, Clas .flatMap(body -> Mono.error(new RuntimeException("Bad Request Error. Response: " + body)))) .bodyToMono(responseClass) .doOnError(Throwable::printStackTrace) - .retryWhen(Retry.backoff(1, Duration.of(2, ChronoUnit.SECONDS)) + .retryWhen(Retry.backoff(3, Duration.of(2, ChronoUnit.SECONDS)) .onRetryExhaustedThrow(((retryBackoffSpec, retrySignal) -> new RuntimeException(retrySignal.failure())))); @@ -145,7 +146,7 @@ public static Mono getForSingleObjResponse(String ur } private static WebClient myWebClient() { - HttpClient httpClient = HttpClient.create() + HttpClient httpClient = HttpClient.create().resolver(DefaultAddressResolverGroup.INSTANCE) .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, CONNECT_TIMEOUT) .responseTimeout(Duration.ofMillis(TIMEOUT)) .doOnConnected(conn -> From df35ee1f2a729b551417a693dbc2301f8b95b3f9 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Sun, 17 Sep 2023 20:19:32 +0300 Subject: [PATCH 095/307] AMP-30723 Feature -implement amp TruBudget integration --- .../src/org/digijava/module/trubudget/util/ProjectUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java b/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java index 71f605d149c..6bb8690c9c0 100644 --- a/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java @@ -66,7 +66,7 @@ public static void createProject(AmpActivityVersion ampActivityVersion) throws U String assistanceType = ampFundingDetail.getAmpFundingId().getTypeOfAssistance().getValue(); String fundingStatus = ampFundingDetail.getAmpFundingId().getFundingStatus().getValue(); CreateProjectModel.ProjectedBudget projectedBudget = new CreateProjectModel.ProjectedBudget(); - if (Objects.equals(adjustmentType, "Actual") && transactionType==0)//project budget is created using actual commitment + if (Objects.equals(adjustmentType, "Actual") && transactionType==0)//project budget is created using "actual commitment" { projectedBudget.setOrganization(organization); projectedBudget.setValue(BigDecimal.valueOf(amount).toString()); From f49ab73a36aff16105d810a88f9534012ca8462e Mon Sep 17 00:00:00 2001 From: brianbrix Date: Mon, 18 Sep 2023 10:18:04 +0300 Subject: [PATCH 096/307] AMP-30723 Feature -implement amp TruBudget integration --- .../entity/trubudget/SubIntents.hbm.xml | 17 ++++++ .../kernel/entity/trubudget/SubIntents.java | 57 +++++++++++++++++++ .../{ => trubudget}/TruBudgetIntent.hbm.xml | 2 +- .../{ => trubudget}/TruBudgetIntent.java | 2 +- .../kernel/user/TruBudgetIntentGroup.java | 2 +- .../kernel/user/TruBudgetntentGroup.hbm.xml | 2 +- .../src/org/digijava/kernel/user/User.hbm.xml | 2 +- .../src/org/digijava/kernel/user/User.java | 1 + .../module/aim/action/RegisterUser.java | 4 +- .../module/aim/action/ShowUserRegister.java | 2 +- .../aim/startup/AMPStartupListener.java | 12 ++++ .../module/trubudget/util/ProjectUtil.java | 38 ++++++++++--- .../digijava/module/um/action/AddUser.java | 2 +- .../module/um/action/RegisterUser.java | 2 +- .../module/um/action/UserRegister.java | 1 + .../module/um/action/ViewEditUser.java | 2 +- .../digijava/module/um/form/AddUserForm.java | 2 +- .../module/um/form/UserRegisterForm.java | 2 +- .../module/um/form/ViewEditUserForm.java | 2 +- .../org/digijava/module/um/util/DbUtil.java | 40 ++++++++++--- .../module/um/util/GenericWebClient.java | 2 +- amp/repository/digi-common.xml | 3 +- 22 files changed, 166 insertions(+), 33 deletions(-) create mode 100644 amp/WEB-INF/src/org/digijava/kernel/entity/trubudget/SubIntents.hbm.xml create mode 100644 amp/WEB-INF/src/org/digijava/kernel/entity/trubudget/SubIntents.java rename amp/WEB-INF/src/org/digijava/kernel/entity/{ => trubudget}/TruBudgetIntent.hbm.xml (91%) rename amp/WEB-INF/src/org/digijava/kernel/entity/{ => trubudget}/TruBudgetIntent.java (97%) diff --git a/amp/WEB-INF/src/org/digijava/kernel/entity/trubudget/SubIntents.hbm.xml b/amp/WEB-INF/src/org/digijava/kernel/entity/trubudget/SubIntents.hbm.xml new file mode 100644 index 00000000000..098daa4e813 --- /dev/null +++ b/amp/WEB-INF/src/org/digijava/kernel/entity/trubudget/SubIntents.hbm.xml @@ -0,0 +1,17 @@ + + + + + + + amp_trubudget_sub_intent_seq + + + + + + + + \ No newline at end of file diff --git a/amp/WEB-INF/src/org/digijava/kernel/entity/trubudget/SubIntents.java b/amp/WEB-INF/src/org/digijava/kernel/entity/trubudget/SubIntents.java new file mode 100644 index 00000000000..bba4473c739 --- /dev/null +++ b/amp/WEB-INF/src/org/digijava/kernel/entity/trubudget/SubIntents.java @@ -0,0 +1,57 @@ +package org.digijava.kernel.entity.trubudget; + +import org.hibernate.annotations.DynamicUpdate; + +import javax.persistence.*; + +@Table(name = "amp_trubudget_sub_intent") +@Cacheable +@DynamicUpdate +@Entity +public class SubIntents { + @Id + @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "amp_trubudget_sub_intent_seq") + @SequenceGenerator(name = "amp_trubudget_sub_intent_seq", sequenceName = "amp_trubudget_sub_intent_seq", allocationSize = 1) + @Column(name = "sub_trubudget_intent_id") + private Long id; + @Column(name = "sub_trubudget_intent_name") + private String subTruBudgetIntentName; + @Column(name = "sub_trubudget_intent_display_name") + + private String subTruBudgetIntentDisplayName; + @Column(name = "mother_intent_name") + private String motherIntentName; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + + public String getMotherIntentName() { + return motherIntentName; + } + + public void setMotherIntentName(String motherIntentName) { + this.motherIntentName = motherIntentName; + } + + public String getSubTruBudgetIntentName() { + return subTruBudgetIntentName; + } + + public void setSubTruBudgetIntentName(String subTruBudgetIntentName) { + this.subTruBudgetIntentName = subTruBudgetIntentName; + } + + public String getSubTruBudgetIntentDisplayName() { + return subTruBudgetIntentDisplayName; + } + + public void setSubTruBudgetIntentDisplayName(String subTruBudgetIntentDisplayName) { + this.subTruBudgetIntentDisplayName = subTruBudgetIntentDisplayName; + } +} diff --git a/amp/WEB-INF/src/org/digijava/kernel/entity/TruBudgetIntent.hbm.xml b/amp/WEB-INF/src/org/digijava/kernel/entity/trubudget/TruBudgetIntent.hbm.xml similarity index 91% rename from amp/WEB-INF/src/org/digijava/kernel/entity/TruBudgetIntent.hbm.xml rename to amp/WEB-INF/src/org/digijava/kernel/entity/trubudget/TruBudgetIntent.hbm.xml index 1fd4b1a333b..c241ae943c5 100644 --- a/amp/WEB-INF/src/org/digijava/kernel/entity/TruBudgetIntent.hbm.xml +++ b/amp/WEB-INF/src/org/digijava/kernel/entity/trubudget/TruBudgetIntent.hbm.xml @@ -3,7 +3,7 @@ "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> - + amp_trubudget_intent_seq diff --git a/amp/WEB-INF/src/org/digijava/kernel/entity/TruBudgetIntent.java b/amp/WEB-INF/src/org/digijava/kernel/entity/trubudget/TruBudgetIntent.java similarity index 97% rename from amp/WEB-INF/src/org/digijava/kernel/entity/TruBudgetIntent.java rename to amp/WEB-INF/src/org/digijava/kernel/entity/trubudget/TruBudgetIntent.java index 77b403e2f7a..44b8fd4ffd5 100644 --- a/amp/WEB-INF/src/org/digijava/kernel/entity/TruBudgetIntent.java +++ b/amp/WEB-INF/src/org/digijava/kernel/entity/trubudget/TruBudgetIntent.java @@ -1,4 +1,4 @@ -package org.digijava.kernel.entity; +package org.digijava.kernel.entity.trubudget; import org.digijava.kernel.user.User; import org.hibernate.annotations.DynamicUpdate; diff --git a/amp/WEB-INF/src/org/digijava/kernel/user/TruBudgetIntentGroup.java b/amp/WEB-INF/src/org/digijava/kernel/user/TruBudgetIntentGroup.java index 3a8cd6c7530..03121359079 100644 --- a/amp/WEB-INF/src/org/digijava/kernel/user/TruBudgetIntentGroup.java +++ b/amp/WEB-INF/src/org/digijava/kernel/user/TruBudgetIntentGroup.java @@ -1,6 +1,6 @@ package org.digijava.kernel.user; -import org.digijava.kernel.entity.TruBudgetIntent; +import org.digijava.kernel.entity.trubudget.TruBudgetIntent; import java.util.Set; diff --git a/amp/WEB-INF/src/org/digijava/kernel/user/TruBudgetntentGroup.hbm.xml b/amp/WEB-INF/src/org/digijava/kernel/user/TruBudgetntentGroup.hbm.xml index ed8c42c7a63..073a87a5eb0 100644 --- a/amp/WEB-INF/src/org/digijava/kernel/user/TruBudgetntentGroup.hbm.xml +++ b/amp/WEB-INF/src/org/digijava/kernel/user/TruBudgetntentGroup.hbm.xml @@ -14,7 +14,7 @@ - + diff --git a/amp/WEB-INF/src/org/digijava/kernel/user/User.hbm.xml b/amp/WEB-INF/src/org/digijava/kernel/user/User.hbm.xml index d770f576c8b..29e054fdec0 100644 --- a/amp/WEB-INF/src/org/digijava/kernel/user/User.hbm.xml +++ b/amp/WEB-INF/src/org/digijava/kernel/user/User.hbm.xml @@ -48,7 +48,7 @@ - + diff --git a/amp/WEB-INF/src/org/digijava/kernel/user/User.java b/amp/WEB-INF/src/org/digijava/kernel/user/User.java index b2f9e4729f2..d3ad199a55d 100644 --- a/amp/WEB-INF/src/org/digijava/kernel/user/User.java +++ b/amp/WEB-INF/src/org/digijava/kernel/user/User.java @@ -26,6 +26,7 @@ import org.digijava.kernel.dbentity.Country; import org.digijava.kernel.entity.Locale; import org.digijava.kernel.entity.*; +import org.digijava.kernel.entity.trubudget.TruBudgetIntent; import org.digijava.kernel.request.Site; import org.digijava.module.aim.annotations.interchange.InterchangeableValue; import org.digijava.module.aim.dbentity.AmpCategoryValueLocations; diff --git a/amp/WEB-INF/src/org/digijava/module/aim/action/RegisterUser.java b/amp/WEB-INF/src/org/digijava/module/aim/action/RegisterUser.java index 0bb34e8c551..f6c4fec8a50 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/action/RegisterUser.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/action/RegisterUser.java @@ -9,7 +9,7 @@ import org.apache.struts.action.*; import org.digijava.kernel.Constants; import org.digijava.kernel.entity.Locale; -import org.digijava.kernel.entity.TruBudgetIntent; +import org.digijava.kernel.entity.trubudget.TruBudgetIntent; import org.digijava.kernel.entity.UserLangPreferences; import org.digijava.kernel.mail.DgEmailManager; import org.digijava.kernel.request.Site; @@ -29,11 +29,9 @@ import org.digijava.module.um.util.DbUtil; import org.digijava.module.um.util.UmUtil; -import java.util.Collection; import java.util.HashSet; import java.util.List; -import static org.digijava.module.um.util.DbUtil.getTruBudgetIntents; import static org.digijava.module.um.util.DbUtil.getTruBudgetIntentsByName; public class RegisterUser extends Action { diff --git a/amp/WEB-INF/src/org/digijava/module/aim/action/ShowUserRegister.java b/amp/WEB-INF/src/org/digijava/module/aim/action/ShowUserRegister.java index 59834dbb6c7..86267e8f774 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/action/ShowUserRegister.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/action/ShowUserRegister.java @@ -6,7 +6,7 @@ import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.digijava.kernel.entity.Locale; -import org.digijava.kernel.entity.TruBudgetIntent; +import org.digijava.kernel.entity.trubudget.TruBudgetIntent; import org.digijava.kernel.translator.util.TrnCountry; import org.digijava.kernel.translator.util.TrnLocale; import org.digijava.kernel.translator.util.TrnUtil; diff --git a/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java b/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java index 17bf2883dbc..856ddd0059d 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java @@ -245,6 +245,7 @@ public static void runQuery() String insertStatement="INSERT INTO amp_trubudget_intent (trubudget_intent_id,trubudget_intent_name, trubudget_intent_display_name)\n" + "VALUES\n" + " (nextval('amp_trubudget_intent_seq'),'global.listPermissions', 'List Permissions'),\n" + + " (nextval('amp_trubudget_intent_seq'),'project.intent.grantPermission', 'Grant permissions to project.'),\n" + " (nextval('amp_trubudget_intent_seq'),'global.grantPermission', 'Grant Permission'),\n" + " (nextval('amp_trubudget_intent_seq'),'global.grantAllPermissions', 'Grant All Permissions'),\n" + " (nextval('amp_trubudget_intent_seq'),'global.revokePermission', 'Revoke Permission'),\n" + @@ -266,6 +267,17 @@ public static void runQuery() " (nextval('amp_trubudget_intent_seq'),'provisioning.get', 'Get Provisioning Status') ON CONFLICT (trubudget_intent_name) DO NOTHING;\n"; statement.executeUpdate(insertStatement); + String insertSubIntentsStatement ="INSERT INTO amp_trubudget_sub_intent (sub_trubudget_intent_id,sub_trubudget_intent_name,mother_intent_name)" + + "VALUES" + + " (nextval('amp_trubudget_sub_intent_seq'),'project.assign', 'project'),"+ + " (nextval('amp_trubudget_sub_intent_seq'),'project.close', 'project'),"+ + " (nextval('amp_trubudget_sub_intent_seq'),'project.update', 'project'),"+ + " (nextval('amp_trubudget_sub_intent_seq'),'project.createSubproject', 'project'),"+ + " (nextval('amp_trubudget_sub_intent_seq'),'project.intent.grantPermission', 'project'),"+ + " (nextval('amp_trubudget_sub_intent_seq'),'project.intent.revokePermission', 'project'),"+ + " (nextval('amp_trubudget_sub_intent_seq'),'project.budget.updateProjected', 'project') ON CONFLICT (sub_trubudget_intent_name,mother_intent_name) DO NOTHING"; + + statement.executeUpdate(insertSubIntentsStatement); // String addColumnSql = "ALTER TABLE trubudget_intent ADD COLUMN IF NOT EXISTS intent_group INTEGER"; // statement.executeUpdate(addColumnSql); // diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java b/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java index 6bb8690c9c0..91c64bfcb44 100644 --- a/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java @@ -2,26 +2,23 @@ import org.digijava.kernel.cache.AbstractCache; import org.digijava.kernel.cache.ehcache.EhCacheWrapper; +import org.digijava.kernel.entity.trubudget.SubIntents; import org.digijava.kernel.persistence.PersistenceManager; import org.digijava.module.aim.dbentity.AmpActivityVersion; import org.digijava.module.aim.dbentity.AmpFunding; import org.digijava.module.aim.dbentity.AmpFundingDetail; import org.digijava.module.aim.dbentity.AmpGlobalSettings; -import org.digijava.module.aim.util.TeamUtil; import org.digijava.module.trubudget.dbentity.TruBudgetActivity; import org.digijava.module.trubudget.model.project.CreateProjectModel; import org.digijava.module.trubudget.model.project.EditProjectModel; import org.digijava.module.trubudget.model.project.EditProjectedBudgetModel; -import org.digijava.module.um.model.TruLoginRequest; -import org.digijava.module.um.model.TruLoginResponse; +import org.digijava.module.trubudget.model.project.ProjectGrantRevokePermModel; import org.digijava.module.um.util.GenericWebClient; import org.hibernate.Session; import org.hibernate.query.Query; import org.hibernate.type.LongType; -import org.hibernate.type.StringType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import reactor.core.publisher.Mono; import reactor.core.scheduler.Schedulers; import java.math.BigDecimal; @@ -29,8 +26,7 @@ import java.util.*; import java.util.stream.Collectors; -import static org.digijava.module.um.util.DbUtil.getGlobalSettingsBySection; -import static org.digijava.module.um.util.DbUtil.getSettingValue; +import static org.digijava.module.um.util.DbUtil.*; public class ProjectUtil { private static final Logger logger = LoggerFactory.getLogger(ProjectUtil.class); @@ -95,6 +91,24 @@ public static void createProject(AmpActivityVersion ampActivityVersion) throws U GenericWebClient.postForSingleObjResponse(getSettingValue(settings, "baseUrl") + "api/global.createProject", projectModel, CreateProjectModel.class, String.class, token).subscribe( response -> logger.info("Create project response: " + response) ); + List subIntents = getSubIntentsByMother("project"); + subIntents.forEach(subIntent -> { + ProjectGrantRevokePermModel projectGrantRevokePermModel = new ProjectGrantRevokePermModel(); + ProjectGrantRevokePermModel.Data data1 = new ProjectGrantRevokePermModel.Data(); + data1.setProjectId(project.getId()); + data1.setIdentity(user); + data1.setIntent(subIntent.getSubTruBudgetIntentName()); + projectGrantRevokePermModel.setData(data1); + projectGrantRevokePermModel.setApiVersion(getSettingValue(settings, "apiVersion")); + try { + GenericWebClient.postForSingleObjResponse(getSettingValue(settings, "baseUrl") + "api/project.intent.grantPermission", projectGrantRevokePermModel, ProjectGrantRevokePermModel.class, String.class, token).subscribeOn(Schedulers.parallel()).subscribe( + response -> logger.info("Grant project permission response: " + response) + ); + } catch (URISyntaxException e) { + throw new RuntimeException(e); + } + + }); Session session = PersistenceManager.getRequestDBSession(); TruBudgetActivity truBudgetActivity = new TruBudgetActivity(); truBudgetActivity.setAmpActivityId(ampActivityVersion.getAmpActivityId()); @@ -111,6 +125,8 @@ public static TruBudgetActivity isActivityAlreadyInTrubudget(Long activityId) { return query.stream().findAny().orElse(null); } + + public static void updateProject(String projectId, AmpActivityVersion ampActivityVersion) throws URISyntaxException { AbstractCache myCache = new EhCacheWrapper("trubudget"); @@ -133,6 +149,9 @@ public static void updateProject(String projectId, AmpActivityVersion ampActivit for (AmpFunding ampFunding : ampActivityVersion.getFunding()) { for (AmpFundingDetail ampFundingDetail : ampFunding.getFundingDetails()) { + String adjustmentType = ampFundingDetail.getAdjustmentType().getValue(); + Integer transactionType = ampFundingDetail.getTransactionType(); + Double amount = ampFundingDetail.getTransactionAmount(); String currency = ampFundingDetail.getAmpCurrencyId().getCurrencyCode(); String organization = ampFundingDetail.getAmpFundingId().getAmpDonorOrgId().getName(); @@ -144,9 +163,12 @@ public static void updateProject(String projectId, AmpActivityVersion ampActivit data1.setCurrencyCode(currency); data1.setProjectId(projectId); projectedBudget.setData(data1); - + if (Objects.equals(adjustmentType, "Actual") && transactionType==0)//project budget is edited using "actual commitment" + { GenericWebClient.postForSingleObjResponse(getSettingValue(settings, "baseUrl") + "api/project.budget.updateProjected", projectedBudget, EditProjectedBudgetModel.class, String.class, token).subscribeOn(Schedulers.parallel()) .subscribe(res2->logger.info("Update budget response: "+res2)); + } + } } diff --git a/amp/WEB-INF/src/org/digijava/module/um/action/AddUser.java b/amp/WEB-INF/src/org/digijava/module/um/action/AddUser.java index b8d947cecf4..f77e653fdde 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/action/AddUser.java +++ b/amp/WEB-INF/src/org/digijava/module/um/action/AddUser.java @@ -6,7 +6,7 @@ import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.digijava.kernel.entity.Locale; -import org.digijava.kernel.entity.TruBudgetIntent; +import org.digijava.kernel.entity.trubudget.TruBudgetIntent; import org.digijava.kernel.translator.util.TrnCountry; import org.digijava.kernel.translator.util.TrnLocale; import org.digijava.kernel.translator.util.TrnUtil; diff --git a/amp/WEB-INF/src/org/digijava/module/um/action/RegisterUser.java b/amp/WEB-INF/src/org/digijava/module/um/action/RegisterUser.java index 371edc7eaa7..ea30aa4ddfe 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/action/RegisterUser.java +++ b/amp/WEB-INF/src/org/digijava/module/um/action/RegisterUser.java @@ -12,7 +12,7 @@ import org.apache.struts.action.ActionMapping; import org.digijava.kernel.Constants; import org.digijava.kernel.entity.Locale; -import org.digijava.kernel.entity.TruBudgetIntent; +import org.digijava.kernel.entity.trubudget.TruBudgetIntent; import org.digijava.kernel.entity.UserLangPreferences; import org.digijava.kernel.mail.DgEmailManager; import org.digijava.kernel.request.Site; diff --git a/amp/WEB-INF/src/org/digijava/module/um/action/UserRegister.java b/amp/WEB-INF/src/org/digijava/module/um/action/UserRegister.java index 11acfe14185..5b4bcf96270 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/action/UserRegister.java +++ b/amp/WEB-INF/src/org/digijava/module/um/action/UserRegister.java @@ -30,6 +30,7 @@ import org.digijava.kernel.Constants; import org.digijava.kernel.dbentity.Country; import org.digijava.kernel.entity.*; +import org.digijava.kernel.entity.trubudget.TruBudgetIntent; import org.digijava.kernel.request.SiteDomain; import org.digijava.kernel.user.User; import org.digijava.kernel.util.DgUtil; diff --git a/amp/WEB-INF/src/org/digijava/module/um/action/ViewEditUser.java b/amp/WEB-INF/src/org/digijava/module/um/action/ViewEditUser.java index 5722b19199e..6947bfbe07e 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/action/ViewEditUser.java +++ b/amp/WEB-INF/src/org/digijava/module/um/action/ViewEditUser.java @@ -3,7 +3,7 @@ import org.apache.struts.action.*; import org.digijava.kernel.Constants; import org.digijava.kernel.entity.Locale; -import org.digijava.kernel.entity.TruBudgetIntent; +import org.digijava.kernel.entity.trubudget.TruBudgetIntent; import org.digijava.kernel.entity.UserLangPreferences; import org.digijava.kernel.exception.DgException; import org.digijava.kernel.request.Site; diff --git a/amp/WEB-INF/src/org/digijava/module/um/form/AddUserForm.java b/amp/WEB-INF/src/org/digijava/module/um/form/AddUserForm.java index f26516452b0..f1bea70b033 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/form/AddUserForm.java +++ b/amp/WEB-INF/src/org/digijava/module/um/form/AddUserForm.java @@ -22,7 +22,7 @@ import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionMapping; import org.apache.struts.validator.ValidatorForm; -import org.digijava.kernel.entity.TruBudgetIntent; +import org.digijava.kernel.entity.trubudget.TruBudgetIntent; import javax.servlet.http.HttpServletRequest; import java.util.Collection; diff --git a/amp/WEB-INF/src/org/digijava/module/um/form/UserRegisterForm.java b/amp/WEB-INF/src/org/digijava/module/um/form/UserRegisterForm.java index f5823cfedd1..0d322dc2674 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/form/UserRegisterForm.java +++ b/amp/WEB-INF/src/org/digijava/module/um/form/UserRegisterForm.java @@ -21,7 +21,7 @@ import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionMapping; import org.apache.struts.validator.ValidatorForm; -import org.digijava.kernel.entity.TruBudgetIntent; +import org.digijava.kernel.entity.trubudget.TruBudgetIntent; import javax.servlet.http.HttpServletRequest; import java.util.Collection; diff --git a/amp/WEB-INF/src/org/digijava/module/um/form/ViewEditUserForm.java b/amp/WEB-INF/src/org/digijava/module/um/form/ViewEditUserForm.java index 988c6c0bf74..72d0cb023b1 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/form/ViewEditUserForm.java +++ b/amp/WEB-INF/src/org/digijava/module/um/form/ViewEditUserForm.java @@ -2,7 +2,7 @@ import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping; -import org.digijava.kernel.entity.TruBudgetIntent; +import org.digijava.kernel.entity.trubudget.TruBudgetIntent; import org.digijava.module.aim.dbentity.AmpCategoryValueLocations; import org.digijava.module.aim.dbentity.AmpOrgGroup; import org.digijava.module.aim.dbentity.AmpOrgType; diff --git a/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java b/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java index befbde74ab0..d475f9ef3ce 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java @@ -21,6 +21,8 @@ import org.digijava.kernel.dbentity.Country; import org.digijava.kernel.entity.Locale; import org.digijava.kernel.entity.*; +import org.digijava.kernel.entity.trubudget.SubIntents; +import org.digijava.kernel.entity.trubudget.TruBudgetIntent; import org.digijava.kernel.exception.DgException; import org.digijava.kernel.persistence.PersistenceManager; import org.digijava.kernel.request.Site; @@ -42,6 +44,8 @@ import org.hibernate.query.Query; import org.hibernate.type.LongType; import org.hibernate.type.StringType; +import org.jetbrains.annotations.NotNull; +import reactor.core.CorePublisher; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import reactor.core.scheduler.Schedulers; @@ -605,14 +609,8 @@ public static boolean registerUserOnTrubudget(TruUserData userData, User user) t TruGrantPermissionRequest permData = new TruGrantPermissionRequest(); TruGrantPermissionRequest.Data data1 = new TruGrantPermissionRequest.Data(); data1.setIdentity(finalResponse !=null? finalResponse.getData().getUser().getId():user.getEmail().split("@")[0]); - data1.setIntent(new ArrayList<>(user.getTruBudgetIntents()).get(index).getTruBudgetIntentName()); - permData.setData(data1); - permData.setApiVersion(getSettingValue(settings,"apiVersion")); - try { - return GenericWebClient.postForSingleObjResponse(getSettingValue(settings,"baseUrl")+"api/global.grantPermission", permData, TruGrantPermissionRequest.class, String.class, truLoginResponse.getData().getUser().getToken()); - } catch (URISyntaxException e) { - return Flux.error(new RuntimeException(e)); - } + return grantPermRequest(settings, truLoginResponse, permData, data1,new ArrayList<>(user.getTruBudgetIntents()).get(index).getTruBudgetIntentName()); + }).subscribeOn(Schedulers.parallel()).subscribe(permissionResponse->logger.info("Grant permission response:ss " + permissionResponse)); } // TODO: 9/6/23 complete the revoke process.. need to checkout all available permissions @@ -641,6 +639,32 @@ public static boolean registerUserOnTrubudget(TruUserData userData, User user) t return true; } + + @NotNull + private static CorePublisher grantPermRequest(List settings, TruLoginResponse truLoginResponse, TruGrantPermissionRequest permData, TruGrantPermissionRequest.Data data1, String intent) { + data1.setIntent(intent); + permData.setData(data1); + permData.setApiVersion(getSettingValue(settings,"apiVersion")); + try { + + return GenericWebClient.postForSingleObjResponse(getSettingValue(settings, "baseUrl") + "api/global.grantPermission", permData, TruGrantPermissionRequest.class, String.class, truLoginResponse.getData().getUser().getToken()); + } catch (URISyntaxException e) { + return Flux.error(new RuntimeException(e)); + } + } + + public static List getSubIntentsByMother(String motherName) + { + Session session = PersistenceManager.getRequestDBSession(); + try { + return session.createNativeQuery(" SELECT t. * FROM amp_trubudget_sub_intent t WHERE mother_intent_name='"+motherName+"'", SubIntents.class).list(); + + }catch (Exception e) + { + logger.info("Error during intent fetch ",e); + throw new RuntimeException(e); + } + } public static List getTruBudgetIntents() { Session session = PersistenceManager.getRequestDBSession(); diff --git a/amp/WEB-INF/src/org/digijava/module/um/util/GenericWebClient.java b/amp/WEB-INF/src/org/digijava/module/um/util/GenericWebClient.java index 48a0c612fb5..6289ec70d03 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/util/GenericWebClient.java +++ b/amp/WEB-INF/src/org/digijava/module/um/util/GenericWebClient.java @@ -146,7 +146,7 @@ public static Mono getForSingleObjResponse(String ur } private static WebClient myWebClient() { - HttpClient httpClient = HttpClient.create().resolver(DefaultAddressResolverGroup.INSTANCE) + HttpClient httpClient = HttpClient.create() .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, CONNECT_TIMEOUT) .responseTimeout(Duration.ofMillis(TIMEOUT)) .doOnConnected(conn -> diff --git a/amp/repository/digi-common.xml b/amp/repository/digi-common.xml index 6082a3b45da..28758c33407 100644 --- a/amp/repository/digi-common.xml +++ b/amp/repository/digi-common.xml @@ -21,7 +21,8 @@ org.digijava.kernel.request.SiteDomain - org.digijava.kernel.entity.TruBudgetIntent + org.digijava.kernel.entity.trubudget.TruBudgetIntent + org.digijava.kernel.entity.trubudget.SubIntents org.digijava.module.trubudget.dbentity.TruBudgetActivity org.digijava.kernel.entity.Address org.digijava.kernel.entity.GeoRegion From e1b6483d2a77572d61468cf2df47d670fff01c86 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Mon, 18 Sep 2023 12:00:36 +0300 Subject: [PATCH 097/307] AMP-30723 Feature -implement amp TruBudget integration --- .../module/aim/dbentity/AmpComponent.hbm.xml | 1 + .../module/aim/dbentity/AmpComponent.java | 8 ++ .../aim/startup/AMPStartupListener.java | 10 +- .../model/project/CreateSubProjectModel.java | 41 +++++-- .../module/trubudget/util/ProjectUtil.java | 108 ++++++++++++++++-- 5 files changed, 151 insertions(+), 17 deletions(-) diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponent.hbm.xml b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponent.hbm.xml index 1d229c58a44..926ddf4753e 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponent.hbm.xml +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponent.hbm.xml @@ -11,6 +11,7 @@ + diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponent.java b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponent.java index 2f910bb802a..6d1817a518d 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponent.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponent.java @@ -51,7 +51,15 @@ public class AmpComponent implements Serializable, Comparable, Ver private java.sql.Timestamp creationdate; private String code; + private String subProjectId; + public String getSubProjectId() { + return subProjectId; + } + + public void setSubProjectId(String subProjectId) { + this.subProjectId = subProjectId; + } @InterchangeableDiscriminator(discriminatorField = "transactionType", configurer = AmpComponentFundingDiscriminationConfigurer.class, settings = { diff --git a/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java b/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java index 856ddd0059d..8cc2cb7e353 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java @@ -275,7 +275,15 @@ public static void runQuery() " (nextval('amp_trubudget_sub_intent_seq'),'project.createSubproject', 'project'),"+ " (nextval('amp_trubudget_sub_intent_seq'),'project.intent.grantPermission', 'project'),"+ " (nextval('amp_trubudget_sub_intent_seq'),'project.intent.revokePermission', 'project'),"+ - " (nextval('amp_trubudget_sub_intent_seq'),'project.budget.updateProjected', 'project') ON CONFLICT (sub_trubudget_intent_name,mother_intent_name) DO NOTHING"; + " (nextval('amp_trubudget_sub_intent_seq'),'project.budget.updateProjected', 'project')" + + " (nextval('amp_trubudget_sub_intent_seq'),'subproject.budget.updateProjected', 'subproject')" + + " (nextval('amp_trubudget_sub_intent_seq'),'subproject.update', 'subproject')" + + " (nextval('amp_trubudget_sub_intent_seq'),'subproject.intent.revokePermission', 'subproject')" + + " (nextval('amp_trubudget_sub_intent_seq'),'subproject.reorderWorkflowitems', 'subproject')" + + " (nextval('amp_trubudget_sub_intent_seq'),'subproject.createWorkflowitem', 'subproject')" + + " (nextval('amp_trubudget_sub_intent_seq'),'subproject.close', 'subproject')" + + " (nextval('amp_trubudget_sub_intent_seq'),'subproject.assign', 'subproject')" + + " ON CONFLICT (sub_trubudget_intent_name,mother_intent_name) DO NOTHING"; statement.executeUpdate(insertSubIntentsStatement); // String addColumnSql = "ALTER TABLE trubudget_intent ADD COLUMN IF NOT EXISTS intent_group INTEGER"; diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/model/project/CreateSubProjectModel.java b/amp/WEB-INF/src/org/digijava/module/trubudget/model/project/CreateSubProjectModel.java index a2fe8798a3e..71f77fac293 100644 --- a/amp/WEB-INF/src/org/digijava/module/trubudget/model/project/CreateSubProjectModel.java +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/model/project/CreateSubProjectModel.java @@ -1,6 +1,10 @@ package org.digijava.module.trubudget.model.project; +import com.fasterxml.jackson.annotation.JsonProperty; + +import java.util.ArrayList; +import java.util.List; import java.util.Map; public class CreateSubProjectModel { @@ -52,9 +56,13 @@ public static class Subproject { private String status; private String displayName; private String description; - private String amount; private String assignee; + private String validator; + @JsonProperty("workflowitemType") + private String workflowitemType; private String currency; + private List projectedBudgets= new ArrayList<>(); + private Map additionalData; // Getters and setters for id, status, displayName, description, amount, assignee, currency, and additionalData @@ -91,13 +99,6 @@ public void setDescription(String description) { this.description = description; } - public String getAmount() { - return amount; - } - - public void setAmount(String amount) { - this.amount = amount; - } public String getAssignee() { return assignee; @@ -122,6 +123,30 @@ public Map getAdditionalData() { public void setAdditionalData(Map additionalData) { this.additionalData = additionalData; } + + public String getValidator() { + return validator; + } + + public void setValidator(String validator) { + this.validator = validator; + } + + public String getWorkflowitemType() { + return workflowitemType; + } + + public void setWorkflowitemType(String workflowitemType) { + this.workflowitemType = workflowitemType; + } + + public List getProjectedBudgets() { + return projectedBudgets; + } + + public void setProjectedBudgets(List projectedBudgets) { + this.projectedBudgets = projectedBudgets; + } } } diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java b/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java index 91c64bfcb44..af6479cf5e8 100644 --- a/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java @@ -4,15 +4,12 @@ import org.digijava.kernel.cache.ehcache.EhCacheWrapper; import org.digijava.kernel.entity.trubudget.SubIntents; import org.digijava.kernel.persistence.PersistenceManager; -import org.digijava.module.aim.dbentity.AmpActivityVersion; -import org.digijava.module.aim.dbentity.AmpFunding; -import org.digijava.module.aim.dbentity.AmpFundingDetail; -import org.digijava.module.aim.dbentity.AmpGlobalSettings; +import org.digijava.module.aim.dbentity.*; import org.digijava.module.trubudget.dbentity.TruBudgetActivity; -import org.digijava.module.trubudget.model.project.CreateProjectModel; -import org.digijava.module.trubudget.model.project.EditProjectModel; -import org.digijava.module.trubudget.model.project.EditProjectedBudgetModel; -import org.digijava.module.trubudget.model.project.ProjectGrantRevokePermModel; +import org.digijava.module.trubudget.model.project.*; +import org.digijava.module.trubudget.model.subproject.EditSubProjectModel; +import org.digijava.module.trubudget.model.subproject.EditSubProjectedBudgetModel; +import org.digijava.module.trubudget.model.subproject.SubProjectGrantRevokePermModel; import org.digijava.module.um.util.GenericWebClient; import org.hibernate.Session; import org.hibernate.query.Query; @@ -170,6 +167,101 @@ public static void updateProject(String projectId, AmpActivityVersion ampActivit } + + + } + } + } + public static void createSubProjects(AmpActivityVersion ampActivityVersion, String projectId) throws URISyntaxException { + List settings = getGlobalSettingsBySection("trubudget"); + + AbstractCache myCache = new EhCacheWrapper("trubudget"); + String token = (String) myCache.get("truBudgetToken"); + String user = (String) myCache.get("truBudgetUser"); + logger.info("Trubudget Cached Token:" + token); + for (AmpComponent ampComponent: ampActivityVersion.getComponents()) + { + if (ampComponent.getSubProjectId()==null) {//create subproject + CreateSubProjectModel createSubProjectModel = new CreateSubProjectModel(); + CreateSubProjectModel.Data data = new CreateSubProjectModel.Data(); + CreateSubProjectModel.Subproject subproject = new CreateSubProjectModel.Subproject(); + subproject.setId(UUID.randomUUID().toString().replaceAll("-", "")); +// subproject.setAmount(ampComponent.); + subproject.setDisplayName(ampComponent.getTitle()); +// BigDecimal totalFunding = BigDecimal.ZERO; + if (!ampComponent.getFundings().isEmpty()) { + for (AmpComponentFunding componentFunding : ampComponent.getFundings()) { + if (componentFunding.getTransactionType() == 0 && Objects.equals(componentFunding.getAdjustmentType().getValue(), "Planned")) { +// totalFunding = totalFunding.add(BigDecimal.valueOf(componentFunding.getTransactionAmount())); + CreateProjectModel.ProjectedBudget projectedBudget = new CreateProjectModel.ProjectedBudget(); + projectedBudget.setOrganization(componentFunding.getReportingOrganization().getName()); + projectedBudget.setValue(BigDecimal.valueOf(componentFunding.getTransactionAmount()).toString()); + projectedBudget.setCurrencyCode(componentFunding.getCurrency().getCurrencyCode()); + } + } + subproject.setCurrency(new ArrayList<>(ampComponent.getFundings()).get(0).getCurrency().getCurrencyCode()); + } +// subproject.setAmount(totalFunding.toString()); + subproject.setAssignee(user); + subproject.setValidator(user); + subproject.setDescription(ampComponent.getDescription()); + + data.setProjectId(projectId); + data.setSubproject(subproject); + createSubProjectModel.setApiVersion(getSettingValue(settings, "apiVersion")); + createSubProjectModel.setData(data); + GenericWebClient.postForSingleObjResponse(getSettingValue(settings, "baseUrl") + "api/project.createSubproject", createSubProjectModel, CreateSubProjectModel.class, String.class, token).subscribeOn(Schedulers.parallel()) + .subscribe(res2 -> logger.info("Create subproject response: " + res2)); + List subIntents = getSubIntentsByMother("subproject"); + subIntents.forEach(subIntent -> { + SubProjectGrantRevokePermModel subProjectGrantRevokePermModel = new SubProjectGrantRevokePermModel(); + SubProjectGrantRevokePermModel.Data data2 = new SubProjectGrantRevokePermModel.Data(); + data2.setProjectId(projectId); + data2.setIdentity(user); + data2.setIntent(subIntent.getSubTruBudgetIntentName()); + subProjectGrantRevokePermModel.setData(data2); + subProjectGrantRevokePermModel.setApiVersion(getSettingValue(settings, "apiVersion")); + try { + GenericWebClient.postForSingleObjResponse(getSettingValue(settings, "baseUrl") + "api/subproject.intent.grantPermission", subProjectGrantRevokePermModel, SubProjectGrantRevokePermModel.class, String.class, token).subscribeOn(Schedulers.parallel()).subscribe( + response -> logger.info("Grant subproject permission response: " + response) + ); + } catch (URISyntaxException e) { + throw new RuntimeException(e); + } + + }); + ampComponent.setSubProjectId(subproject.getId()); + Session session = PersistenceManager.getRequestDBSession(); + session.merge(ampComponent); + session.flush(); + } + else {//update subProject + EditSubProjectModel editSubProjectModel = new EditSubProjectModel(); + EditSubProjectModel.Data data = new EditSubProjectModel.Data(); + data.setProjectId(projectId); + data.setSubprojectId(ampComponent.getSubProjectId()); + data.setDescription(ampComponent.getDescription()); + data.setDisplayName(ampComponent.getTitle()); + editSubProjectModel.setData(data); + editSubProjectModel.setApiVersion(getSettingValue(settings, "apiVersion")); + //call edit + GenericWebClient.postForSingleObjResponse(getSettingValue(settings, "baseUrl") + "api/subproject.update", editSubProjectModel, EditSubProjectModel.class, String.class, token) + .subscribe(res2->logger.info("Update subproject response: "+res2)); + if (!ampComponent.getFundings().isEmpty()) { + for (AmpComponentFunding componentFunding : ampComponent.getFundings()) { + EditSubProjectedBudgetModel editSubProjectedBudgetModel = new EditSubProjectedBudgetModel(); + EditSubProjectedBudgetModel.Data data1 = new EditSubProjectedBudgetModel.Data(); + data1.setProjectId(projectId); + data1.setSubprojectId(ampComponent.getSubProjectId()); + data1.setValue(BigDecimal.valueOf(componentFunding.getTransactionAmount()).toString()); + data1.setOrganization(componentFunding.getReportingOrganization().getName()); + editSubProjectedBudgetModel.setData(data1); + editSubProjectedBudgetModel.setApiVersion(getSettingValue(settings, "apiVersion")); + GenericWebClient.postForSingleObjResponse(getSettingValue(settings, "baseUrl") + "api/subproject.budget.updateProjected", editSubProjectedBudgetModel, EditSubProjectedBudgetModel.class, String.class, token).subscribeOn(Schedulers.parallel()) + .subscribe(res2->logger.info("Update subproject budget response: "+res2)); + + } + } } } } From 9738594d116b18c522b2b157c67528661b75d249 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Mon, 18 Sep 2023 12:15:08 +0300 Subject: [PATCH 098/307] AMP-30723 Feature -implement amp TruBudget integration --- .../src/org/digijava/module/trubudget/util/ProjectUtil.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java b/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java index af6479cf5e8..43255e30d17 100644 --- a/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java @@ -112,6 +112,7 @@ public static void createProject(AmpActivityVersion ampActivityVersion) throws U truBudgetActivity.setTruBudgetId(project.getId()); session.saveOrUpdate(truBudgetActivity); session.flush(); + createSubProjects(ampActivityVersion, project.getId()); } public static TruBudgetActivity isActivityAlreadyInTrubudget(Long activityId) { @@ -171,6 +172,8 @@ public static void updateProject(String projectId, AmpActivityVersion ampActivit } } + createSubProjects(ampActivityVersion, projectId); + } public static void createSubProjects(AmpActivityVersion ampActivityVersion, String projectId) throws URISyntaxException { List settings = getGlobalSettingsBySection("trubudget"); @@ -197,6 +200,7 @@ public static void createSubProjects(AmpActivityVersion ampActivityVersion, Stri projectedBudget.setOrganization(componentFunding.getReportingOrganization().getName()); projectedBudget.setValue(BigDecimal.valueOf(componentFunding.getTransactionAmount()).toString()); projectedBudget.setCurrencyCode(componentFunding.getCurrency().getCurrencyCode()); + subproject.getProjectedBudgets().add(projectedBudget); } } subproject.setCurrency(new ArrayList<>(ampComponent.getFundings()).get(0).getCurrency().getCurrencyCode()); From b8113cf10bfdf6758d767008201cd31ad5b455ab Mon Sep 17 00:00:00 2001 From: brianbrix Date: Mon, 18 Sep 2023 15:02:37 +0300 Subject: [PATCH 099/307] AMP-30723 Feature -implement amp TruBudget integration AMP-30725 CREATION OF COMPONENTS --- .../entity/trubudget/TruBudgetIntent.hbm.xml | 2 +- .../module/aim/dbentity/AmpComponent.hbm.xml | 1 - .../module/aim/dbentity/AmpComponent.java | 8 -- .../aim/startup/AMPStartupListener.java | 17 +-- .../dbentity/SubProjectComponent.hbm.xml | 16 +++ .../dbentity/SubProjectComponent.java | 43 ++++++ .../model/project/CreateSubProjectModel.java | 7 +- .../module/trubudget/util/ProjectUtil.java | 130 ++++++++++-------- .../org/digijava/module/um/util/DbUtil.java | 2 +- amp/repository/digi-common.xml | 1 + 10 files changed, 151 insertions(+), 76 deletions(-) create mode 100644 amp/WEB-INF/src/org/digijava/module/trubudget/dbentity/SubProjectComponent.hbm.xml create mode 100644 amp/WEB-INF/src/org/digijava/module/trubudget/dbentity/SubProjectComponent.java diff --git a/amp/WEB-INF/src/org/digijava/kernel/entity/trubudget/TruBudgetIntent.hbm.xml b/amp/WEB-INF/src/org/digijava/kernel/entity/trubudget/TruBudgetIntent.hbm.xml index c241ae943c5..3c322872a23 100644 --- a/amp/WEB-INF/src/org/digijava/kernel/entity/trubudget/TruBudgetIntent.hbm.xml +++ b/amp/WEB-INF/src/org/digijava/kernel/entity/trubudget/TruBudgetIntent.hbm.xml @@ -9,7 +9,7 @@ amp_trubudget_intent_seq - + diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponent.hbm.xml b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponent.hbm.xml index 926ddf4753e..1d229c58a44 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponent.hbm.xml +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponent.hbm.xml @@ -11,7 +11,6 @@ - diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponent.java b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponent.java index 6d1817a518d..2f910bb802a 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponent.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponent.java @@ -51,15 +51,7 @@ public class AmpComponent implements Serializable, Comparable, Ver private java.sql.Timestamp creationdate; private String code; - private String subProjectId; - public String getSubProjectId() { - return subProjectId; - } - - public void setSubProjectId(String subProjectId) { - this.subProjectId = subProjectId; - } @InterchangeableDiscriminator(discriminatorField = "transactionType", configurer = AmpComponentFundingDiscriminationConfigurer.class, settings = { diff --git a/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java b/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java index 8cc2cb7e353..ea22f7f61d0 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java @@ -265,6 +265,7 @@ public static void runQuery() " (nextval('amp_trubudget_intent_seq'),'provisioning.start', 'Start Provisioning'),\n" + " (nextval('amp_trubudget_intent_seq'),'provisioning.end', 'End Provisioning'),\n" + " (nextval('amp_trubudget_intent_seq'),'provisioning.get', 'Get Provisioning Status') ON CONFLICT (trubudget_intent_name) DO NOTHING;\n"; + logger.info("Inserting global intents"); statement.executeUpdate(insertStatement); String insertSubIntentsStatement ="INSERT INTO amp_trubudget_sub_intent (sub_trubudget_intent_id,sub_trubudget_intent_name,mother_intent_name)" + @@ -275,16 +276,16 @@ public static void runQuery() " (nextval('amp_trubudget_sub_intent_seq'),'project.createSubproject', 'project'),"+ " (nextval('amp_trubudget_sub_intent_seq'),'project.intent.grantPermission', 'project'),"+ " (nextval('amp_trubudget_sub_intent_seq'),'project.intent.revokePermission', 'project'),"+ - " (nextval('amp_trubudget_sub_intent_seq'),'project.budget.updateProjected', 'project')" + - " (nextval('amp_trubudget_sub_intent_seq'),'subproject.budget.updateProjected', 'subproject')" + - " (nextval('amp_trubudget_sub_intent_seq'),'subproject.update', 'subproject')" + - " (nextval('amp_trubudget_sub_intent_seq'),'subproject.intent.revokePermission', 'subproject')" + - " (nextval('amp_trubudget_sub_intent_seq'),'subproject.reorderWorkflowitems', 'subproject')" + - " (nextval('amp_trubudget_sub_intent_seq'),'subproject.createWorkflowitem', 'subproject')" + - " (nextval('amp_trubudget_sub_intent_seq'),'subproject.close', 'subproject')" + + " (nextval('amp_trubudget_sub_intent_seq'),'project.budget.updateProjected', 'project')," + + " (nextval('amp_trubudget_sub_intent_seq'),'subproject.budget.updateProjected', 'subproject')," + + " (nextval('amp_trubudget_sub_intent_seq'),'subproject.update', 'subproject')," + + " (nextval('amp_trubudget_sub_intent_seq'),'subproject.intent.revokePermission', 'subproject')," + + " (nextval('amp_trubudget_sub_intent_seq'),'subproject.reorderWorkflowitems', 'subproject')," + + " (nextval('amp_trubudget_sub_intent_seq'),'subproject.createWorkflowitem', 'subproject')," + + " (nextval('amp_trubudget_sub_intent_seq'),'subproject.close', 'subproject')," + " (nextval('amp_trubudget_sub_intent_seq'),'subproject.assign', 'subproject')" + " ON CONFLICT (sub_trubudget_intent_name,mother_intent_name) DO NOTHING"; - + logger.info("Inserting sub intents"); statement.executeUpdate(insertSubIntentsStatement); // String addColumnSql = "ALTER TABLE trubudget_intent ADD COLUMN IF NOT EXISTS intent_group INTEGER"; // statement.executeUpdate(addColumnSql); diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/dbentity/SubProjectComponent.hbm.xml b/amp/WEB-INF/src/org/digijava/module/trubudget/dbentity/SubProjectComponent.hbm.xml new file mode 100644 index 00000000000..2c0973f8e28 --- /dev/null +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/dbentity/SubProjectComponent.hbm.xml @@ -0,0 +1,16 @@ + + + + + + + amp_trubudget_subproject_component_seq + + + + + + + \ No newline at end of file diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/dbentity/SubProjectComponent.java b/amp/WEB-INF/src/org/digijava/module/trubudget/dbentity/SubProjectComponent.java new file mode 100644 index 00000000000..834cb2e810f --- /dev/null +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/dbentity/SubProjectComponent.java @@ -0,0 +1,43 @@ +package org.digijava.module.trubudget.dbentity; + +import org.hibernate.annotations.DynamicUpdate; + +import javax.persistence.*; + +@Table(name = "amp_trubudget_subproject_component") +@Cacheable +@DynamicUpdate +@Entity +public class SubProjectComponent { + @Id + @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "amp_trubudget_subproject_component_seq") + @SequenceGenerator(name = "amp_trubudget_subproject_component_seq", sequenceName = "amp_trubudget_subproject_component_seq", allocationSize = 1) + @Column(name = "id") + private Long id; + private Long componentId; + private String subProjectId; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getComponentId() { + return componentId; + } + + public void setComponentId(Long componentId) { + this.componentId = componentId; + } + + public String getSubProjectId() { + return subProjectId; + } + + public void setSubProjectId(String subProjectId) { + this.subProjectId = subProjectId; + } +} diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/model/project/CreateSubProjectModel.java b/amp/WEB-INF/src/org/digijava/module/trubudget/model/project/CreateSubProjectModel.java index 71f77fac293..36a09fa995e 100644 --- a/amp/WEB-INF/src/org/digijava/module/trubudget/model/project/CreateSubProjectModel.java +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/model/project/CreateSubProjectModel.java @@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -53,17 +54,17 @@ public void setSubproject(Subproject subproject) { public static class Subproject { private String id; - private String status; + private String status="open"; private String displayName; private String description; private String assignee; private String validator; @JsonProperty("workflowitemType") - private String workflowitemType; + private String workflowitemType="general"; private String currency; private List projectedBudgets= new ArrayList<>(); - private Map additionalData; + private Map additionalData= new HashMap<>(); // Getters and setters for id, status, displayName, description, amount, assignee, currency, and additionalData diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java b/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java index 43255e30d17..141c81561c6 100644 --- a/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java @@ -5,6 +5,7 @@ import org.digijava.kernel.entity.trubudget.SubIntents; import org.digijava.kernel.persistence.PersistenceManager; import org.digijava.module.aim.dbentity.*; +import org.digijava.module.trubudget.dbentity.SubProjectComponent; import org.digijava.module.trubudget.dbentity.TruBudgetActivity; import org.digijava.module.trubudget.model.project.*; import org.digijava.module.trubudget.model.subproject.EditSubProjectModel; @@ -16,6 +17,7 @@ import org.hibernate.type.LongType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import reactor.core.publisher.Mono; import reactor.core.scheduler.Schedulers; import java.math.BigDecimal; @@ -85,34 +87,42 @@ public static void createProject(AmpActivityVersion ampActivityVersion) throws U project.setThumbnail("sampleThumbNail"); data.setProject(project); projectModel.setData(data); + List subIntents = getSubIntentsByMother("project"); + Session session = PersistenceManager.getRequestDBSession(); GenericWebClient.postForSingleObjResponse(getSettingValue(settings, "baseUrl") + "api/global.createProject", projectModel, CreateProjectModel.class, String.class, token).subscribe( - response -> logger.info("Create project response: " + response) + response ->{ + logger.info("Create project response: " + response); + subIntents.forEach(subIntent -> { + ProjectGrantRevokePermModel projectGrantRevokePermModel = new ProjectGrantRevokePermModel(); + ProjectGrantRevokePermModel.Data data1 = new ProjectGrantRevokePermModel.Data(); + data1.setProjectId(project.getId()); + data1.setIdentity(user); + data1.setIntent(subIntent.getSubTruBudgetIntentName()); + projectGrantRevokePermModel.setData(data1); + projectGrantRevokePermModel.setApiVersion(getSettingValue(settings, "apiVersion")); + try { + GenericWebClient.postForSingleObjResponse(getSettingValue(settings, "baseUrl") + "api/project.intent.grantPermission", projectGrantRevokePermModel, ProjectGrantRevokePermModel.class, String.class, token).subscribeOn(Schedulers.parallel()).subscribe( + response1 -> logger.info("Grant project permission response: " + response1) + ); + } catch (URISyntaxException e) { + throw new RuntimeException(e); + } + + }); + + TruBudgetActivity truBudgetActivity = new TruBudgetActivity(); + truBudgetActivity.setAmpActivityId(ampActivityVersion.getAmpActivityId()); + truBudgetActivity.setTruBudgetId(project.getId()); + session.saveOrUpdate(truBudgetActivity); + + + + } ); - List subIntents = getSubIntentsByMother("project"); - subIntents.forEach(subIntent -> { - ProjectGrantRevokePermModel projectGrantRevokePermModel = new ProjectGrantRevokePermModel(); - ProjectGrantRevokePermModel.Data data1 = new ProjectGrantRevokePermModel.Data(); - data1.setProjectId(project.getId()); - data1.setIdentity(user); - data1.setIntent(subIntent.getSubTruBudgetIntentName()); - projectGrantRevokePermModel.setData(data1); - projectGrantRevokePermModel.setApiVersion(getSettingValue(settings, "apiVersion")); - try { - GenericWebClient.postForSingleObjResponse(getSettingValue(settings, "baseUrl") + "api/project.intent.grantPermission", projectGrantRevokePermModel, ProjectGrantRevokePermModel.class, String.class, token).subscribeOn(Schedulers.parallel()).subscribe( - response -> logger.info("Grant project permission response: " + response) - ); - } catch (URISyntaxException e) { - throw new RuntimeException(e); - } - }); - Session session = PersistenceManager.getRequestDBSession(); - TruBudgetActivity truBudgetActivity = new TruBudgetActivity(); - truBudgetActivity.setAmpActivityId(ampActivityVersion.getAmpActivityId()); - truBudgetActivity.setTruBudgetId(project.getId()); - session.saveOrUpdate(truBudgetActivity); + createSubProjects(ampActivityVersion, project.getId(),settings); session.flush(); - createSubProjects(ampActivityVersion, project.getId()); + } public static TruBudgetActivity isActivityAlreadyInTrubudget(Long activityId) { @@ -172,11 +182,10 @@ public static void updateProject(String projectId, AmpActivityVersion ampActivit } } - createSubProjects(ampActivityVersion, projectId); + createSubProjects(ampActivityVersion, projectId,settings); } - public static void createSubProjects(AmpActivityVersion ampActivityVersion, String projectId) throws URISyntaxException { - List settings = getGlobalSettingsBySection("trubudget"); + public static void createSubProjects(AmpActivityVersion ampActivityVersion, String projectId, List settings) throws URISyntaxException { AbstractCache myCache = new EhCacheWrapper("trubudget"); String token = (String) myCache.get("truBudgetToken"); @@ -184,7 +193,8 @@ public static void createSubProjects(AmpActivityVersion ampActivityVersion, Stri logger.info("Trubudget Cached Token:" + token); for (AmpComponent ampComponent: ampActivityVersion.getComponents()) { - if (ampComponent.getSubProjectId()==null) {//create subproject + Optional subProjectComponent = PersistenceManager.getRequestDBSession().createQuery("FROM "+SubProjectComponent.class.getName()+" sb WHERE sb.componentId="+ampComponent.getAmpComponentId(), SubProjectComponent.class).stream().findAny(); + if (!subProjectComponent.isPresent()) {//create subproject CreateSubProjectModel createSubProjectModel = new CreateSubProjectModel(); CreateSubProjectModel.Data data = new CreateSubProjectModel.Data(); CreateSubProjectModel.Subproject subproject = new CreateSubProjectModel.Subproject(); @@ -197,7 +207,7 @@ public static void createSubProjects(AmpActivityVersion ampActivityVersion, Stri if (componentFunding.getTransactionType() == 0 && Objects.equals(componentFunding.getAdjustmentType().getValue(), "Planned")) { // totalFunding = totalFunding.add(BigDecimal.valueOf(componentFunding.getTransactionAmount())); CreateProjectModel.ProjectedBudget projectedBudget = new CreateProjectModel.ProjectedBudget(); - projectedBudget.setOrganization(componentFunding.getReportingOrganization().getName()); + projectedBudget.setOrganization(componentFunding.getReportingOrganization()!=null?componentFunding.getReportingOrganization().getName():"Funding Org"); projectedBudget.setValue(BigDecimal.valueOf(componentFunding.getTransactionAmount()).toString()); projectedBudget.setCurrencyCode(componentFunding.getCurrency().getCurrencyCode()); subproject.getProjectedBudgets().add(projectedBudget); @@ -214,36 +224,48 @@ public static void createSubProjects(AmpActivityVersion ampActivityVersion, Stri data.setSubproject(subproject); createSubProjectModel.setApiVersion(getSettingValue(settings, "apiVersion")); createSubProjectModel.setData(data); - GenericWebClient.postForSingleObjResponse(getSettingValue(settings, "baseUrl") + "api/project.createSubproject", createSubProjectModel, CreateSubProjectModel.class, String.class, token).subscribeOn(Schedulers.parallel()) - .subscribe(res2 -> logger.info("Create subproject response: " + res2)); List subIntents = getSubIntentsByMother("subproject"); - subIntents.forEach(subIntent -> { - SubProjectGrantRevokePermModel subProjectGrantRevokePermModel = new SubProjectGrantRevokePermModel(); - SubProjectGrantRevokePermModel.Data data2 = new SubProjectGrantRevokePermModel.Data(); - data2.setProjectId(projectId); - data2.setIdentity(user); - data2.setIntent(subIntent.getSubTruBudgetIntentName()); - subProjectGrantRevokePermModel.setData(data2); - subProjectGrantRevokePermModel.setApiVersion(getSettingValue(settings, "apiVersion")); - try { - GenericWebClient.postForSingleObjResponse(getSettingValue(settings, "baseUrl") + "api/subproject.intent.grantPermission", subProjectGrantRevokePermModel, SubProjectGrantRevokePermModel.class, String.class, token).subscribeOn(Schedulers.parallel()).subscribe( - response -> logger.info("Grant subproject permission response: " + response) - ); - } catch (URISyntaxException e) { - throw new RuntimeException(e); - } - - }); - ampComponent.setSubProjectId(subproject.getId()); Session session = PersistenceManager.getRequestDBSession(); - session.merge(ampComponent); - session.flush(); + try { + GenericWebClient.postForSingleObjResponse(getSettingValue(settings, "baseUrl") + "api/project.createSubproject", createSubProjectModel, CreateSubProjectModel.class, String.class, token) + .subscribe(res-> { + logger.info("Create subproject response: "+res); + subIntents.forEach(subIntent -> { + SubProjectGrantRevokePermModel subProjectGrantRevokePermModel = new SubProjectGrantRevokePermModel(); + SubProjectGrantRevokePermModel.Data data2 = new SubProjectGrantRevokePermModel.Data(); + data2.setProjectId(projectId); + data2.setSubprojectId(subproject.getId()); + data2.setIdentity(user); + data2.setIntent(subIntent.getSubTruBudgetIntentName()); + subProjectGrantRevokePermModel.setData(data2); + subProjectGrantRevokePermModel.setApiVersion(getSettingValue(settings, "apiVersion")); + try { + GenericWebClient.postForSingleObjResponse(getSettingValue(settings, "baseUrl") + "api/subproject.intent.grantPermission", subProjectGrantRevokePermModel, SubProjectGrantRevokePermModel.class, String.class, token).subscribeOn(Schedulers.parallel()).subscribe( + response -> logger.info("Grant subproject permission response: " + response) + ); + } catch (URISyntaxException e) { + throw new RuntimeException(e); + } + + }); + SubProjectComponent subProjectComponent1 = new SubProjectComponent(); + subProjectComponent1.setComponentId(ampComponent.getAmpComponentId()); + subProjectComponent1.setSubProjectId(subproject.getId()); + session.saveOrUpdate(subProjectComponent1); + }); + + }catch (Exception e) + { + logger.info("Error during subproject creation"); + e.printStackTrace(); + } +// session.flush(); } else {//update subProject EditSubProjectModel editSubProjectModel = new EditSubProjectModel(); EditSubProjectModel.Data data = new EditSubProjectModel.Data(); data.setProjectId(projectId); - data.setSubprojectId(ampComponent.getSubProjectId()); + data.setSubprojectId(subProjectComponent.get().getSubProjectId()); data.setDescription(ampComponent.getDescription()); data.setDisplayName(ampComponent.getTitle()); editSubProjectModel.setData(data); @@ -256,9 +278,9 @@ public static void createSubProjects(AmpActivityVersion ampActivityVersion, Stri EditSubProjectedBudgetModel editSubProjectedBudgetModel = new EditSubProjectedBudgetModel(); EditSubProjectedBudgetModel.Data data1 = new EditSubProjectedBudgetModel.Data(); data1.setProjectId(projectId); - data1.setSubprojectId(ampComponent.getSubProjectId()); + data1.setSubprojectId(subProjectComponent.get().getSubProjectId()); data1.setValue(BigDecimal.valueOf(componentFunding.getTransactionAmount()).toString()); - data1.setOrganization(componentFunding.getReportingOrganization().getName()); + data1.setOrganization(componentFunding.getReportingOrganization()!=null?componentFunding.getReportingOrganization().getName():"Funding Org"); editSubProjectedBudgetModel.setData(data1); editSubProjectedBudgetModel.setApiVersion(getSettingValue(settings, "apiVersion")); GenericWebClient.postForSingleObjResponse(getSettingValue(settings, "baseUrl") + "api/subproject.budget.updateProjected", editSubProjectedBudgetModel, EditSubProjectedBudgetModel.class, String.class, token).subscribeOn(Schedulers.parallel()) diff --git a/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java b/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java index d475f9ef3ce..b2e2d042915 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java @@ -657,7 +657,7 @@ public static List getSubIntentsByMother(String motherName) { Session session = PersistenceManager.getRequestDBSession(); try { - return session.createNativeQuery(" SELECT t. * FROM amp_trubudget_sub_intent t WHERE mother_intent_name='"+motherName+"'", SubIntents.class).list(); + return session.createNativeQuery(" SELECT t. * FROM amp_trubudget_sub_intent t WHERE mother_intent_name='"+motherName+"'", SubIntents.class).setCacheable(true).list(); }catch (Exception e) { diff --git a/amp/repository/digi-common.xml b/amp/repository/digi-common.xml index 28758c33407..993880374d6 100644 --- a/amp/repository/digi-common.xml +++ b/amp/repository/digi-common.xml @@ -24,6 +24,7 @@ org.digijava.kernel.entity.trubudget.TruBudgetIntent org.digijava.kernel.entity.trubudget.SubIntents org.digijava.module.trubudget.dbentity.TruBudgetActivity + org.digijava.module.trubudget.dbentity.SubProjectComponent org.digijava.kernel.entity.Address org.digijava.kernel.entity.GeoRegion org.digijava.kernel.user.User From b29ec82b7ff35d6b4162079d3defd235e74fcfaa Mon Sep 17 00:00:00 2001 From: brianbrix Date: Mon, 18 Sep 2023 20:22:12 +0300 Subject: [PATCH 100/307] AMP-30723 Feature -implement amp TruBudget integration AMP-30725 CREATION OF COMPONENTS --- .../aim/startup/AMPStartupListener.java | 1 + .../model/subproject/EditSubProjectModel.java | 3 +- .../module/trubudget/util/ProjectUtil.java | 35 ++++++++++++------- 3 files changed, 25 insertions(+), 14 deletions(-) diff --git a/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java b/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java index ea22f7f61d0..36337ebf383 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java @@ -280,6 +280,7 @@ public static void runQuery() " (nextval('amp_trubudget_sub_intent_seq'),'subproject.budget.updateProjected', 'subproject')," + " (nextval('amp_trubudget_sub_intent_seq'),'subproject.update', 'subproject')," + " (nextval('amp_trubudget_sub_intent_seq'),'subproject.intent.revokePermission', 'subproject')," + + " (nextval('amp_trubudget_sub_intent_seq'),'subproject.intent.grantPermission', 'subproject')," + " (nextval('amp_trubudget_sub_intent_seq'),'subproject.reorderWorkflowitems', 'subproject')," + " (nextval('amp_trubudget_sub_intent_seq'),'subproject.createWorkflowitem', 'subproject')," + " (nextval('amp_trubudget_sub_intent_seq'),'subproject.close', 'subproject')," + diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/model/subproject/EditSubProjectModel.java b/amp/WEB-INF/src/org/digijava/module/trubudget/model/subproject/EditSubProjectModel.java index 2a2e9eecedb..effc2897209 100644 --- a/amp/WEB-INF/src/org/digijava/module/trubudget/model/subproject/EditSubProjectModel.java +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/model/subproject/EditSubProjectModel.java @@ -1,6 +1,7 @@ package org.digijava.module.trubudget.model.subproject; +import java.util.HashMap; import java.util.Map; public class EditSubProjectModel { @@ -29,7 +30,7 @@ public static class Data { private String subprojectId; private String displayName; private String description; - private Map additionalData; + private Map additionalData= new HashMap<>(); // Getters and setters for projectId, displayName, and description diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java b/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java index 141c81561c6..11341b0c6bb 100644 --- a/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java @@ -17,7 +17,6 @@ import org.hibernate.type.LongType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import reactor.core.publisher.Mono; import reactor.core.scheduler.Schedulers; import java.math.BigDecimal; @@ -110,17 +109,19 @@ public static void createProject(AmpActivityVersion ampActivityVersion) throws U }); - TruBudgetActivity truBudgetActivity = new TruBudgetActivity(); - truBudgetActivity.setAmpActivityId(ampActivityVersion.getAmpActivityId()); - truBudgetActivity.setTruBudgetId(project.getId()); - session.saveOrUpdate(truBudgetActivity); + } ); - createSubProjects(ampActivityVersion, project.getId(),settings); + createUpdateSubProjects(ampActivityVersion, project.getId(),settings); + TruBudgetActivity truBudgetActivity = new TruBudgetActivity(); + truBudgetActivity.setAmpActivityId(ampActivityVersion.getAmpActivityId()); + truBudgetActivity.setTruBudgetId(project.getId()); + session.save(truBudgetActivity); + session.flush(); } @@ -182,10 +183,10 @@ public static void updateProject(String projectId, AmpActivityVersion ampActivit } } - createSubProjects(ampActivityVersion, projectId,settings); + createUpdateSubProjects(ampActivityVersion, projectId,settings); } - public static void createSubProjects(AmpActivityVersion ampActivityVersion, String projectId, List settings) throws URISyntaxException { + public static void createUpdateSubProjects(AmpActivityVersion ampActivityVersion, String projectId, List settings) throws URISyntaxException { AbstractCache myCache = new EhCacheWrapper("trubudget"); String token = (String) myCache.get("truBudgetToken"); @@ -193,6 +194,11 @@ public static void createSubProjects(AmpActivityVersion ampActivityVersion, Stri logger.info("Trubudget Cached Token:" + token); for (AmpComponent ampComponent: ampActivityVersion.getComponents()) { + if (ampComponent.getAmpComponentId()==null) + { +// PersistenceManager.getRequestDBSession().save(ampComponent); + PersistenceManager.getRequestDBSession().flush(); + } Optional subProjectComponent = PersistenceManager.getRequestDBSession().createQuery("FROM "+SubProjectComponent.class.getName()+" sb WHERE sb.componentId="+ampComponent.getAmpComponentId(), SubProjectComponent.class).stream().findAny(); if (!subProjectComponent.isPresent()) {//create subproject CreateSubProjectModel createSubProjectModel = new CreateSubProjectModel(); @@ -248,10 +254,7 @@ public static void createSubProjects(AmpActivityVersion ampActivityVersion, Stri } }); - SubProjectComponent subProjectComponent1 = new SubProjectComponent(); - subProjectComponent1.setComponentId(ampComponent.getAmpComponentId()); - subProjectComponent1.setSubProjectId(subproject.getId()); - session.saveOrUpdate(subProjectComponent1); + }); }catch (Exception e) @@ -259,7 +262,11 @@ public static void createSubProjects(AmpActivityVersion ampActivityVersion, Stri logger.info("Error during subproject creation"); e.printStackTrace(); } -// session.flush(); + SubProjectComponent subProjectComponent1 = new SubProjectComponent(); + subProjectComponent1.setComponentId(ampComponent.getAmpComponentId()); + subProjectComponent1.setSubProjectId(subproject.getId()); + session.save(subProjectComponent1); + session.flush(); } else {//update subProject EditSubProjectModel editSubProjectModel = new EditSubProjectModel(); @@ -268,7 +275,9 @@ public static void createSubProjects(AmpActivityVersion ampActivityVersion, Stri data.setSubprojectId(subProjectComponent.get().getSubProjectId()); data.setDescription(ampComponent.getDescription()); data.setDisplayName(ampComponent.getTitle()); + editSubProjectModel.setData(data); + editSubProjectModel.setApiVersion(getSettingValue(settings, "apiVersion")); //call edit GenericWebClient.postForSingleObjResponse(getSettingValue(settings, "baseUrl") + "api/subproject.update", editSubProjectModel, EditSubProjectModel.class, String.class, token) From 7a33f198e3852459874b1067a6bcb054ac0540d4 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Tue, 19 Sep 2023 00:14:13 +0300 Subject: [PATCH 101/307] AMP-30723 Feature -implement amp TruBudget integration AMP-30725 CREATION OF COMPONENTS --- .../module/aim/dbentity/AmpComponent.hbm.xml | 1 + .../module/aim/dbentity/AmpComponent.java | 16 +++++-- .../dbentity/SubProjectComponent.hbm.xml | 16 ------- .../dbentity/SubProjectComponent.java | 43 ------------------- .../module/trubudget/util/ProjectUtil.java | 32 ++++++-------- 5 files changed, 26 insertions(+), 82 deletions(-) delete mode 100644 amp/WEB-INF/src/org/digijava/module/trubudget/dbentity/SubProjectComponent.hbm.xml delete mode 100644 amp/WEB-INF/src/org/digijava/module/trubudget/dbentity/SubProjectComponent.java diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponent.hbm.xml b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponent.hbm.xml index 1d229c58a44..fe9cd35803c 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponent.hbm.xml +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponent.hbm.xml @@ -11,6 +11,7 @@ + diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponent.java b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponent.java index 2f910bb802a..8dd6f6b5dcd 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponent.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponent.java @@ -17,6 +17,7 @@ import org.digijava.module.aim.util.Output; import java.io.Serializable; +import java.sql.Timestamp; import java.util.*; import static org.digijava.module.aim.annotations.interchange.ActivityFieldsConstants.*; @@ -48,7 +49,7 @@ public class AmpComponent implements Serializable, Comparable, Ver @TranslatableField private String description; - private java.sql.Timestamp creationdate; + private Timestamp creationdate; private String code; @@ -66,6 +67,15 @@ public class AmpComponent implements Serializable, Comparable, Ver importable = true) }) private Set fundings = new HashSet<>(); + private String subProjectComponentId; + + public String getSubProjectComponentId() { + return subProjectComponentId; + } + + public void setSubProjectComponentId(String subProjectComponentId) { + this.subProjectComponentId = subProjectComponentId; + } public static class AmpComponentComparator implements Comparator{ @Override @@ -171,10 +181,10 @@ public int hashCode() { } */ - public java.sql.Timestamp getCreationdate() { + public Timestamp getCreationdate() { return creationdate; } - public void setCreationdate(java.sql.Timestamp creationdate) { + public void setCreationdate(Timestamp creationdate) { this.creationdate = creationdate; } diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/dbentity/SubProjectComponent.hbm.xml b/amp/WEB-INF/src/org/digijava/module/trubudget/dbentity/SubProjectComponent.hbm.xml deleted file mode 100644 index 2c0973f8e28..00000000000 --- a/amp/WEB-INF/src/org/digijava/module/trubudget/dbentity/SubProjectComponent.hbm.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - amp_trubudget_subproject_component_seq - - - - - - - \ No newline at end of file diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/dbentity/SubProjectComponent.java b/amp/WEB-INF/src/org/digijava/module/trubudget/dbentity/SubProjectComponent.java deleted file mode 100644 index 834cb2e810f..00000000000 --- a/amp/WEB-INF/src/org/digijava/module/trubudget/dbentity/SubProjectComponent.java +++ /dev/null @@ -1,43 +0,0 @@ -package org.digijava.module.trubudget.dbentity; - -import org.hibernate.annotations.DynamicUpdate; - -import javax.persistence.*; - -@Table(name = "amp_trubudget_subproject_component") -@Cacheable -@DynamicUpdate -@Entity -public class SubProjectComponent { - @Id - @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "amp_trubudget_subproject_component_seq") - @SequenceGenerator(name = "amp_trubudget_subproject_component_seq", sequenceName = "amp_trubudget_subproject_component_seq", allocationSize = 1) - @Column(name = "id") - private Long id; - private Long componentId; - private String subProjectId; - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public Long getComponentId() { - return componentId; - } - - public void setComponentId(Long componentId) { - this.componentId = componentId; - } - - public String getSubProjectId() { - return subProjectId; - } - - public void setSubProjectId(String subProjectId) { - this.subProjectId = subProjectId; - } -} diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java b/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java index 11341b0c6bb..cb94f6403af 100644 --- a/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java @@ -5,7 +5,6 @@ import org.digijava.kernel.entity.trubudget.SubIntents; import org.digijava.kernel.persistence.PersistenceManager; import org.digijava.module.aim.dbentity.*; -import org.digijava.module.trubudget.dbentity.SubProjectComponent; import org.digijava.module.trubudget.dbentity.TruBudgetActivity; import org.digijava.module.trubudget.model.project.*; import org.digijava.module.trubudget.model.subproject.EditSubProjectModel; @@ -109,10 +108,6 @@ public static void createProject(AmpActivityVersion ampActivityVersion) throws U }); - - - - } ); @@ -122,7 +117,7 @@ public static void createProject(AmpActivityVersion ampActivityVersion) throws U truBudgetActivity.setTruBudgetId(project.getId()); session.save(truBudgetActivity); - session.flush(); +// session.flush(); } @@ -194,13 +189,8 @@ public static void createUpdateSubProjects(AmpActivityVersion ampActivityVersion logger.info("Trubudget Cached Token:" + token); for (AmpComponent ampComponent: ampActivityVersion.getComponents()) { - if (ampComponent.getAmpComponentId()==null) - { -// PersistenceManager.getRequestDBSession().save(ampComponent); - PersistenceManager.getRequestDBSession().flush(); - } - Optional subProjectComponent = PersistenceManager.getRequestDBSession().createQuery("FROM "+SubProjectComponent.class.getName()+" sb WHERE sb.componentId="+ampComponent.getAmpComponentId(), SubProjectComponent.class).stream().findAny(); - if (!subProjectComponent.isPresent()) {//create subproject +// Optional subProjectComponent = PersistenceManager.getRequestDBSession().createQuery("FROM "+SubProjectComponent.class.getName()+" sb WHERE sb.component="+ampComponent.getAmpComponentId(), SubProjectComponent.class).stream().findAny(); + if (ampComponent.getSubProjectComponentId()==null) {//create subproject CreateSubProjectModel createSubProjectModel = new CreateSubProjectModel(); CreateSubProjectModel.Data data = new CreateSubProjectModel.Data(); CreateSubProjectModel.Subproject subproject = new CreateSubProjectModel.Subproject(); @@ -262,17 +252,19 @@ public static void createUpdateSubProjects(AmpActivityVersion ampActivityVersion logger.info("Error during subproject creation"); e.printStackTrace(); } - SubProjectComponent subProjectComponent1 = new SubProjectComponent(); - subProjectComponent1.setComponentId(ampComponent.getAmpComponentId()); - subProjectComponent1.setSubProjectId(subproject.getId()); - session.save(subProjectComponent1); - session.flush(); +// SubProjectComponent subProjectComponent1 = new SubProjectComponent(); +// subProjectComponent1.setComponent(ampComponent); +// subProjectComponent1.setSubProjectId(subproject.getId()); + ampComponent.setSubProjectComponentId(subproject.getId()); +// session.merge(ampComponent); +// session.save(subProjectComponent1); +// session.flush(); } else {//update subProject EditSubProjectModel editSubProjectModel = new EditSubProjectModel(); EditSubProjectModel.Data data = new EditSubProjectModel.Data(); data.setProjectId(projectId); - data.setSubprojectId(subProjectComponent.get().getSubProjectId()); + data.setSubprojectId(ampComponent.getSubProjectComponentId()); data.setDescription(ampComponent.getDescription()); data.setDisplayName(ampComponent.getTitle()); @@ -287,7 +279,7 @@ public static void createUpdateSubProjects(AmpActivityVersion ampActivityVersion EditSubProjectedBudgetModel editSubProjectedBudgetModel = new EditSubProjectedBudgetModel(); EditSubProjectedBudgetModel.Data data1 = new EditSubProjectedBudgetModel.Data(); data1.setProjectId(projectId); - data1.setSubprojectId(subProjectComponent.get().getSubProjectId()); + data1.setSubprojectId(ampComponent.getSubProjectComponentId()); data1.setValue(BigDecimal.valueOf(componentFunding.getTransactionAmount()).toString()); data1.setOrganization(componentFunding.getReportingOrganization()!=null?componentFunding.getReportingOrganization().getName():"Funding Org"); editSubProjectedBudgetModel.setData(data1); From 0e0a0c42a92e9cd4b297eea11d2808e91a606b82 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Tue, 19 Sep 2023 00:14:29 +0300 Subject: [PATCH 102/307] AMP-30723 Feature -implement amp TruBudget integration AMP-30725 CREATION OF COMPONENTS --- .../src/org/dgfoundation/amp/onepager/util/ActivityUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/util/ActivityUtil.java b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/util/ActivityUtil.java index fb03a8e15a7..7a61f279c00 100644 --- a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/util/ActivityUtil.java +++ b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/util/ActivityUtil.java @@ -328,7 +328,7 @@ public static AmpActivityVersion saveActivityNewVersion(AmpActivityVersion a, { //update project ProjectUtil.updateProject(truBudgetActivity.getTruBudgetId(),a); - session.flush(); +// session.flush(); } } From 70c2cf4f88dd40f1fc984845b4f9dc640aa75be3 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Tue, 19 Sep 2023 00:23:36 +0300 Subject: [PATCH 103/307] AMP-30723 Feature -implement amp TruBudget integration AMP-30725 CREATION OF COMPONENTS --- .../digijava/module/trubudget/util/ProjectUtil.java | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java b/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java index cb94f6403af..678b4792060 100644 --- a/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java @@ -189,19 +189,15 @@ public static void createUpdateSubProjects(AmpActivityVersion ampActivityVersion logger.info("Trubudget Cached Token:" + token); for (AmpComponent ampComponent: ampActivityVersion.getComponents()) { -// Optional subProjectComponent = PersistenceManager.getRequestDBSession().createQuery("FROM "+SubProjectComponent.class.getName()+" sb WHERE sb.component="+ampComponent.getAmpComponentId(), SubProjectComponent.class).stream().findAny(); if (ampComponent.getSubProjectComponentId()==null) {//create subproject CreateSubProjectModel createSubProjectModel = new CreateSubProjectModel(); CreateSubProjectModel.Data data = new CreateSubProjectModel.Data(); CreateSubProjectModel.Subproject subproject = new CreateSubProjectModel.Subproject(); subproject.setId(UUID.randomUUID().toString().replaceAll("-", "")); -// subproject.setAmount(ampComponent.); subproject.setDisplayName(ampComponent.getTitle()); -// BigDecimal totalFunding = BigDecimal.ZERO; if (!ampComponent.getFundings().isEmpty()) { for (AmpComponentFunding componentFunding : ampComponent.getFundings()) { if (componentFunding.getTransactionType() == 0 && Objects.equals(componentFunding.getAdjustmentType().getValue(), "Planned")) { -// totalFunding = totalFunding.add(BigDecimal.valueOf(componentFunding.getTransactionAmount())); CreateProjectModel.ProjectedBudget projectedBudget = new CreateProjectModel.ProjectedBudget(); projectedBudget.setOrganization(componentFunding.getReportingOrganization()!=null?componentFunding.getReportingOrganization().getName():"Funding Org"); projectedBudget.setValue(BigDecimal.valueOf(componentFunding.getTransactionAmount()).toString()); @@ -211,7 +207,6 @@ public static void createUpdateSubProjects(AmpActivityVersion ampActivityVersion } subproject.setCurrency(new ArrayList<>(ampComponent.getFundings()).get(0).getCurrency().getCurrencyCode()); } -// subproject.setAmount(totalFunding.toString()); subproject.setAssignee(user); subproject.setValidator(user); subproject.setDescription(ampComponent.getDescription()); @@ -221,7 +216,6 @@ public static void createUpdateSubProjects(AmpActivityVersion ampActivityVersion createSubProjectModel.setApiVersion(getSettingValue(settings, "apiVersion")); createSubProjectModel.setData(data); List subIntents = getSubIntentsByMother("subproject"); - Session session = PersistenceManager.getRequestDBSession(); try { GenericWebClient.postForSingleObjResponse(getSettingValue(settings, "baseUrl") + "api/project.createSubproject", createSubProjectModel, CreateSubProjectModel.class, String.class, token) .subscribe(res-> { @@ -252,13 +246,8 @@ public static void createUpdateSubProjects(AmpActivityVersion ampActivityVersion logger.info("Error during subproject creation"); e.printStackTrace(); } -// SubProjectComponent subProjectComponent1 = new SubProjectComponent(); -// subProjectComponent1.setComponent(ampComponent); -// subProjectComponent1.setSubProjectId(subproject.getId()); + ampComponent.setSubProjectComponentId(subproject.getId()); -// session.merge(ampComponent); -// session.save(subProjectComponent1); -// session.flush(); } else {//update subProject EditSubProjectModel editSubProjectModel = new EditSubProjectModel(); From 823b00694f5826526c9570b24a1b5df7d0b04cd4 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Tue, 19 Sep 2023 01:35:54 +0300 Subject: [PATCH 104/307] AMP-30723 Feature -implement amp TruBudget integration AMP-30725 CREATION OF COMPONENTS --- .../aim/action/ShowActivityPrintPreview.java | 18 ++--- .../aim/startup/AMPStartupListener.java | 6 ++ .../subproject/CreateWorkFlowItemModel.java | 18 ++++- .../module/trubudget/util/ProjectUtil.java | 73 ++++++++++++++++++- 4 files changed, 98 insertions(+), 17 deletions(-) diff --git a/amp/WEB-INF/src/org/digijava/module/aim/action/ShowActivityPrintPreview.java b/amp/WEB-INF/src/org/digijava/module/aim/action/ShowActivityPrintPreview.java index f241430f36e..02a47b125f4 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/action/ShowActivityPrintPreview.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/action/ShowActivityPrintPreview.java @@ -950,15 +950,11 @@ private void getComponents(Collection componets, Long actId, EditActivityForm ea Collection fundingComponentActivity = ActivityUtil.getFundingComponentActivity( tempComp.getComponentId()); - Iterator cItr = fundingComponentActivity.iterator(); - while (cItr.hasNext()) { - AmpComponentFunding ampCompFund = (AmpComponentFunding) cItr - .next(); - + for (AmpComponentFunding ampCompFund : fundingComponentActivity) { double disb = 0; if (ampCompFund.getAdjustmentType().getValue().equals(CategoryConstants.ADJUSTMENT_TYPE_PLANNED.getValueKey()) - && ampCompFund.getTransactionType().intValue() == 1) - disb = ampCompFund.getTransactionAmount().doubleValue(); + && ampCompFund.getTransactionType() == 1) + disb = ampCompFund.getTransactionAmount(); eaForm.getComponents().setCompTotalDisb(eaForm.getComponents().getCompTotalDisb() + disb); FundingDetail fd = new FundingDetail(); @@ -970,7 +966,7 @@ private void getComponents(Collection componets, Long actId, EditActivityForm ea fd.setTransactionAmount(FormatHelper.formatNumber(ampCompFund.getTransactionAmount().doubleValue())); fd.setTransactionDate(DateConversion.convertDateToLocalizedString(ampCompFund.getTransactionDate())); fd.setFiscalYear(DateConversion.convertDateToFiscalYearString(ampCompFund.getTransactionDate())); - fd.setTransactionType(ampCompFund.getTransactionType().intValue()); + fd.setTransactionType(ampCompFund.getTransactionType()); fd.setComponentOrganisation(ampCompFund.getReportingOrganization()); fd.setComponentSecondResponsibleOrganization(ampCompFund.getComponentSecondResponsibleOrganization()); fd.setComponentTransactionDescription(ampCompFund.getDescription()); @@ -1023,10 +1019,8 @@ private double getAmountInDefaultCurrency(FundingDetail fundDet, ApplicationSett double frmExRt = Util.getExchange(fundDet.getCurrencyCode(),dt); String toCurrCode = CurrencyUtil.getAmpcurrency( appSet.getCurrencyId() ).getCurrencyCode(); double toExRt = Util.getExchange(toCurrCode,dt); - - double amt = CurrencyWorker.convert1(FormatHelper.parseDouble(fundDet.getTransactionAmount()),frmExRt,toExRt); - - return amt; + + return CurrencyWorker.convert1(FormatHelper.parseDouble(fundDet.getTransactionAmount()),frmExRt,toExRt); } diff --git a/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java b/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java index 36337ebf383..fcec4b51b76 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java @@ -285,6 +285,12 @@ public static void runQuery() " (nextval('amp_trubudget_sub_intent_seq'),'subproject.createWorkflowitem', 'subproject')," + " (nextval('amp_trubudget_sub_intent_seq'),'subproject.close', 'subproject')," + " (nextval('amp_trubudget_sub_intent_seq'),'subproject.assign', 'subproject')" + + " (nextval('amp_trubudget_sub_intent_seq'),'workflowitem.assign', 'workflowitem')" + + " (nextval('amp_trubudget_sub_intent_seq'),'workflowitem.update', 'workflowitem')" + + " (nextval('amp_trubudget_sub_intent_seq'),'workflowitem.close', 'workflowitem')" + + " (nextval('amp_trubudget_sub_intent_seq'),'workflowitem.validateDocument', 'workflowitem')" + + " (nextval('amp_trubudget_sub_intent_seq'),'workflowitem.intent.revokePermission', 'workflowitem')" + + " (nextval('amp_trubudget_sub_intent_seq'),'workflowitem.intent.grantPermission', 'workflowitem')" + " ON CONFLICT (sub_trubudget_intent_name,mother_intent_name) DO NOTHING"; logger.info("Inserting sub intents"); statement.executeUpdate(insertSubIntentsStatement); diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/model/subproject/CreateWorkFlowItemModel.java b/amp/WEB-INF/src/org/digijava/module/trubudget/model/subproject/CreateWorkFlowItemModel.java index ae3c4a9270d..eca391e3341 100644 --- a/amp/WEB-INF/src/org/digijava/module/trubudget/model/subproject/CreateWorkFlowItemModel.java +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/model/subproject/CreateWorkFlowItemModel.java @@ -1,6 +1,8 @@ package org.digijava.module.trubudget.model.subproject; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -36,15 +38,23 @@ public static class Data { private String amountType; private String billingDate; private String dueDate; - private String exchangeRate; - private List documents; - private Map additionalData; - private String workflowitemType; + private String exchangeRate="1.0"; + + private String status="open"; + private List documents= new ArrayList<>(); + private Map additionalData= new HashMap<>(); + private String workflowitemType="general"; // Getters and setters for projectId, subprojectId, displayName, description, // amount, assignee, currency, amountType, billingDate, dueDate, exchangeRate, // documents, additionalData, and workflowitemType + public String getStatus() { + return status; + } + public void setStatus(String status) { + this.status = status; + } public String getProjectId() { return projectId; } diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java b/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java index 678b4792060..17cf71488eb 100644 --- a/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java @@ -7,12 +7,15 @@ import org.digijava.module.aim.dbentity.*; import org.digijava.module.trubudget.dbentity.TruBudgetActivity; import org.digijava.module.trubudget.model.project.*; +import org.digijava.module.trubudget.model.subproject.CreateWorkFlowItemModel; import org.digijava.module.trubudget.model.subproject.EditSubProjectModel; import org.digijava.module.trubudget.model.subproject.EditSubProjectedBudgetModel; import org.digijava.module.trubudget.model.subproject.SubProjectGrantRevokePermModel; +import org.digijava.module.trubudget.model.workflowitem.WFItemGrantRevokePermModel; import org.digijava.module.um.util.GenericWebClient; import org.hibernate.Session; import org.hibernate.query.Query; +import org.hibernate.type.LocalDateTimeType; import org.hibernate.type.LongType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -248,6 +251,7 @@ public static void createUpdateSubProjects(AmpActivityVersion ampActivityVersion } ampComponent.setSubProjectComponentId(subproject.getId()); + createUpdateWorkflowItems(ampActivityVersion,projectId, subproject.getId(), settings); } else {//update subProject EditSubProjectModel editSubProjectModel = new EditSubProjectModel(); @@ -278,7 +282,74 @@ public static void createUpdateSubProjects(AmpActivityVersion ampActivityVersion } } + createUpdateWorkflowItems(ampActivityVersion,projectId, ampComponent.getSubProjectComponentId(), settings); + } } } -} + public static void createUpdateWorkflowItems(AmpActivityVersion ampActivityVersion, String projectId, String subProjectId, List settings) throws URISyntaxException { + AbstractCache myCache = new EhCacheWrapper("trubudget"); + String token = (String) myCache.get("truBudgetToken"); + String user = (String) myCache.get("truBudgetUser"); + logger.info("Trubudget Cached Token:" + token); + for (AmpComponent ampComponent: ampActivityVersion.getComponents()) { + // TODO: 9/19/23 look for a way of associating given subproject with workflow item + if (ampComponent.getSubProjectComponentId() == null) {// + + if (!ampComponent.getFundings().isEmpty()) { + for (AmpComponentFunding componentFunding : ampComponent.getFundings()) { + if (componentFunding.getTransactionType() == 1 && (Objects.equals(componentFunding.getAdjustmentType().getValue(), "Planned") || Objects.equals(componentFunding.getAdjustmentType().getValue(), "Actual"))) { + CreateWorkFlowItemModel createWorkFlowItemModel = new CreateWorkFlowItemModel(); + createWorkFlowItemModel.setApiVersion(getSettingValue(settings, "apiVersion")); + CreateWorkFlowItemModel.Data data = new CreateWorkFlowItemModel.Data(); + data.setProjectId(projectId); + data.setSubprojectId(subProjectId); + data.setAssignee(user); + data.setDescription(ampComponent.getDescription()); + data.setDisplayName(ampComponent.getTitle()); + data.setAmount(BigDecimal.valueOf(componentFunding.getTransactionAmount()).toString()); + data.setCurrency(componentFunding.getCurrency().getCurrencyCode()); + data.setAmountType(Objects.equals(componentFunding.getAdjustmentType().getValue(), "Planned") ?"allocated":"paid"); + data.setBillingDate(String.valueOf(componentFunding.getTransactionDate())); + data.setDueDate(String.valueOf(componentFunding.getReportingDate())); + createWorkFlowItemModel.setData(data); + List subIntents = getSubIntentsByMother("workflowitem"); + try { + GenericWebClient.postForSingleObjResponse(getSettingValue(settings, "baseUrl") + "api/subproject.createWorkflowitem", createWorkFlowItemModel, CreateWorkFlowItemModel.class, String.class, token) + .subscribe(res-> { + logger.info("Create WorkflowItem response: "+res); + subIntents.forEach(subIntent -> { + WFItemGrantRevokePermModel wfItemGrantRevokePermModel = new WFItemGrantRevokePermModel(); + WFItemGrantRevokePermModel.Data data2 = new WFItemGrantRevokePermModel.Data(); + data2.setProjectId(projectId); + data2.setSubprojectId(subProjectId); + data2.setIdentity(user); + data2.setIntent(subIntent.getSubTruBudgetIntentName()); + wfItemGrantRevokePermModel.setData(data2); + wfItemGrantRevokePermModel.setApiVersion(getSettingValue(settings, "apiVersion")); + try { + GenericWebClient.postForSingleObjResponse(getSettingValue(settings, "baseUrl") + "api/workflowitem.intent.grantPermission", wfItemGrantRevokePermModel, WFItemGrantRevokePermModel.class, String.class, token).subscribeOn(Schedulers.parallel()).subscribe( + response -> logger.info("Grant workflowitem permission response: " + response) + ); + } catch (URISyntaxException e) { + throw new RuntimeException(e); + } + + }); + + }); + + }catch (Exception e) + { + logger.info("Error during subproject creation"); + e.printStackTrace(); + } + } + } +// subproject.setCurrency(new ArrayList<>(ampComponent.getFundings()).get(0).getCurrency().getCurrencyCode()); + } + } + } + + } + } From 322eb6ed4253f54f3ea2d0aa80add168496ad1a1 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Tue, 19 Sep 2023 01:37:53 +0300 Subject: [PATCH 105/307] AMP-30723 Feature -implement amp TruBudget integration AMP-30725 CREATION OF COMPONENTS --- .../src/org/digijava/module/trubudget/util/ProjectUtil.java | 1 - 1 file changed, 1 deletion(-) diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java b/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java index 17cf71488eb..32827b2c579 100644 --- a/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java @@ -346,7 +346,6 @@ public static void createUpdateWorkflowItems(AmpActivityVersion ampActivityVersi } } } -// subproject.setCurrency(new ArrayList<>(ampComponent.getFundings()).get(0).getCurrency().getCurrencyCode()); } } } From 52460ce408401ae32349d19170db9b54c04afa79 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Tue, 19 Sep 2023 21:32:43 +0300 Subject: [PATCH 106/307] AMP-30723 Feature -implement amp TruBudget integration AMP-30725 CREATION OF COMPONENTS --- .../digijava/module/trubudget/util/ProjectUtil.java | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java b/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java index 32827b2c579..cc110cd8919 100644 --- a/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java @@ -15,7 +15,6 @@ import org.digijava.module.um.util.GenericWebClient; import org.hibernate.Session; import org.hibernate.query.Query; -import org.hibernate.type.LocalDateTimeType; import org.hibernate.type.LongType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -251,7 +250,7 @@ public static void createUpdateSubProjects(AmpActivityVersion ampActivityVersion } ampComponent.setSubProjectComponentId(subproject.getId()); - createUpdateWorkflowItems(ampActivityVersion,projectId, subproject.getId(), settings); + createUpdateWorkflowItems(projectId, subproject.getId(),ampComponent, settings); } else {//update subProject EditSubProjectModel editSubProjectModel = new EditSubProjectModel(); @@ -282,19 +281,16 @@ public static void createUpdateSubProjects(AmpActivityVersion ampActivityVersion } } - createUpdateWorkflowItems(ampActivityVersion,projectId, ampComponent.getSubProjectComponentId(), settings); + createUpdateWorkflowItems(projectId, ampComponent.getSubProjectComponentId(),ampComponent, settings); } } } - public static void createUpdateWorkflowItems(AmpActivityVersion ampActivityVersion, String projectId, String subProjectId, List settings) throws URISyntaxException { + public static void createUpdateWorkflowItems(String projectId, String subProjectId, AmpComponent ampComponent, List settings) throws URISyntaxException { AbstractCache myCache = new EhCacheWrapper("trubudget"); String token = (String) myCache.get("truBudgetToken"); String user = (String) myCache.get("truBudgetUser"); logger.info("Trubudget Cached Token:" + token); - for (AmpComponent ampComponent: ampActivityVersion.getComponents()) { - // TODO: 9/19/23 look for a way of associating given subproject with workflow item - if (ampComponent.getSubProjectComponentId() == null) {// if (!ampComponent.getFundings().isEmpty()) { for (AmpComponentFunding componentFunding : ampComponent.getFundings()) { @@ -346,8 +342,6 @@ public static void createUpdateWorkflowItems(AmpActivityVersion ampActivityVersi } } } - } - } } } From d02ed017d92702ab5ad03adb8ad29d1006669d6e Mon Sep 17 00:00:00 2001 From: brianbrix Date: Tue, 19 Sep 2023 22:32:23 +0300 Subject: [PATCH 107/307] AMP-30723 Feature -implement amp TruBudget integration AMP-30725 CREATION OF COMPONENTS --- .../module/aim/startup/AMPStartupListener.java | 12 ++++++------ .../digijava/module/trubudget/util/ProjectUtil.java | 12 ++++++++++-- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java b/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java index fcec4b51b76..9c6104ad0a8 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java @@ -284,12 +284,12 @@ public static void runQuery() " (nextval('amp_trubudget_sub_intent_seq'),'subproject.reorderWorkflowitems', 'subproject')," + " (nextval('amp_trubudget_sub_intent_seq'),'subproject.createWorkflowitem', 'subproject')," + " (nextval('amp_trubudget_sub_intent_seq'),'subproject.close', 'subproject')," + - " (nextval('amp_trubudget_sub_intent_seq'),'subproject.assign', 'subproject')" + - " (nextval('amp_trubudget_sub_intent_seq'),'workflowitem.assign', 'workflowitem')" + - " (nextval('amp_trubudget_sub_intent_seq'),'workflowitem.update', 'workflowitem')" + - " (nextval('amp_trubudget_sub_intent_seq'),'workflowitem.close', 'workflowitem')" + - " (nextval('amp_trubudget_sub_intent_seq'),'workflowitem.validateDocument', 'workflowitem')" + - " (nextval('amp_trubudget_sub_intent_seq'),'workflowitem.intent.revokePermission', 'workflowitem')" + + " (nextval('amp_trubudget_sub_intent_seq'),'subproject.assign', 'subproject')," + + " (nextval('amp_trubudget_sub_intent_seq'),'workflowitem.assign', 'workflowitem')," + + " (nextval('amp_trubudget_sub_intent_seq'),'workflowitem.update', 'workflowitem')," + + " (nextval('amp_trubudget_sub_intent_seq'),'workflowitem.close', 'workflowitem')," + + " (nextval('amp_trubudget_sub_intent_seq'),'workflowitem.validateDocument', 'workflowitem')," + + " (nextval('amp_trubudget_sub_intent_seq'),'workflowitem.intent.revokePermission', 'workflowitem')," + " (nextval('amp_trubudget_sub_intent_seq'),'workflowitem.intent.grantPermission', 'workflowitem')" + " ON CONFLICT (sub_trubudget_intent_name,mother_intent_name) DO NOTHING"; logger.info("Inserting sub intents"); diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java b/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java index cc110cd8919..2403adddbf6 100644 --- a/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java @@ -22,6 +22,8 @@ import java.math.BigDecimal; import java.net.URISyntaxException; +import java.text.SimpleDateFormat; +import java.time.Instant; import java.util.*; import java.util.stream.Collectors; @@ -306,8 +308,9 @@ public static void createUpdateWorkflowItems(String projectId, String subProject data.setAmount(BigDecimal.valueOf(componentFunding.getTransactionAmount()).toString()); data.setCurrency(componentFunding.getCurrency().getCurrencyCode()); data.setAmountType(Objects.equals(componentFunding.getAdjustmentType().getValue(), "Planned") ?"allocated":"paid"); - data.setBillingDate(String.valueOf(componentFunding.getTransactionDate())); - data.setDueDate(String.valueOf(componentFunding.getReportingDate())); + data.setBillingDate(convertToISO8601(componentFunding.getTransactionDate())); + data.setDueDate(convertToISO8601(componentFunding.getTransactionDate()));//set approprite date +// data.setDueDate(String.valueOf(componentFunding.getReportingDate())); createWorkFlowItemModel.setData(data); List subIntents = getSubIntentsByMother("workflowitem"); try { @@ -345,4 +348,9 @@ public static void createUpdateWorkflowItems(String projectId, String subProject } } + + public static String convertToISO8601(Date date) { + Instant instant = date.toInstant(); + return instant.toString(); + } } From a6f034af436c9a5f26f87394eaa81fc6e5aaf577 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Tue, 19 Sep 2023 22:33:57 +0300 Subject: [PATCH 108/307] AMP-30723-Feature -implement amp TruBudget integration AMP-30725 -CREATION OF COMPONENTS AMP-30726-WORKFLOW CREATION --- .../src/org/digijava/module/aim/startup/AMPStartupListener.java | 1 + 1 file changed, 1 insertion(+) diff --git a/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java b/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java index 9c6104ad0a8..abc159878ef 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java @@ -293,6 +293,7 @@ public static void runQuery() " (nextval('amp_trubudget_sub_intent_seq'),'workflowitem.intent.grantPermission', 'workflowitem')" + " ON CONFLICT (sub_trubudget_intent_name,mother_intent_name) DO NOTHING"; logger.info("Inserting sub intents"); + statement.executeUpdate(insertSubIntentsStatement); // String addColumnSql = "ALTER TABLE trubudget_intent ADD COLUMN IF NOT EXISTS intent_group INTEGER"; // statement.executeUpdate(addColumnSql); From 3764195210222fa8bcc6a3e7783d0b894f62c8a7 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Wed, 20 Sep 2023 00:03:08 +0300 Subject: [PATCH 109/307] AMP-30723-Feature -implement amp TruBudget integration AMP-30725 -CREATION OF COMPONENTS AMP-30726-WORKFLOW CREATION --- .../aim/startup/AMPStartupListener.java | 10 +- .../workflowitem/CreateWFResponseModel.java | 134 ++++++++++++++++++ .../WFItemGrantRevokePermModel.java | 9 ++ .../module/trubudget/util/ProjectUtil.java | 32 +++-- 4 files changed, 174 insertions(+), 11 deletions(-) create mode 100644 amp/WEB-INF/src/org/digijava/module/trubudget/model/workflowitem/CreateWFResponseModel.java diff --git a/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java b/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java index abc159878ef..e78d3ab7a37 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java @@ -273,14 +273,20 @@ public static void runQuery() " (nextval('amp_trubudget_sub_intent_seq'),'project.assign', 'project'),"+ " (nextval('amp_trubudget_sub_intent_seq'),'project.close', 'project'),"+ " (nextval('amp_trubudget_sub_intent_seq'),'project.update', 'project'),"+ + " (nextval('amp_trubudget_sub_intent_seq'),'project.list', 'project'),"+ + " (nextval('amp_trubudget_sub_intent_seq'),'project.viewHistory', 'project'),"+ " (nextval('amp_trubudget_sub_intent_seq'),'project.createSubproject', 'project'),"+ " (nextval('amp_trubudget_sub_intent_seq'),'project.intent.grantPermission', 'project'),"+ + " (nextval('amp_trubudget_sub_intent_seq'),'project.intent.listPermissions', 'project'),"+ " (nextval('amp_trubudget_sub_intent_seq'),'project.intent.revokePermission', 'project'),"+ " (nextval('amp_trubudget_sub_intent_seq'),'project.budget.updateProjected', 'project')," + " (nextval('amp_trubudget_sub_intent_seq'),'subproject.budget.updateProjected', 'subproject')," + " (nextval('amp_trubudget_sub_intent_seq'),'subproject.update', 'subproject')," + + " (nextval('amp_trubudget_sub_intent_seq'),'subproject.list', 'subproject')," + + " (nextval('amp_trubudget_sub_intent_seq'),'subproject.viewHistory', 'subproject')," + " (nextval('amp_trubudget_sub_intent_seq'),'subproject.intent.revokePermission', 'subproject')," + " (nextval('amp_trubudget_sub_intent_seq'),'subproject.intent.grantPermission', 'subproject')," + + " (nextval('amp_trubudget_sub_intent_seq'),'subproject.intent.listPermissions', 'subproject')," + " (nextval('amp_trubudget_sub_intent_seq'),'subproject.reorderWorkflowitems', 'subproject')," + " (nextval('amp_trubudget_sub_intent_seq'),'subproject.createWorkflowitem', 'subproject')," + " (nextval('amp_trubudget_sub_intent_seq'),'subproject.close', 'subproject')," + @@ -288,8 +294,10 @@ public static void runQuery() " (nextval('amp_trubudget_sub_intent_seq'),'workflowitem.assign', 'workflowitem')," + " (nextval('amp_trubudget_sub_intent_seq'),'workflowitem.update', 'workflowitem')," + " (nextval('amp_trubudget_sub_intent_seq'),'workflowitem.close', 'workflowitem')," + - " (nextval('amp_trubudget_sub_intent_seq'),'workflowitem.validateDocument', 'workflowitem')," + + " (nextval('amp_trubudget_sub_intent_seq'),'workflowitem.viewHistory', 'workflowitem')," + + " (nextval('amp_trubudget_sub_intent_seq'),'workflowitem.list', 'workflowitem')," + " (nextval('amp_trubudget_sub_intent_seq'),'workflowitem.intent.revokePermission', 'workflowitem')," + + " (nextval('amp_trubudget_sub_intent_seq'),'workflowitem.intent.listPermissions', 'workflowitem')," + " (nextval('amp_trubudget_sub_intent_seq'),'workflowitem.intent.grantPermission', 'workflowitem')" + " ON CONFLICT (sub_trubudget_intent_name,mother_intent_name) DO NOTHING"; logger.info("Inserting sub intents"); diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/model/workflowitem/CreateWFResponseModel.java b/amp/WEB-INF/src/org/digijava/module/trubudget/model/workflowitem/CreateWFResponseModel.java new file mode 100644 index 00000000000..4de4060d32d --- /dev/null +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/model/workflowitem/CreateWFResponseModel.java @@ -0,0 +1,134 @@ +package org.digijava.module.trubudget.model.workflowitem; + +import java.util.List; + +public class CreateWFResponseModel { + private String apiVersion; + private Data data; + + public String getApiVersion() { + return apiVersion; + } + + public void setApiVersion(String apiVersion) { + this.apiVersion = apiVersion; + } + + public Data getData() { + return data; + } + + public void setData(Data data) { + this.data = data; + } + + @Override + public String toString() { + return "CreateWFResponseModel{" + + "apiVersion='" + apiVersion + '\'' + + ", data=" + data + + '}'; + } + + // Constructors, getters, and setters + + public static class Data { + private Project project; + private Subproject subproject; + private Workflowitem workflowitem; + + public Project getProject() { + return project; + } + + public void setProject(Project project) { + this.project = project; + } + + public Subproject getSubproject() { + return subproject; + } + + public void setSubproject(Subproject subproject) { + this.subproject = subproject; + } + + public Workflowitem getWorkflowitem() { + return workflowitem; + } + + public void setWorkflowitem(Workflowitem workflowitem) { + this.workflowitem = workflowitem; + } + + @Override + public String toString() { + return "Data{" + + "project=" + project + + ", subproject=" + subproject + + ", workflowitem=" + workflowitem + + '}'; + } + + // Constructors, getters, and setters + + public static class Project { + private String id; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + // Constructors, getters, and setters + } + + public static class Subproject { + private String id; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + // Constructors, getters, and setters + } + + public static class Workflowitem { + private String id; + private List documents; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public List getDocuments() { + return documents; + } + + public void setDocuments(List documents) { + this.documents = documents; + } + + @Override + public String toString() { + return "Workflowitem{" + + "id='" + id + '\'' + + ", documents=" + documents + + '}'; + } + + // Constructors, getters, and setters + } + } +} diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/model/workflowitem/WFItemGrantRevokePermModel.java b/amp/WEB-INF/src/org/digijava/module/trubudget/model/workflowitem/WFItemGrantRevokePermModel.java index 75099b4743a..d8f0e24af84 100644 --- a/amp/WEB-INF/src/org/digijava/module/trubudget/model/workflowitem/WFItemGrantRevokePermModel.java +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/model/workflowitem/WFItemGrantRevokePermModel.java @@ -27,6 +27,7 @@ public static class Data { private String subprojectId; private String identity; private String intent; + private String workflowitemId; // Getters and setters for projectId, identity, and intent @@ -61,6 +62,14 @@ public String getSubprojectId() { public void setSubprojectId(String subprojectId) { this.subprojectId = subprojectId; } + + public String getWorkflowitemId() { + return workflowitemId; + } + + public void setWorkflowitemId(String workflowitemId) { + this.workflowitemId = workflowitemId; + } } } diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java b/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java index 2403adddbf6..b4ee28b88f2 100644 --- a/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java @@ -11,6 +11,7 @@ import org.digijava.module.trubudget.model.subproject.EditSubProjectModel; import org.digijava.module.trubudget.model.subproject.EditSubProjectedBudgetModel; import org.digijava.module.trubudget.model.subproject.SubProjectGrantRevokePermModel; +import org.digijava.module.trubudget.model.workflowitem.CreateWFResponseModel; import org.digijava.module.trubudget.model.workflowitem.WFItemGrantRevokePermModel; import org.digijava.module.um.util.GenericWebClient; import org.hibernate.Session; @@ -22,8 +23,9 @@ import java.math.BigDecimal; import java.net.URISyntaxException; -import java.text.SimpleDateFormat; import java.time.Instant; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.*; import java.util.stream.Collectors; @@ -66,7 +68,7 @@ public static void createProject(AmpActivityVersion ampActivityVersion) throws U if (Objects.equals(adjustmentType, "Actual") && transactionType==0)//project budget is created using "actual commitment" { projectedBudget.setOrganization(organization); - projectedBudget.setValue(BigDecimal.valueOf(amount).toString()); + projectedBudget.setValue(BigDecimal.valueOf(amount).toPlainString()); projectedBudget.setCurrencyCode(currency); project.getProjectedBudgets().add(projectedBudget); } @@ -167,7 +169,7 @@ public static void updateProject(String projectId, AmpActivityVersion ampActivit projectedBudget.setApiVersion(getSettingValue(settings, "apiVersion")); EditProjectedBudgetModel.Data data1 = new EditProjectedBudgetModel.Data(); data1.setOrganization(organization); - data1.setValue(BigDecimal.valueOf(amount).toString()); + data1.setValue(BigDecimal.valueOf(amount).toPlainString()); data1.setCurrencyCode(currency); data1.setProjectId(projectId); projectedBudget.setData(data1); @@ -204,7 +206,7 @@ public static void createUpdateSubProjects(AmpActivityVersion ampActivityVersion if (componentFunding.getTransactionType() == 0 && Objects.equals(componentFunding.getAdjustmentType().getValue(), "Planned")) { CreateProjectModel.ProjectedBudget projectedBudget = new CreateProjectModel.ProjectedBudget(); projectedBudget.setOrganization(componentFunding.getReportingOrganization()!=null?componentFunding.getReportingOrganization().getName():"Funding Org"); - projectedBudget.setValue(BigDecimal.valueOf(componentFunding.getTransactionAmount()).toString()); + projectedBudget.setValue(BigDecimal.valueOf(componentFunding.getTransactionAmount()).toPlainString()); projectedBudget.setCurrencyCode(componentFunding.getCurrency().getCurrencyCode()); subproject.getProjectedBudgets().add(projectedBudget); } @@ -274,7 +276,8 @@ public static void createUpdateSubProjects(AmpActivityVersion ampActivityVersion EditSubProjectedBudgetModel.Data data1 = new EditSubProjectedBudgetModel.Data(); data1.setProjectId(projectId); data1.setSubprojectId(ampComponent.getSubProjectComponentId()); - data1.setValue(BigDecimal.valueOf(componentFunding.getTransactionAmount()).toString()); + data1.setCurrencyCode(componentFunding.getCurrency().getCurrencyCode()); + data1.setValue(BigDecimal.valueOf(componentFunding.getTransactionAmount()).toPlainString()); data1.setOrganization(componentFunding.getReportingOrganization()!=null?componentFunding.getReportingOrganization().getName():"Funding Org"); editSubProjectedBudgetModel.setData(data1); editSubProjectedBudgetModel.setApiVersion(getSettingValue(settings, "apiVersion")); @@ -293,7 +296,7 @@ public static void createUpdateWorkflowItems(String projectId, String subProject String token = (String) myCache.get("truBudgetToken"); String user = (String) myCache.get("truBudgetUser"); logger.info("Trubudget Cached Token:" + token); - +// TODO: 9/19/23 add status field on AMpCOmponent to allow user select status if (!ampComponent.getFundings().isEmpty()) { for (AmpComponentFunding componentFunding : ampComponent.getFundings()) { if (componentFunding.getTransactionType() == 1 && (Objects.equals(componentFunding.getAdjustmentType().getValue(), "Planned") || Objects.equals(componentFunding.getAdjustmentType().getValue(), "Actual"))) { @@ -305,16 +308,16 @@ public static void createUpdateWorkflowItems(String projectId, String subProject data.setAssignee(user); data.setDescription(ampComponent.getDescription()); data.setDisplayName(ampComponent.getTitle()); - data.setAmount(BigDecimal.valueOf(componentFunding.getTransactionAmount()).toString()); + data.setAmount(BigDecimal.valueOf(componentFunding.getTransactionAmount()).toPlainString()); data.setCurrency(componentFunding.getCurrency().getCurrencyCode()); - data.setAmountType(Objects.equals(componentFunding.getAdjustmentType().getValue(), "Planned") ?"allocated":"paid"); + data.setAmountType(Objects.equals(componentFunding.getAdjustmentType().getValue(), "Planned") ?"allocated":"disbursed"); data.setBillingDate(convertToISO8601(componentFunding.getTransactionDate())); - data.setDueDate(convertToISO8601(componentFunding.getTransactionDate()));//set approprite date + data.setDueDate(convertToISO8601AndAddDays(componentFunding.getTransactionDate(), 10));//set approprite date // data.setDueDate(String.valueOf(componentFunding.getReportingDate())); createWorkFlowItemModel.setData(data); List subIntents = getSubIntentsByMother("workflowitem"); try { - GenericWebClient.postForSingleObjResponse(getSettingValue(settings, "baseUrl") + "api/subproject.createWorkflowitem", createWorkFlowItemModel, CreateWorkFlowItemModel.class, String.class, token) + GenericWebClient.postForSingleObjResponse(getSettingValue(settings, "baseUrl") + "api/subproject.createWorkflowitem", createWorkFlowItemModel, CreateWorkFlowItemModel.class, CreateWFResponseModel.class, token) .subscribe(res-> { logger.info("Create WorkflowItem response: "+res); subIntents.forEach(subIntent -> { @@ -323,6 +326,7 @@ public static void createUpdateWorkflowItems(String projectId, String subProject data2.setProjectId(projectId); data2.setSubprojectId(subProjectId); data2.setIdentity(user); + data2.setWorkflowitemId(res.getData().getWorkflowitem().getId()); data2.setIntent(subIntent.getSubTruBudgetIntentName()); wfItemGrantRevokePermModel.setData(data2); wfItemGrantRevokePermModel.setApiVersion(getSettingValue(settings, "apiVersion")); @@ -353,4 +357,12 @@ public static String convertToISO8601(Date date) { Instant instant = date.toInstant(); return instant.toString(); } + + public static String convertToISO8601AndAddDays(Date date, int daysToAdd) { + LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + LocalDate newLocalDate = localDate.plusDays(daysToAdd); + date = Date.from(newLocalDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); + Instant instant = date.toInstant(); + return instant.toString(); + } } From 2d3af6e002acd74d7d7fba495e7b08c4b08d37ea Mon Sep 17 00:00:00 2001 From: brianbrix Date: Wed, 20 Sep 2023 00:49:40 +0300 Subject: [PATCH 110/307] AMP-30723-Feature -implement amp TruBudget integration AMP-30725 -CREATION OF COMPONENTS AMP-30726-WORKFLOW CREATION --- .../module/aim/dbentity/AmpComponent.hbm.xml | 3 +- .../module/aim/dbentity/AmpComponent.java | 3 ++ .../aim/dbentity/AmpComponentFunding.hbm.xml | 1 + .../aim/dbentity/AmpComponentFunding.java | 10 ++++++ .../aim/startup/AMPStartupListener.java | 1 + .../model/workflowitem/EditWFItemModel.java | 6 ++-- .../module/trubudget/util/ProjectUtil.java | 35 ++++++++++++++----- 7 files changed, 47 insertions(+), 12 deletions(-) diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponent.hbm.xml b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponent.hbm.xml index fe9cd35803c..3190c205af4 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponent.hbm.xml +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponent.hbm.xml @@ -12,6 +12,7 @@ + @@ -22,7 +23,7 @@ - + diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponent.java b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponent.java index 8dd6f6b5dcd..0154ac85b74 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponent.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponent.java @@ -16,6 +16,7 @@ import org.digijava.module.aim.util.Identifiable; import org.digijava.module.aim.util.Output; +import javax.persistence.ElementCollection; import java.io.Serializable; import java.sql.Timestamp; import java.util.*; @@ -67,8 +68,10 @@ public class AmpComponent implements Serializable, Comparable, Ver importable = true) }) private Set fundings = new HashSet<>(); + private String subProjectComponentId; + public String getSubProjectComponentId() { return subProjectComponentId; } diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponentFunding.hbm.xml b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponentFunding.hbm.xml index f4bafcca280..9e367b28c96 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponentFunding.hbm.xml +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponentFunding.hbm.xml @@ -11,6 +11,7 @@ + diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponentFunding.java b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponentFunding.java index d7501920da7..a1417cbfadd 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponentFunding.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponentFunding.java @@ -29,6 +29,10 @@ public class AmpComponentFunding implements Cloneable, Serializable { private Long ampComponentFundingId; private Integer transactionType; + + private String wfItemId; + + @Interchangeable(fieldTitle = COMPONENT_FUNDING_ADJUSTMENT_TYPE, importable = true, pickIdOnly = true, fmPath = FMVisibility.PARENT_FM + "/" + COMPONENT_FUNDING_ADJUSTMENT_TYPE, @@ -68,7 +72,13 @@ public class AmpComponentFunding implements Cloneable, Serializable { @InterchangeableBackReference private AmpComponent component; + public String getWfItemId() { + return wfItemId; + } + public void setWfItemId(String wfItemId) { + this.wfItemId = wfItemId; + } /** * @return Returns the adjustmentType. */ diff --git a/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java b/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java index e78d3ab7a37..f9ba57996be 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java @@ -323,6 +323,7 @@ public static void runQuery() " (nextval('amp_global_settings_seq'),'rootUser','root','','Trubudget username for root user','trubudget',NULL,true),\n" + " (nextval('amp_global_settings_seq'),'rootPassword','root-secret','','Trubudget password for root user','trubudget',NULL,true),\n" + " (nextval('amp_global_settings_seq'),'apiVersion','1.0','','Trubudget api version','trubudget',NULL,true),\n" + + " (nextval('amp_global_settings_seq'),'workFlowItemDueDays','10','t_Integer','Number of days for a workflow item to be due.','trubudget',NULL,true),\n" + " (nextval('amp_global_settings_seq'),'organization','KfW','','Organization name to be used for this deployment','trubudget',NULL,true) ON CONFLICT (settingsname,section) DO NOTHING"; statement.executeUpdate(insertIntoGlobalSettings); } catch (Exception e) { diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/model/workflowitem/EditWFItemModel.java b/amp/WEB-INF/src/org/digijava/module/trubudget/model/workflowitem/EditWFItemModel.java index a2ffb320da0..58e46ab1b52 100644 --- a/amp/WEB-INF/src/org/digijava/module/trubudget/model/workflowitem/EditWFItemModel.java +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/model/workflowitem/EditWFItemModel.java @@ -3,6 +3,8 @@ import org.digijava.module.trubudget.model.subproject.CreateWorkFlowItemModel; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -33,8 +35,8 @@ public static class Data { private String workflowitemId; private String displayName; private String description; - private Map additionalData; - private List documents; + private Map additionalData= new HashMap<>(); + private List documents=new ArrayList<>(); // Getters and setters for projectId, displayName, and description diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java b/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java index b4ee28b88f2..d6827c16fc9 100644 --- a/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java @@ -12,6 +12,7 @@ import org.digijava.module.trubudget.model.subproject.EditSubProjectedBudgetModel; import org.digijava.module.trubudget.model.subproject.SubProjectGrantRevokePermModel; import org.digijava.module.trubudget.model.workflowitem.CreateWFResponseModel; +import org.digijava.module.trubudget.model.workflowitem.EditWFItemModel; import org.digijava.module.trubudget.model.workflowitem.WFItemGrantRevokePermModel; import org.digijava.module.um.util.GenericWebClient; import org.hibernate.Session; @@ -300,26 +301,27 @@ public static void createUpdateWorkflowItems(String projectId, String subProject if (!ampComponent.getFundings().isEmpty()) { for (AmpComponentFunding componentFunding : ampComponent.getFundings()) { if (componentFunding.getTransactionType() == 1 && (Objects.equals(componentFunding.getAdjustmentType().getValue(), "Planned") || Objects.equals(componentFunding.getAdjustmentType().getValue(), "Actual"))) { + if (componentFunding.getWfItemId()==null){//create new wfItem CreateWorkFlowItemModel createWorkFlowItemModel = new CreateWorkFlowItemModel(); createWorkFlowItemModel.setApiVersion(getSettingValue(settings, "apiVersion")); CreateWorkFlowItemModel.Data data = new CreateWorkFlowItemModel.Data(); data.setProjectId(projectId); data.setSubprojectId(subProjectId); data.setAssignee(user); - data.setDescription(ampComponent.getDescription()); - data.setDisplayName(ampComponent.getTitle()); + data.setDescription(componentFunding.getDescription()); + data.setDisplayName(componentFunding.getComponent().getTitle()); data.setAmount(BigDecimal.valueOf(componentFunding.getTransactionAmount()).toPlainString()); data.setCurrency(componentFunding.getCurrency().getCurrencyCode()); - data.setAmountType(Objects.equals(componentFunding.getAdjustmentType().getValue(), "Planned") ?"allocated":"disbursed"); + data.setAmountType(Objects.equals(componentFunding.getAdjustmentType().getValue(), "Planned") ? "allocated" : "disbursed"); data.setBillingDate(convertToISO8601(componentFunding.getTransactionDate())); - data.setDueDate(convertToISO8601AndAddDays(componentFunding.getTransactionDate(), 10));//set approprite date -// data.setDueDate(String.valueOf(componentFunding.getReportingDate())); + data.setDueDate(convertToISO8601AndAddDays(componentFunding.getTransactionDate(), Integer.parseInt(getSettingValue(settings, "workFlowItemDueDays"))));//set approprite date createWorkFlowItemModel.setData(data); List subIntents = getSubIntentsByMother("workflowitem"); try { GenericWebClient.postForSingleObjResponse(getSettingValue(settings, "baseUrl") + "api/subproject.createWorkflowitem", createWorkFlowItemModel, CreateWorkFlowItemModel.class, CreateWFResponseModel.class, token) - .subscribe(res-> { - logger.info("Create WorkflowItem response: "+res); + .subscribe(res -> { + logger.info("Create WorkflowItem response: " + res); + componentFunding.setWfItemId(res.getData().getWorkflowitem().getId()); subIntents.forEach(subIntent -> { WFItemGrantRevokePermModel wfItemGrantRevokePermModel = new WFItemGrantRevokePermModel(); WFItemGrantRevokePermModel.Data data2 = new WFItemGrantRevokePermModel.Data(); @@ -342,12 +344,27 @@ public static void createUpdateWorkflowItems(String projectId, String subProject }); - }catch (Exception e) - { + } catch (Exception e) { logger.info("Error during subproject creation"); e.printStackTrace(); } } + else {//update wfItem + EditWFItemModel editWFItemModel = new EditWFItemModel(); + EditWFItemModel.Data data = new EditWFItemModel.Data(); + data.setProjectId(projectId); + data.setSubprojectId(subProjectId); + data.setWorkflowitemId(componentFunding.getWfItemId()); + data.setDisplayName(componentFunding.getComponent().getTitle()); + data.setDescription(componentFunding.getDescription()); + GenericWebClient.postForSingleObjResponse(getSettingValue(settings, "baseUrl") + "api/workflowitem.update", editWFItemModel, EditWFItemModel.class, String.class, token) + .subscribe(res -> { + logger.info("Edit WFItem response: "+res); + }); + } + } + + } } From 6fbfc0c0db1cb4fadb2d1c76fb5aff08ec3b367a Mon Sep 17 00:00:00 2001 From: brianbrix Date: Wed, 20 Sep 2023 02:34:47 +0300 Subject: [PATCH 111/307] AMP-30723-Feature -implement amp TruBudget integration AMP-30725 -CREATION OF COMPONENTS AMP-30726-WORKFLOW CREATION --- .../persistence/HibernateClassLoader.java | 4 +- .../module/aim/action/EditActivity.java | 60 +++++++++---------- .../aim/dbentity/AmpComponentFunding.hbm.xml | 1 - .../aim/dbentity/AmpComponentFunding.java | 9 +-- .../dbentity/AmpComponentFundingTruWF.hbm.xml | 16 +++++ .../dbentity/AmpComponentFundingTruWF.java | 48 +++++++++++++++ .../model/workflowitem/EditWFItemModel.java | 54 +++++++++++++++++ .../module/trubudget/util/ProjectUtil.java | 25 +++++--- amp/repository/digi-common.xml | 2 +- 9 files changed, 168 insertions(+), 51 deletions(-) create mode 100644 amp/WEB-INF/src/org/digijava/module/trubudget/dbentity/AmpComponentFundingTruWF.hbm.xml create mode 100644 amp/WEB-INF/src/org/digijava/module/trubudget/dbentity/AmpComponentFundingTruWF.java diff --git a/amp/WEB-INF/src/org/digijava/kernel/persistence/HibernateClassLoader.java b/amp/WEB-INF/src/org/digijava/kernel/persistence/HibernateClassLoader.java index 4d62cbe2c5d..96dc34dc6cc 100644 --- a/amp/WEB-INF/src/org/digijava/kernel/persistence/HibernateClassLoader.java +++ b/amp/WEB-INF/src/org/digijava/kernel/persistence/HibernateClassLoader.java @@ -179,10 +179,10 @@ public static void loadHibernateClasses(HibernateClasses classes) { cfg.addClass(Class.forName(hibernateClass.getContent())); } catch (Exception ex) { if (required) { - logger.error("Error loading Hibernate class " + hibernateClass.getContent()); + logger.error("Error loading Hibernate class " + hibernateClass.getContent(),ex); break; } else { - logger.error("Error loading Hibernate class " + hibernateClass.getContent()); + logger.error("Error loading Hibernate class " + hibernateClass.getContent(),ex); } } diff --git a/amp/WEB-INF/src/org/digijava/module/aim/action/EditActivity.java b/amp/WEB-INF/src/org/digijava/module/aim/action/EditActivity.java index 3c0397d78ce..826ee623d39 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/action/EditActivity.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/action/EditActivity.java @@ -1804,11 +1804,11 @@ private EditActivityForm setSectorsToForm(EditActivityForm form, AmpActivityVers private void getComponents(AmpActivityVersion activity, EditActivityForm eaForm, String toCurrCode) { // Collection activityComponents = activity.getComponents(); - List> selectedComponents = new ArrayList>(); + List> selectedComponents = new ArrayList<>(); // Iterator compItr = componets.iterator(); for(AmpComponent temp : activity.getComponents()) { // AmpComponent temp = (AmpComponent) compItr.next(); - Components tempComp = new Components(); + Components tempComp = new Components<>(); tempComp.setTitle(temp.getTitle()); tempComp.setComponentId(temp.getAmpComponentId()); tempComp.setType_Id((temp.getType() != null) ? temp.getType().getType_id() : null); @@ -1820,28 +1820,26 @@ private void getComponents(AmpActivityVersion activity, EditActivityForm eaForm, } tempComp.setCode(temp.getCode()); tempComp.setUrl(temp.getUrl()); - tempComp.setCommitments(new ArrayList()); - tempComp.setDisbursements(new ArrayList()); - tempComp.setExpenditures(new ArrayList()); + tempComp.setCommitments(new ArrayList<>()); + tempComp.setDisbursements(new ArrayList<>()); + tempComp.setExpenditures(new ArrayList<>()); Collection fundingComponentActivity = temp.getFundings(); - Iterator cItr = fundingComponentActivity.iterator(); - - while (cItr.hasNext()) { - AmpComponentFunding ampCompFund = (AmpComponentFunding) cItr.next(); + for (AmpComponentFunding ampCompFund : fundingComponentActivity) { double disb = 0; if (ampCompFund.getAdjustmentType().getValue().equals(CategoryConstants.ADJUSTMENT_TYPE_ACTUAL.getValueKey()) - && ampCompFund.getTransactionType().intValue() == 1) - disb = ampCompFund.getTransactionAmount().doubleValue(); + && ampCompFund.getTransactionType() == 1) { + disb = ampCompFund.getTransactionAmount(); + } eaForm.getComponents().setCompTotalDisb(eaForm.getComponents().getCompTotalDisb() + disb); FundingDetail fd = new FundingDetail(); - fd.setAdjustmentTypeName(ampCompFund.getAdjustmentType() ); + fd.setAdjustmentTypeName(ampCompFund.getAdjustmentType()); - // fd.setAdjustmentType(ampCompFund.getAdjustmentType().intValue()); + // fd.setAdjustmentType(ampCompFund.getAdjustmentType().intValue()); fd.setAmpComponentFundingId(ampCompFund.getAmpComponentFundingId()); @@ -1855,7 +1853,7 @@ private void getComponents(AmpActivityVersion activity, EditActivityForm eaForm, fd.setCurrencyCode(toCurrCode); - fd.setTransactionAmount(FormatHelper.formatNumber( amt.getValue())); + fd.setTransactionAmount(FormatHelper.formatNumber(amt.getValue())); fd.setCurrencyName(ampCompFund.getCurrency().getCurrencyName()); @@ -1865,7 +1863,7 @@ private void getComponents(AmpActivityVersion activity, EditActivityForm eaForm, fd.setComponentOrganisation(ampCompFund.getReportingOrganization()); fd.setComponentSecondResponsibleOrganization(ampCompFund.getComponentSecondResponsibleOrganization()); fd.setComponentTransactionDescription(ampCompFund.getDescription()); - + if (fd.getTransactionType() == 0) { tempComp.getCommitments().add(fd); @@ -1881,33 +1879,31 @@ private void getComponents(AmpActivityVersion activity, EditActivityForm eaForm, } // Sort the funding details based on Transaction date. - Iterator compIterator = selectedComponents.iterator(); int index = 0; - while (compIterator.hasNext()) { - Components components = (Components) compIterator.next(); - if (components.getType_Id() != null) { - AmpComponentType type = ComponentsUtil.getComponentTypeById(components.getType_Id()); - components.setTypeName(type.getName()); + for (Components selectedComponent : selectedComponents) { + if (selectedComponent.getType_Id() != null) { + AmpComponentType type = ComponentsUtil.getComponentTypeById(selectedComponent.getType_Id()); + selectedComponent.setTypeName(type.getName()); } List list = null; - if (components.getCommitments() != null) { - list = new ArrayList(components.getCommitments()); + if (selectedComponent.getCommitments() != null) { + list = new ArrayList(((Components) selectedComponent).getCommitments()); list.sort(FundingValidator.dateComp); } - components.setCommitments(list); + selectedComponent.setCommitments(list); list = null; - if (components.getDisbursements() != null) { - list = new ArrayList(components.getDisbursements()); - Collections.sort(list, FundingValidator.dateComp); + if (((Components) selectedComponent).getDisbursements() != null) { + list = new ArrayList<>(selectedComponent.getDisbursements()); + list.sort(FundingValidator.dateComp); } - components.setDisbursements(list); + selectedComponent.setDisbursements(list); list = null; - if (components.getExpenditures() != null) { - list = new ArrayList(components.getExpenditures()); + if (selectedComponent.getExpenditures() != null) { + list = new ArrayList<>(((Components) selectedComponent).getExpenditures()); list.sort(FundingValidator.dateComp); } - components.setExpenditures(list); - selectedComponents.set(index++, components); + selectedComponent.setExpenditures(list); + selectedComponents.set(index++, selectedComponent); } eaForm.getComponents().setSelectedComponents(selectedComponents); diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponentFunding.hbm.xml b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponentFunding.hbm.xml index 9e367b28c96..f4bafcca280 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponentFunding.hbm.xml +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponentFunding.hbm.xml @@ -11,7 +11,6 @@ - diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponentFunding.java b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponentFunding.java index a1417cbfadd..c55f5b11430 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponentFunding.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponentFunding.java @@ -29,8 +29,7 @@ public class AmpComponentFunding implements Cloneable, Serializable { private Long ampComponentFundingId; private Integer transactionType; - - private String wfItemId; + @@ -72,13 +71,7 @@ public class AmpComponentFunding implements Cloneable, Serializable { @InterchangeableBackReference private AmpComponent component; - public String getWfItemId() { - return wfItemId; - } - public void setWfItemId(String wfItemId) { - this.wfItemId = wfItemId; - } /** * @return Returns the adjustmentType. */ diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/dbentity/AmpComponentFundingTruWF.hbm.xml b/amp/WEB-INF/src/org/digijava/module/trubudget/dbentity/AmpComponentFundingTruWF.hbm.xml new file mode 100644 index 00000000000..7080fa336e1 --- /dev/null +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/dbentity/AmpComponentFundingTruWF.hbm.xml @@ -0,0 +1,16 @@ + + + + + + + amp_component_funding_tru_wf_seq + + + + + + + \ No newline at end of file diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/dbentity/AmpComponentFundingTruWF.java b/amp/WEB-INF/src/org/digijava/module/trubudget/dbentity/AmpComponentFundingTruWF.java new file mode 100644 index 00000000000..b72d009d11e --- /dev/null +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/dbentity/AmpComponentFundingTruWF.java @@ -0,0 +1,48 @@ +package org.digijava.module.trubudget.dbentity; + +import org.hibernate.annotations.DynamicUpdate; + +import javax.persistence.*; +@Table(name = "amp_component_funding_tru_wf") +@Cacheable +@DynamicUpdate +@Entity +public class AmpComponentFundingTruWF { + @Id + @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "amp_component_funding_tru_wf_seq") + @SequenceGenerator(name = "amp_component_funding_tru_wf_seq", sequenceName = "amp_component_funding_tru_wf_seq", allocationSize = 1) + @Column(name = "id") + private Long id; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + @Column(name = "tru_wf_id") + private String truWFId; + + public String getTruWFId() { + return truWFId; + } + + public void setTruWFId(String truWFId) { + this.truWFId = truWFId; + } + + @Column(name = "amp_component_funding_id") + private Long ampComponentFundingId; + + public Long getAmpComponentFundingId() { + return ampComponentFundingId; + } + + public void setAmpComponentFundingId(Long ampComponentFundingId) { + this.ampComponentFundingId = ampComponentFundingId; + } + + +} diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/model/workflowitem/EditWFItemModel.java b/amp/WEB-INF/src/org/digijava/module/trubudget/model/workflowitem/EditWFItemModel.java index 58e46ab1b52..e8efd0e84de 100644 --- a/amp/WEB-INF/src/org/digijava/module/trubudget/model/workflowitem/EditWFItemModel.java +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/model/workflowitem/EditWFItemModel.java @@ -34,6 +34,12 @@ public static class Data { private String subprojectId; private String workflowitemId; private String displayName; + private String amountType; + private String amount; + private String currency; + private String exchangeRate="1.0"; + private String billingDate; + private String dueDate; private String description; private Map additionalData= new HashMap<>(); private List documents=new ArrayList<>(); @@ -95,6 +101,54 @@ public List getDocuments() { public void setDocuments(List documents) { this.documents = documents; } + + public String getAmountType() { + return amountType; + } + + public void setAmountType(String amountType) { + this.amountType = amountType; + } + + public String getAmount() { + return amount; + } + + public void setAmount(String amount) { + this.amount = amount; + } + + public String getCurrency() { + return currency; + } + + public void setCurrency(String currency) { + this.currency = currency; + } + + public String getExchangeRate() { + return exchangeRate; + } + + public void setExchangeRate(String exchangeRate) { + this.exchangeRate = exchangeRate; + } + + public String getBillingDate() { + return billingDate; + } + + public void setBillingDate(String billingDate) { + this.billingDate = billingDate; + } + + public String getDueDate() { + return dueDate; + } + + public void setDueDate(String dueDate) { + this.dueDate = dueDate; + } } diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java b/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java index d6827c16fc9..1985d865bb3 100644 --- a/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java @@ -5,6 +5,7 @@ import org.digijava.kernel.entity.trubudget.SubIntents; import org.digijava.kernel.persistence.PersistenceManager; import org.digijava.module.aim.dbentity.*; +import org.digijava.module.trubudget.dbentity.AmpComponentFundingTruWF; import org.digijava.module.trubudget.dbentity.TruBudgetActivity; import org.digijava.module.trubudget.model.project.*; import org.digijava.module.trubudget.model.subproject.CreateWorkFlowItemModel; @@ -301,7 +302,8 @@ public static void createUpdateWorkflowItems(String projectId, String subProject if (!ampComponent.getFundings().isEmpty()) { for (AmpComponentFunding componentFunding : ampComponent.getFundings()) { if (componentFunding.getTransactionType() == 1 && (Objects.equals(componentFunding.getAdjustmentType().getValue(), "Planned") || Objects.equals(componentFunding.getAdjustmentType().getValue(), "Actual"))) { - if (componentFunding.getWfItemId()==null){//create new wfItem + AmpComponentFundingTruWF ampComponentFundingTruWF = PersistenceManager.getRequestDBSession().createQuery("FROM "+AmpComponentFundingTruWF.class.getName()+" act WHERE act.ampComponentFundingId="+componentFunding.getAmpComponentFundingId(), AmpComponentFundingTruWF.class).stream().findAny().orElse(null); + if (ampComponentFundingTruWF==null){//create new wfItem CreateWorkFlowItemModel createWorkFlowItemModel = new CreateWorkFlowItemModel(); createWorkFlowItemModel.setApiVersion(getSettingValue(settings, "apiVersion")); CreateWorkFlowItemModel.Data data = new CreateWorkFlowItemModel.Data(); @@ -316,12 +318,16 @@ public static void createUpdateWorkflowItems(String projectId, String subProject data.setBillingDate(convertToISO8601(componentFunding.getTransactionDate())); data.setDueDate(convertToISO8601AndAddDays(componentFunding.getTransactionDate(), Integer.parseInt(getSettingValue(settings, "workFlowItemDueDays"))));//set approprite date createWorkFlowItemModel.setData(data); + Session session =PersistenceManager.getRequestDBSession(); List subIntents = getSubIntentsByMother("workflowitem"); try { GenericWebClient.postForSingleObjResponse(getSettingValue(settings, "baseUrl") + "api/subproject.createWorkflowitem", createWorkFlowItemModel, CreateWorkFlowItemModel.class, CreateWFResponseModel.class, token) .subscribe(res -> { logger.info("Create WorkflowItem response: " + res); - componentFunding.setWfItemId(res.getData().getWorkflowitem().getId()); + AmpComponentFundingTruWF ampComponentFundingTruWF1 = new AmpComponentFundingTruWF(); + ampComponentFundingTruWF1.setAmpComponentFundingId(componentFunding.getAmpComponentFundingId()); + ampComponentFundingTruWF1.setTruWFId(res.getData().getWorkflowitem().getId()); + session.save(ampComponentFundingTruWF1); subIntents.forEach(subIntent -> { WFItemGrantRevokePermModel wfItemGrantRevokePermModel = new WFItemGrantRevokePermModel(); WFItemGrantRevokePermModel.Data data2 = new WFItemGrantRevokePermModel.Data(); @@ -351,16 +357,21 @@ public static void createUpdateWorkflowItems(String projectId, String subProject } else {//update wfItem EditWFItemModel editWFItemModel = new EditWFItemModel(); + editWFItemModel.setApiVersion(getSettingValue(settings, "apiVersion")); EditWFItemModel.Data data = new EditWFItemModel.Data(); data.setProjectId(projectId); data.setSubprojectId(subProjectId); - data.setWorkflowitemId(componentFunding.getWfItemId()); - data.setDisplayName(componentFunding.getComponent().getTitle()); data.setDescription(componentFunding.getDescription()); + data.setWorkflowitemId(ampComponentFundingTruWF.getTruWFId()); + data.setDisplayName(componentFunding.getComponent().getTitle()); + data.setAmount(BigDecimal.valueOf(componentFunding.getTransactionAmount()).toPlainString()); + data.setCurrency(componentFunding.getCurrency().getCurrencyCode()); + data.setAmountType(Objects.equals(componentFunding.getAdjustmentType().getValue(), "Planned") ? "allocated" : "disbursed"); + data.setBillingDate(convertToISO8601(componentFunding.getTransactionDate())); + data.setDueDate(convertToISO8601AndAddDays(componentFunding.getTransactionDate(), Integer.parseInt(getSettingValue(settings, "workFlowItemDueDays"))));//set approprite date + editWFItemModel.setData(data); GenericWebClient.postForSingleObjResponse(getSettingValue(settings, "baseUrl") + "api/workflowitem.update", editWFItemModel, EditWFItemModel.class, String.class, token) - .subscribe(res -> { - logger.info("Edit WFItem response: "+res); - }); + .subscribe(res -> logger.info("Edit WFItem response: "+res)); } } diff --git a/amp/repository/digi-common.xml b/amp/repository/digi-common.xml index 993880374d6..494b47c0c4a 100644 --- a/amp/repository/digi-common.xml +++ b/amp/repository/digi-common.xml @@ -24,7 +24,7 @@ org.digijava.kernel.entity.trubudget.TruBudgetIntent org.digijava.kernel.entity.trubudget.SubIntents org.digijava.module.trubudget.dbentity.TruBudgetActivity - org.digijava.module.trubudget.dbentity.SubProjectComponent + org.digijava.module.trubudget.dbentity.AmpComponentFundingTruWF org.digijava.kernel.entity.Address org.digijava.kernel.entity.GeoRegion org.digijava.kernel.user.User From 7e97a73bf81d9891dd70ea37ab5851c315921256 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Wed, 20 Sep 2023 11:21:42 +0300 Subject: [PATCH 112/307] AMP-30723-Feature -implement amp TruBudget integration AMP-30725 -CREATION OF COMPONENTS AMP-30726-WORKFLOW CREATION --- .../sections/AmpFormSectionFeaturePanel.java | 4 ++-- .../AmpIdentificationFormSectionFeature.java | 2 +- .../interchange/ActivityFieldsConstants.java | 1 + .../aim/dbentity/AmpComponentFunding.hbm.xml | 3 +++ .../module/aim/dbentity/AmpComponentFunding.java | 15 +++++++++++++++ .../module/aim/startup/AMPStartupListener.java | 12 ++++++++++++ .../dbentity/AmpCategoryValue.hbm.xml | 1 + .../categorymanager/util/CategoryConstants.java | 2 ++ 8 files changed, 37 insertions(+), 3 deletions(-) diff --git a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/sections/AmpFormSectionFeaturePanel.java b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/sections/AmpFormSectionFeaturePanel.java index 1d10bae8c73..8776f78c6fe 100644 --- a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/sections/AmpFormSectionFeaturePanel.java +++ b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/sections/AmpFormSectionFeaturePanel.java @@ -44,9 +44,9 @@ public AmpFormSectionFeaturePanel(String id, String fmName,final IModel("display: none;"), "")); else - mrk.add(new AttributeAppender("style", new Model("display: block;"), "")); + mrk.add(new AttributeAppender("style", new Model<>("display: block;"), "")); } } diff --git a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/sections/AmpIdentificationFormSectionFeature.java b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/sections/AmpIdentificationFormSectionFeature.java index d7f4d525148..82dea0e8ced 100644 --- a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/sections/AmpIdentificationFormSectionFeature.java +++ b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/sections/AmpIdentificationFormSectionFeature.java @@ -164,7 +164,7 @@ public String getObject() { AmpCategorySelectFieldPanel status = new AmpCategorySelectFieldPanel( "status", CategoryConstants.ACTIVITY_STATUS_KEY, new AmpCategoryValueByKeyModel( - new PropertyModel>(am,"categories"), + new PropertyModel<>(am, "categories"), CategoryConstants.ACTIVITY_STATUS_KEY), CategoryConstants.ACTIVITY_STATUS_NAME, true, false, null, AmpFMTypes.MODULE); diff --git a/amp/WEB-INF/src/org/digijava/module/aim/annotations/interchange/ActivityFieldsConstants.java b/amp/WEB-INF/src/org/digijava/module/aim/annotations/interchange/ActivityFieldsConstants.java index 598eab69e1b..36b5f2c636c 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/annotations/interchange/ActivityFieldsConstants.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/annotations/interchange/ActivityFieldsConstants.java @@ -60,6 +60,7 @@ public class ActivityFieldsConstants { public static final String COMPONENT_FUNDING_AMOUNT = "Amount"; public static final String COMPONENT_FUNDING_TRANSACTION_DATE = "Transaction Date"; public static final String COMPONENT_FUNDING_ADJUSTMENT_TYPE = CategoryConstants.ADJUSTMENT_TYPE_NAME; + public static final String COMPONENT_FUNDING_STATUS = CategoryConstants.COMPONENT_FUNDING_STATUS; public static final String COMPONENT_FUNDING_TRANSACTION_TYPE = "Transaction Type"; public static final String DONOR_ORGANIZATION = "Donor Organization"; public static final String RESPONSIBLE_ORGANIZATION = "Responsible Organization"; diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponentFunding.hbm.xml b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponentFunding.hbm.xml index f4bafcca280..e2c3eafd074 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponentFunding.hbm.xml +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponentFunding.hbm.xml @@ -28,5 +28,8 @@ class="org.digijava.module.aim.dbentity.AmpComponent" /> + + \ No newline at end of file diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponentFunding.java b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponentFunding.java index c55f5b11430..7cce952c027 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponentFunding.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponentFunding.java @@ -39,6 +39,21 @@ public class AmpComponentFunding implements Cloneable, Serializable { discriminatorOption = CategoryConstants.ADJUSTMENT_TYPE_KEY) private AmpCategoryValue adjustmentType; + + @Interchangeable(fieldTitle = COMPONENT_FUNDING_STATUS, importable = true, pickIdOnly = true, + fmPath = FMVisibility.PARENT_FM + "/" + COMPONENT_FUNDING_STATUS, + interValidators = @InterchangeableValidator(RequiredValidator.class), + discriminatorOption = CategoryConstants.COMPONENT_FUNDING_STATUS_KEY) + private AmpCategoryValue componentFundingStatus; + + public AmpCategoryValue getComponentFundingStatus() { + return componentFundingStatus; + } + + public void setComponentFundingStatus(AmpCategoryValue componentFundingStatus) { + this.componentFundingStatus = componentFundingStatus; + } + @Interchangeable(fieldTitle = COMPONENT_FUNDING_TRANSACTION_DATE, importable = true, fmPath = FMVisibility.PARENT_FM + "/" + COMPONENT_FUNDING_TRANSACTION_DATE, interValidators = @InterchangeableValidator(RequiredValidator.class)) diff --git a/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java b/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java index f9ba57996be..26dae9a427f 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java @@ -326,6 +326,18 @@ public static void runQuery() " (nextval('amp_global_settings_seq'),'workFlowItemDueDays','10','t_Integer','Number of days for a workflow item to be due.','trubudget',NULL,true),\n" + " (nextval('amp_global_settings_seq'),'organization','KfW','','Organization name to be used for this deployment','trubudget',NULL,true) ON CONFLICT (settingsname,section) DO NOTHING"; statement.executeUpdate(insertIntoGlobalSettings); + String insertStatusClass ="INSERT INTO amp_category_class(id, category_name, keyname, description, is_multiselect, is_ordered)" + + " VALUES (nextval('amp_category_class_seq'), 'Component Funding Status' , 'component_funding_status', '', 'f', 'f')"; + statement.executeUpdate(insertStatusClass); + String alterTable="ALTER TABLE AMP_CATEGORY_VALUE\n" + + "ADD CONSTRAINT unique_value_index_constraint UNIQUE (category_value, index_column)"; + statement.executeUpdate(alterTable); + String insertStatusValues ="INSERT INTO amp_category_value(id, category_value, amp_category_class_id, index_column)" + + " VALUES " + + "(nextval('amp_category_value_seq'), 'Open',(select id from amp_category_class where keyname='component_funding_status'), 0)," + + "(nextval('amp_category_value_seq'), 'Closed',(select id from amp_category_class where keyname='component_funding_status'), 1),"+ + "(nextval('amp_category_value_seq'), 'Rejected',(select id from amp_category_class where keyname='component_funding_status'), 2) ON CONFLICT (index_column,category_value) DO NOTHING"; + statement.executeUpdate(insertStatusValues); } catch (Exception e) { // Handle the exception logger.info("Error occurred during trubudget init db operations", e); diff --git a/amp/WEB-INF/src/org/digijava/module/categorymanager/dbentity/AmpCategoryValue.hbm.xml b/amp/WEB-INF/src/org/digijava/module/categorymanager/dbentity/AmpCategoryValue.hbm.xml index 5effca565cd..34f04116e71 100644 --- a/amp/WEB-INF/src/org/digijava/module/categorymanager/dbentity/AmpCategoryValue.hbm.xml +++ b/amp/WEB-INF/src/org/digijava/module/categorymanager/dbentity/AmpCategoryValue.hbm.xml @@ -32,5 +32,6 @@ + \ No newline at end of file diff --git a/amp/WEB-INF/src/org/digijava/module/categorymanager/util/CategoryConstants.java b/amp/WEB-INF/src/org/digijava/module/categorymanager/util/CategoryConstants.java index b3aab82c16b..13f39f7837b 100644 --- a/amp/WEB-INF/src/org/digijava/module/categorymanager/util/CategoryConstants.java +++ b/amp/WEB-INF/src/org/digijava/module/categorymanager/util/CategoryConstants.java @@ -97,7 +97,9 @@ public class CategoryConstants { public static final String PROPOSE_PRJC_DATE_KEY = "funDate"; public static final String ADJUSTMENT_TYPE_NAME = "Adjustment Type"; + public static final String COMPONENT_FUNDING_STATUS = "Component Funding Status"; public static final String ADJUSTMENT_TYPE_KEY = "adjustment_type"; + public static final String COMPONENT_FUNDING_STATUS_KEY = "component_funding_status"; public static final String TRANSACTION_TYPE_NAME = "Transaction Type"; public static final String TRANSACTION_TYPE_KEY = "transaction_type"; From 65a851bf853510cccf4fd0ad11b27f55f31fb1a4 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Wed, 20 Sep 2023 12:41:47 +0300 Subject: [PATCH 113/307] AMP-30723-Feature -implement amp TruBudget integration AMP-30725 -CREATION OF COMPONENTS AMP-30726-WORKFLOW CREATION --- ...AmpComponentsFundingSubsectionFeature.java | 1 + .../module/aim/action/EditActivity.java | 3 +- .../module/aim/helper/FundingDetail.java | 11 ++++ .../aim/startup/AMPStartupListener.java | 52 ++++++++++++++++--- .../module/aim/util/ActivityUtil.java | 39 +++++++------- .../module/aim/util/CurrencyUtil.java | 2 +- .../org/digijava/module/aim/util/DbUtil.java | 4 +- .../util/CategoryConstants.java | 16 ++++-- 8 files changed, 92 insertions(+), 36 deletions(-) diff --git a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/subsections/AmpComponentsFundingSubsectionFeature.java b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/subsections/AmpComponentsFundingSubsectionFeature.java index d5c842fe469..29a47805a50 100644 --- a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/subsections/AmpComponentsFundingSubsectionFeature.java +++ b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/subsections/AmpComponentsFundingSubsectionFeature.java @@ -62,6 +62,7 @@ public AmpComponentsFundingSubsectionFeature(String id, public void onClick(AjaxRequestTarget target) { AmpComponentFunding cf = new AmpComponentFunding(); cf.setAdjustmentType(CategoryConstants.ADJUSTMENT_TYPE_ACTUAL.getAmpCategoryValueFromDB()); + cf.setComponentFundingStatus(CategoryConstants.COMPONENT_FUNDING_STATUS_OPEN.getAmpCategoryValueFromDB()); cf.setComponent(componentModel.getObject()); cf.setTransactionAmount(0d); cf.setCurrency(CurrencyUtil.getWicketWorkspaceCurrency()); diff --git a/amp/WEB-INF/src/org/digijava/module/aim/action/EditActivity.java b/amp/WEB-INF/src/org/digijava/module/aim/action/EditActivity.java index 826ee623d39..a1840701c17 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/action/EditActivity.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/action/EditActivity.java @@ -1857,9 +1857,10 @@ private void getComponents(AmpActivityVersion activity, EditActivityForm eaForm, fd.setCurrencyName(ampCompFund.getCurrency().getCurrencyName()); + fd.setComponentFundingStatus(ampCompFund.getComponentFundingStatus()); fd.setTransactionDate(DateConversion.convertDateToLocalizedString(ampCompFund.getTransactionDate())); fd.setFiscalYear(DateConversion.convertDateToFiscalYearString(ampCompFund.getTransactionDate())); - fd.setTransactionType(ampCompFund.getTransactionType().intValue()); + fd.setTransactionType(ampCompFund.getTransactionType()); fd.setComponentOrganisation(ampCompFund.getReportingOrganization()); fd.setComponentSecondResponsibleOrganization(ampCompFund.getComponentSecondResponsibleOrganization()); fd.setComponentTransactionDescription(ampCompFund.getDescription()); diff --git a/amp/WEB-INF/src/org/digijava/module/aim/helper/FundingDetail.java b/amp/WEB-INF/src/org/digijava/module/aim/helper/FundingDetail.java index 7bdc7bc1768..78f24dd2229 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/helper/FundingDetail.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/helper/FundingDetail.java @@ -25,6 +25,17 @@ public class FundingDetail implements Serializable, Comparable private Date reportingDate; private AmpCategoryValue adjustmentTypeName; + + public AmpCategoryValue getComponentFundingStatus() { + return componentFundingStatus; + } + + public void setComponentFundingStatus(AmpCategoryValue componentFundingStatus) { + this.componentFundingStatus = componentFundingStatus; + } + + private AmpCategoryValue componentFundingStatus; + private AmpCategoryValue projectionTypeName; private AmpCategoryValue expenditureClass; private String transactionDate; diff --git a/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java b/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java index 26dae9a427f..922d7dc694b 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java @@ -329,14 +329,50 @@ public static void runQuery() String insertStatusClass ="INSERT INTO amp_category_class(id, category_name, keyname, description, is_multiselect, is_ordered)" + " VALUES (nextval('amp_category_class_seq'), 'Component Funding Status' , 'component_funding_status', '', 'f', 'f')"; statement.executeUpdate(insertStatusClass); - String alterTable="ALTER TABLE AMP_CATEGORY_VALUE\n" + - "ADD CONSTRAINT unique_value_index_constraint UNIQUE (category_value, index_column)"; - statement.executeUpdate(alterTable); - String insertStatusValues ="INSERT INTO amp_category_value(id, category_value, amp_category_class_id, index_column)" + - " VALUES " + - "(nextval('amp_category_value_seq'), 'Open',(select id from amp_category_class where keyname='component_funding_status'), 0)," + - "(nextval('amp_category_value_seq'), 'Closed',(select id from amp_category_class where keyname='component_funding_status'), 1),"+ - "(nextval('amp_category_value_seq'), 'Rejected',(select id from amp_category_class where keyname='component_funding_status'), 2) ON CONFLICT (index_column,category_value) DO NOTHING"; +// String alterTable="ALTER TABLE AMP_CATEGORY_VALUE\n" + +// "ADD CONSTRAINT unique_value_index_constraint UNIQUE (category_value, index_column)"; +// statement.executeUpdate(alterTable); + String insertStatusValues ="INSERT INTO amp_category_value (id, category_value, amp_category_class_id, index_column)\n" + + "SELECT\n" + + " nextval('amp_category_value_seq'),\n" + + " 'Open',\n" + + " (SELECT id FROM amp_category_class WHERE keyname = 'component_funding_status'),\n" + + " 0\n" + + "WHERE NOT EXISTS (\n" + + " SELECT 1\n" + + " FROM amp_category_value\n" + + " WHERE\n" + + " amp_category_class_id = (SELECT id FROM amp_category_class WHERE keyname = 'component_funding_status')\n" + + " AND category_value = 'Open'\n" + + ");\n" + + "\n" + + "INSERT INTO amp_category_value (id, category_value, amp_category_class_id, index_column)\n" + + "SELECT\n" + + " nextval('amp_category_value_seq'),\n" + + " 'Closed',\n" + + " (SELECT id FROM amp_category_class WHERE keyname = 'component_funding_status'),\n" + + " 1\n" + + "WHERE NOT EXISTS (\n" + + " SELECT 1\n" + + " FROM amp_category_value\n" + + " WHERE\n" + + " amp_category_class_id = (SELECT id FROM amp_category_class WHERE keyname = 'component_funding_status')\n" + + " AND category_value = 'Closed'\n" + + ");\n" + + "\n" + + "INSERT INTO amp_category_value (id, category_value, amp_category_class_id, index_column)\n" + + "SELECT\n" + + " nextval('amp_category_value_seq'),\n" + + " 'Rejected',\n" + + " (SELECT id FROM amp_category_class WHERE keyname = 'component_funding_status'),\n" + + " 2\n" + + "WHERE NOT EXISTS (\n" + + " SELECT 1\n" + + " FROM amp_category_value\n" + + " WHERE\n" + + " amp_category_class_id = (SELECT id FROM amp_category_class WHERE keyname = 'component_funding_status')\n" + + " AND category_value = 'Rejected'\n" + + ");\n"; statement.executeUpdate(insertStatusValues); } catch (Exception e) { // Handle the exception diff --git a/amp/WEB-INF/src/org/digijava/module/aim/util/ActivityUtil.java b/amp/WEB-INF/src/org/digijava/module/aim/util/ActivityUtil.java index 338d9b51c7a..abaa2b4d992 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/util/ActivityUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/util/ActivityUtil.java @@ -600,28 +600,25 @@ public static Collection getAllComponents(Long id) { components.setExpenditures(new ArrayList()); Collection componentsFunding = ampComp.getFundings(); - Iterator compFundIterator = componentsFunding.iterator(); - while (compFundIterator.hasNext()) { - AmpComponentFunding cf = (AmpComponentFunding) compFundIterator.next(); - FundingDetail fd = new FundingDetail(); - fd.setAdjustmentTypeName(cf.getAdjustmentType()); - - fd.setCurrencyCode(cf.getCurrency().getCurrencyCode()); - fd.setCurrencyName(cf.getCurrency().getCurrencyName()); - fd.setTransactionAmount(FormatHelper.formatNumber(cf.getTransactionAmount().doubleValue())); - fd.setTransactionDate(DateConversion.convertDateToLocalizedString(cf.getTransactionDate())); - fd.setFiscalYear(DateConversion.convertDateToFiscalYearString(cf.getTransactionDate())); - fd.setTransactionType(cf.getTransactionType().intValue()); - if (fd.getTransactionType() == Constants.COMMITMENT) { - components.getCommitments().add(fd); - } - else if (fd.getTransactionType() == Constants.DISBURSEMENT) { - components.getDisbursements().add(fd); - } - else if (fd.getTransactionType() == Constants.EXPENDITURE) { - components.getExpenditures().add(fd); + for (AmpComponentFunding cf : componentsFunding) { + FundingDetail fd = new FundingDetail(); + fd.setAdjustmentTypeName(cf.getAdjustmentType()); + fd.setComponentFundingStatus(cf.getComponentFundingStatus()); + + fd.setCurrencyCode(cf.getCurrency().getCurrencyCode()); + fd.setCurrencyName(cf.getCurrency().getCurrencyName()); + fd.setTransactionAmount(FormatHelper.formatNumber(cf.getTransactionAmount().doubleValue())); + fd.setTransactionDate(DateConversion.convertDateToLocalizedString(cf.getTransactionDate())); + fd.setFiscalYear(DateConversion.convertDateToFiscalYearString(cf.getTransactionDate())); + fd.setTransactionType(cf.getTransactionType()); + if (fd.getTransactionType() == Constants.COMMITMENT) { + components.getCommitments().add(fd); + } else if (fd.getTransactionType() == Constants.DISBURSEMENT) { + components.getDisbursements().add(fd); + } else if (fd.getTransactionType() == Constants.EXPENDITURE) { + components.getExpenditures().add(fd); + } } - } List list = null; if (components.getCommitments() != null) { list = new ArrayList(components.getCommitments()); diff --git a/amp/WEB-INF/src/org/digijava/module/aim/util/CurrencyUtil.java b/amp/WEB-INF/src/org/digijava/module/aim/util/CurrencyUtil.java index 40df834ec87..11a8fc2a6b1 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/util/CurrencyUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/util/CurrencyUtil.java @@ -730,7 +730,7 @@ public static void deleteCurrency(String code) throws Exception { * @return */ public static AmpCurrency getWorkspaceCurrency(TeamMember tm) { - AmpCurrency currency = null; + AmpCurrency currency; if (tm != null && tm.getAppSettings() != null) { currency = getAmpcurrency(tm.getAppSettings().getCurrencyId()); if (currency != null) { diff --git a/amp/WEB-INF/src/org/digijava/module/aim/util/DbUtil.java b/amp/WEB-INF/src/org/digijava/module/aim/util/DbUtil.java index 926699213aa..2b9c8117520 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/util/DbUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/util/DbUtil.java @@ -2149,7 +2149,7 @@ public static List getResposesBySurvey(Long surveyId, Long activityId) { itr5 = ampf.getFundingDetails().iterator(); while (itr5.hasNext()) { fd = (AmpFundingDetail) itr5.next(); - if (fd.getTransactionType().intValue() == 1) { + if (fd.getTransactionType() == 1) { if (fd.getAdjustmentType().getValue() .equals(CategoryConstants.ADJUSTMENT_TYPE_PLANNED .getValueKey())) @@ -2165,7 +2165,7 @@ else if (fd.getAdjustmentType().getValue().equals( res.setResponse("nil"); else { NumberFormat formatter = new DecimalFormat("#.##"); - Double percent = new Double((actual * 100) / planned); + Double percent = (actual * 100) / planned; res.setResponse(formatter.format(percent)); } } else diff --git a/amp/WEB-INF/src/org/digijava/module/categorymanager/util/CategoryConstants.java b/amp/WEB-INF/src/org/digijava/module/categorymanager/util/CategoryConstants.java index 13f39f7837b..851aa5f3623 100644 --- a/amp/WEB-INF/src/org/digijava/module/categorymanager/util/CategoryConstants.java +++ b/amp/WEB-INF/src/org/digijava/module/categorymanager/util/CategoryConstants.java @@ -220,8 +220,18 @@ public class CategoryConstants { public static final HardCodedCategoryValue ADJUSTMENT_TYPE_PIPELINE = new CategoryConstants.HardCodedCategoryValue("adjustment_type", "Pipeline", false); - - public static final HardCodedCategoryValue ADJUSTMENT_TYPE_ODA_SSC = + + + public static final HardCodedCategoryValue COMPONENT_FUNDING_STATUS_OPEN = + new CategoryConstants.HardCodedCategoryValue("component_funding_status", "Open", true); + + public static final HardCodedCategoryValue COMPONENT_FUNDING_STATUS_CLOSED = + new CategoryConstants.HardCodedCategoryValue("component_funding_status", "Closed", true); + + public static final HardCodedCategoryValue COMPONENT_FUNDING_STATUS_REJECTED = + new CategoryConstants.HardCodedCategoryValue("component_funding_status", "Rejected", false); + + public static final HardCodedCategoryValue ADJUSTMENT_TYPE_ODA_SSC = new CategoryConstants.HardCodedCategoryValue(SSC_ADJUSTMENT_TYPE_KEY, "Official Development Aid", true); public static final HardCodedCategoryValue ADJUSTMENT_TYPE_BILATERAL_SSC = @@ -351,7 +361,7 @@ public AmpCategoryValue getAmpCategoryValueFromDB() } if (databaseAcvlId == null) return null; - return (AmpCategoryValue) PersistenceManager.getSession().get(AmpCategoryValue.class, databaseAcvlId); + return PersistenceManager.getSession().get(AmpCategoryValue.class, databaseAcvlId); } public boolean equalsCategoryValue(AmpCategoryValue value) From 106f240b0222400706d67ea8c876da3247e3764b Mon Sep 17 00:00:00 2001 From: brianbrix Date: Fri, 22 Sep 2023 08:31:40 +0300 Subject: [PATCH 114/307] AMP-30723-Feature -implement amp TruBudget integration AMP-30725 -CREATION OF COMPONENTS AMP-30726-WORKFLOW CREATION --- .../AmpComponentsFundingFormTableFeature.html | 1 + .../AmpComponentsFundingFormTableFeature.java | 31 ++++++++++++------- 2 files changed, 20 insertions(+), 12 deletions(-) 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..bcc4cc8b8c5 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,6 +5,7 @@
+ 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..8168b75fc32 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 @@ -65,13 +65,23 @@ protected void onPopulateItem(org.dgfoundation.amp.onepager.components.ListItem< 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); adjustmentTypes.getChoiceContainer().add(new AttributeModifier("style", "width: 100px;")); item.add(adjustmentTypes); + + 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().setRequired(true); + componentFundingStatus.getChoiceContainer().add(new AttributeModifier("style", "width: 100px;")); + item.add(componentFundingStatus); + } catch(Exception e) { logger.error("AmpCategoryGroupFieldPanel initialization failed"); } @@ -93,13 +103,13 @@ 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); item.add(new ListEditorRemoveButton("delete", "Delete")); @@ -114,8 +124,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 +145,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); } } From 8f92356ed24b9fbac9235275c80a0e68b37a0ffb Mon Sep 17 00:00:00 2001 From: brianbrix Date: Fri, 22 Sep 2023 09:10:15 +0300 Subject: [PATCH 115/307] AMP-30723-Feature -implement amp TruBudget integration AMP-30725 -CREATION OF COMPONENTS AMP-30726-WORKFLOW CREATION --- .../AmpComponentsFormSectionFeature.java | 4 +- .../AmpComponentsFundingFormTableFeature.java | 16 +++++-- .../module/aim/helper/FundingValidator.java | 44 +++++++++---------- .../activitypreview/componentsSection.jsp | 10 +++++ 4 files changed, 45 insertions(+), 29 deletions(-) diff --git a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/sections/AmpComponentsFormSectionFeature.java b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/sections/AmpComponentsFormSectionFeature.java index 349c5eeda58..06697192630 100644 --- a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/sections/AmpComponentsFormSectionFeature.java +++ b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/sections/AmpComponentsFormSectionFeature.java @@ -35,9 +35,9 @@ public class AmpComponentsFormSectionFeature extends public AmpComponentsFormSectionFeature(String id, String fmName, final IModel am) throws Exception { super(id, fmName, am); - final PropertyModel> setModel=new PropertyModel>(am,"components"); + final PropertyModel> setModel= new PropertyModel<>(am, "components"); if (setModel.getObject() == null) - setModel.setObject(new TreeSet()); + setModel.setObject(new TreeSet<>()); final ListEditor list; IModel> listModel = OnePagerUtil.getReadOnlyListModelFromSetModel(setModel); 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 8168b75fc32..d29d865e068 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 @@ -73,6 +73,13 @@ protected void onPopulateItem(org.dgfoundation.amp.onepager.components.ListItem< item.add(adjustmentTypes); + + + } catch(Exception e) { + logger.info("Unable to add adjustment type dropdown: ",e); + } + try { + AmpCategorySelectFieldPanel componentFundingStatus = new AmpCategorySelectFieldPanel( "componentFundingStatus", CategoryConstants.COMPONENT_FUNDING_STATUS_KEY, new PropertyModel<>(model, "componentFundingStatus"), @@ -80,12 +87,13 @@ protected void onPopulateItem(org.dgfoundation.amp.onepager.components.ListItem< false, false, false, null, false); componentFundingStatus.getChoiceContainer().setRequired(true); componentFundingStatus.getChoiceContainer().add(new AttributeModifier("style", "width: 100px;")); - item.add(componentFundingStatus); - - } catch(Exception e) { - logger.error("AmpCategoryGroupFieldPanel initialization failed"); + item.add(componentFundingStatus); + } catch (Exception e) + { + logger.info("Unable to add component funding status dropdown: ",e); } + // 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); diff --git a/amp/WEB-INF/src/org/digijava/module/aim/helper/FundingValidator.java b/amp/WEB-INF/src/org/digijava/module/aim/helper/FundingValidator.java index 3e3b11409bb..05ff288b9ed 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/helper/FundingValidator.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/helper/FundingValidator.java @@ -15,22 +15,20 @@ public class FundingValidator { private static ArrayList list1; private static ArrayList list2; - public static Comparator dateComp = new Comparator() { - public int compare(Object e1,Object e2) { - if (e1 instanceof FundingDetail && e2 instanceof FundingDetail) { - FundingDetail fd1 = (FundingDetail) e1; - FundingDetail fd2 = (FundingDetail) e2; - Date dt1 = DateConversion.getLocalizedDate(fd1.getTransactionDate()); - Date dt2 = DateConversion.getLocalizedDate(fd2.getTransactionDate()); - if (((dt1 == null)&&(dt2 == null))||(dt1.equals(dt2))) { - return fd2.getAdjustmentTypeName().compareTo(fd1.getAdjustmentTypeName()); - } else { - return (dt1.compareTo(dt2)); - } - + public static Comparator dateComp = (e1, e2) -> { + if (e1 instanceof FundingDetail && e2 instanceof FundingDetail) { + FundingDetail fd1 = (FundingDetail) e1; + FundingDetail fd2 = (FundingDetail) e2; + Date dt1 = DateConversion.getLocalizedDate(fd1.getTransactionDate()); + Date dt2 = DateConversion.getLocalizedDate(fd2.getTransactionDate()); + if (((dt1 == null)&&(dt2 == null))||(Objects.equals(dt1, dt2))) { + return fd2.getAdjustmentTypeName().compareTo(fd1.getAdjustmentTypeName()); + } else { + return (dt1.compareTo(dt2)); } - throw new ClassCastException(); + } + throw new ClassCastException(); }; private static void makeCumulativeAmounts() { @@ -46,7 +44,7 @@ private static void makeCumulativeAmounts() { amt = CurrencyWorker.convert1(amt,frmExRt,toExRt); value += amt; - fd.setTransactionAmount(""+value); + fd.setTransactionAmount(String.valueOf(value)); list1.set(i,fd); } @@ -62,7 +60,7 @@ private static void makeCumulativeAmounts() { amt = CurrencyWorker.convert1(amt,frmExRt,toExRt); value += amt; - fd.setTransactionAmount(""+value); + fd.setTransactionAmount(String.valueOf(value)); list2.set(i,fd); } } @@ -103,13 +101,13 @@ public static int validateFundings(Collection col1,Collection col2) { temp = new ArrayList(col1); } list1 = new ArrayList(); - for (int i = 0;i < temp.size();i ++) { - FundingDetail fd = (FundingDetail) temp.get(i); + for (Object o : temp) { + FundingDetail fd = (FundingDetail) o; FundingDetail newFd = new FundingDetail(); newFd.setCurrencyCode(fd.getCurrencyCode()); newFd.setTransactionAmount(fd.getTransactionAmount()); newFd.setTransactionDate(fd.getTransactionDate()); - + if (fd.getAdjustmentTypeName().equals(CategoryConstants.ADJUSTMENT_TYPE_ACTUAL.getValueKey())) { list1.add(newFd); } @@ -117,8 +115,8 @@ public static int validateFundings(Collection col1,Collection col2) { temp = new ArrayList(col2); list2 = new ArrayList(); - for (int i = 0;i < temp.size();i ++) { - FundingDetail fd = (FundingDetail) temp.get(i); + for (Object o : temp) { + FundingDetail fd = (FundingDetail) o; FundingDetail newFd = new FundingDetail(); newFd.setCurrencyCode(fd.getCurrencyCode()); newFd.setTransactionAmount(fd.getTransactionAmount()); @@ -126,8 +124,8 @@ public static int validateFundings(Collection col1,Collection col2) { list2.add(newFd); } - Collections.sort(list1,dateComp); - Collections.sort(list2,dateComp); + list1.sort(dateComp); + list2.sort(dateComp); makeCumulativeAmounts(); return validate(); } diff --git a/amp/repository/aim/view/activitypreview/componentsSection.jsp b/amp/repository/aim/view/activitypreview/componentsSection.jsp index 3cea8e13601..6db93e7f503 100644 --- a/amp/repository/aim/view/activitypreview/componentsSection.jsp +++ b/amp/repository/aim/view/activitypreview/componentsSection.jsp @@ -67,6 +67,16 @@ + + + + + + + + + From 238a7f3c6f4f82e0a39bceb69dc464fe3b314101 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Fri, 22 Sep 2023 16:02:48 +0300 Subject: [PATCH 116/307] AMP-30723-Feature -implement amp TruBudget integration AMP-30725 -CREATION OF COMPONENTS AMP-30726-WORKFLOW CREATION --- .../features/tables/AmpDonorCommitmentsFormTableFeature.html | 3 ++- .../org/digijava/module/aim/startup/AMPStartupListener.java | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) 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..a5597fd1cef 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/digijava/module/aim/startup/AMPStartupListener.java b/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java index 922d7dc694b..ea76f004ab1 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/startup/AMPStartupListener.java @@ -327,7 +327,7 @@ public static void runQuery() " (nextval('amp_global_settings_seq'),'organization','KfW','','Organization name to be used for this deployment','trubudget',NULL,true) ON CONFLICT (settingsname,section) DO NOTHING"; statement.executeUpdate(insertIntoGlobalSettings); String insertStatusClass ="INSERT INTO amp_category_class(id, category_name, keyname, description, is_multiselect, is_ordered)" + - " VALUES (nextval('amp_category_class_seq'), 'Component Funding Status' , 'component_funding_status', '', 'f', 'f')"; + " VALUES (nextval('amp_category_class_seq'), 'Component Funding Status' , 'component_funding_status', '', 'f', 'f') ON CONFLICT(keyname) DO NOTHING"; statement.executeUpdate(insertStatusClass); // String alterTable="ALTER TABLE AMP_CATEGORY_VALUE\n" + // "ADD CONSTRAINT unique_value_index_constraint UNIQUE (category_value, index_column)"; From c0d574073a746c48f4c9f0e978afda2161022276 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Fri, 22 Sep 2023 16:35:21 +0300 Subject: [PATCH 117/307] AMP-30723-Feature -implement amp TruBudget integration AMP-30725 -CREATION OF COMPONENTS AMP-30726-WORKFLOW CREATION Added workflowItem status --- .../org/digijava/module/aim/dbentity/AmpComponentFunding.java | 4 ++++ .../src/org/digijava/module/trubudget/util/ProjectUtil.java | 1 + 2 files changed, 5 insertions(+) diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponentFunding.java b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponentFunding.java index 7cce952c027..d93ac76da9d 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponentFunding.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponentFunding.java @@ -50,6 +50,10 @@ public AmpCategoryValue getComponentFundingStatus() { return componentFundingStatus; } + public String getComponentFundingStatusFormatted() { + return componentFundingStatus.getValue().toLowerCase(); + } + public void setComponentFundingStatus(AmpCategoryValue componentFundingStatus) { this.componentFundingStatus = componentFundingStatus; } diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java b/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java index 1985d865bb3..66b3f04e03f 100644 --- a/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java @@ -310,6 +310,7 @@ public static void createUpdateWorkflowItems(String projectId, String subProject data.setProjectId(projectId); data.setSubprojectId(subProjectId); data.setAssignee(user); + data.setStatus((Objects.equals(componentFunding.getComponentFundingStatusFormatted(), "closed") || Objects.equals(componentFunding.getComponentFundingStatusFormatted(), "rejected"))?"closed":"open"); data.setDescription(componentFunding.getDescription()); data.setDisplayName(componentFunding.getComponent().getTitle()); data.setAmount(BigDecimal.valueOf(componentFunding.getTransactionAmount()).toPlainString()); From 79dc1ace7bd9e8d7aa08876c9685bbb1a1c3d578 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Fri, 22 Sep 2023 16:56:14 +0300 Subject: [PATCH 118/307] AMP-30723-Feature -implement amp TruBudget integration AMP-30725 -CREATION OF COMPONENTS AMP-30726-WORKFLOW CREATION Close workflow --- .../model/workflowitem/CloseWFItemModel.java | 10 +++++ .../module/trubudget/util/ProjectUtil.java | 37 ++++++++++++++++++- 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/model/workflowitem/CloseWFItemModel.java b/amp/WEB-INF/src/org/digijava/module/trubudget/model/workflowitem/CloseWFItemModel.java index 06638b6028b..cee67c31f15 100644 --- a/amp/WEB-INF/src/org/digijava/module/trubudget/model/workflowitem/CloseWFItemModel.java +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/model/workflowitem/CloseWFItemModel.java @@ -26,6 +26,16 @@ public static class Data private String subprojectId; private String workflowitemId; + public String getRejectReason() { + return rejectReason; + } + + public void setRejectReason(String rejectReason) { + this.rejectReason = rejectReason; + } + + private String rejectReason; + public String getProjectId() { return projectId; } diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java b/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java index 66b3f04e03f..9295e594169 100644 --- a/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java @@ -12,6 +12,7 @@ import org.digijava.module.trubudget.model.subproject.EditSubProjectModel; import org.digijava.module.trubudget.model.subproject.EditSubProjectedBudgetModel; import org.digijava.module.trubudget.model.subproject.SubProjectGrantRevokePermModel; +import org.digijava.module.trubudget.model.workflowitem.CloseWFItemModel; import org.digijava.module.trubudget.model.workflowitem.CreateWFResponseModel; import org.digijava.module.trubudget.model.workflowitem.EditWFItemModel; import org.digijava.module.trubudget.model.workflowitem.WFItemGrantRevokePermModel; @@ -310,7 +311,7 @@ public static void createUpdateWorkflowItems(String projectId, String subProject data.setProjectId(projectId); data.setSubprojectId(subProjectId); data.setAssignee(user); - data.setStatus((Objects.equals(componentFunding.getComponentFundingStatusFormatted(), "closed") || Objects.equals(componentFunding.getComponentFundingStatusFormatted(), "rejected"))?"closed":"open"); +// data.setStatus((Objects.equals(componentFunding.getComponentFundingStatusFormatted(), "closed") || Objects.equals(componentFunding.getComponentFundingStatusFormatted(), "rejected"))?"closed":"open"); data.setDescription(componentFunding.getDescription()); data.setDisplayName(componentFunding.getComponent().getTitle()); data.setAmount(BigDecimal.valueOf(componentFunding.getTransactionAmount()).toPlainString()); @@ -348,6 +349,13 @@ public static void createUpdateWorkflowItems(String projectId, String subProject } }); + //workflow close + try { + closeWorkFlowItem(componentFunding,settings,projectId,subProjectId,res.getData().getWorkflowitem().getId(),"Closed",token); + } catch (URISyntaxException e) { + logger.info("Error when closing wf item ",e); + throw new RuntimeException(e); + } }); @@ -373,6 +381,13 @@ public static void createUpdateWorkflowItems(String projectId, String subProject editWFItemModel.setData(data); GenericWebClient.postForSingleObjResponse(getSettingValue(settings, "baseUrl") + "api/workflowitem.update", editWFItemModel, EditWFItemModel.class, String.class, token) .subscribe(res -> logger.info("Edit WFItem response: "+res)); + + try { + closeWorkFlowItem(componentFunding,settings,projectId,subProjectId,ampComponentFundingTruWF.getTruWFId(),"Closed",token); + } catch (URISyntaxException e) { + logger.info("Error when closing wf item ",e); + throw new RuntimeException(e); + } } } @@ -381,6 +396,26 @@ public static void createUpdateWorkflowItems(String projectId, String subProject } } + public static void closeWorkFlowItem(AmpComponentFunding ampComponentFunding, List settings, String projectId, String subProjectId, String workFlowItemId, String rejectReason, String token) throws URISyntaxException { + if (Objects.equals(ampComponentFunding.getComponentFundingStatusFormatted(), "closed") || Objects.equals(ampComponentFunding.getComponentFundingStatusFormatted(), "closed")){ + //workflow close + CloseWFItemModel closeWFItemModel = new CloseWFItemModel(); + closeWFItemModel.setApiVersion(getSettingValue(settings, "apiVersion")); + CloseWFItemModel.Data data = new CloseWFItemModel.Data(); + data.setProjectId(projectId); + data.setSubprojectId(subProjectId); + data.setWorkflowitemId(workFlowItemId); + data.setRejectReason(rejectReason); + closeWFItemModel.setData(data); + + GenericWebClient.postForSingleObjResponse(getSettingValue(settings, "baseUrl") + "api/workflowitem.close", closeWFItemModel, CloseWFItemModel.class, String.class, token) + .subscribe(res -> { + logger.info("WF close response: "+res); + }); + + + } + } public static String convertToISO8601(Date date) { Instant instant = date.toInstant(); From 32215a639e76542ca1ceadfc741dc9146fd7fa2b Mon Sep 17 00:00:00 2001 From: brianbrix Date: Fri, 22 Sep 2023 16:56:44 +0300 Subject: [PATCH 119/307] AMP-30723-Feature -implement amp TruBudget integration AMP-30725 -CREATION OF COMPONENTS AMP-30726-WORKFLOW CREATION Close workflow --- .../src/org/digijava/module/trubudget/util/ProjectUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java b/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java index 9295e594169..1cb1824da95 100644 --- a/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java @@ -383,7 +383,7 @@ public static void createUpdateWorkflowItems(String projectId, String subProject .subscribe(res -> logger.info("Edit WFItem response: "+res)); try { - closeWorkFlowItem(componentFunding,settings,projectId,subProjectId,ampComponentFundingTruWF.getTruWFId(),"Closed",token); + closeWorkFlowItem(componentFunding,settings,projectId,subProjectId,ampComponentFundingTruWF.getTruWFId(),componentFunding.getComponentFundingStatus().getValue(),token); } catch (URISyntaxException e) { logger.info("Error when closing wf item ",e); throw new RuntimeException(e); From 1c4ffbe7291e7f6f7854e76a21cbca0e728b387e Mon Sep 17 00:00:00 2001 From: brianbrix Date: Fri, 22 Sep 2023 17:01:28 +0300 Subject: [PATCH 120/307] AMP-30723-Feature -implement amp TruBudget integration AMP-30725 -CREATION OF COMPONENTS AMP-30726-WORKFLOW CREATION Close workflow --- .../src/org/digijava/module/trubudget/util/ProjectUtil.java | 1 - 1 file changed, 1 deletion(-) diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java b/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java index 1cb1824da95..1d37c6cc4a2 100644 --- a/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java @@ -299,7 +299,6 @@ public static void createUpdateWorkflowItems(String projectId, String subProject String token = (String) myCache.get("truBudgetToken"); String user = (String) myCache.get("truBudgetUser"); logger.info("Trubudget Cached Token:" + token); -// TODO: 9/19/23 add status field on AMpCOmponent to allow user select status if (!ampComponent.getFundings().isEmpty()) { for (AmpComponentFunding componentFunding : ampComponent.getFundings()) { if (componentFunding.getTransactionType() == 1 && (Objects.equals(componentFunding.getAdjustmentType().getValue(), "Planned") || Objects.equals(componentFunding.getAdjustmentType().getValue(), "Actual"))) { From b860f1f59725fdd4a818ea59e550624318e1fb64 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Mon, 25 Sep 2023 08:27:33 +0300 Subject: [PATCH 121/307] AMP-30723-Feature -implement amp TruBudget integration AMP-30725 -CREATION OF COMPONENTS AMP-30726-WORKFLOW CREATION Close workflow --- .../AmpComponentFundingDocuments.hbm.xml | 18 ++++++ .../AmpComponentFundingDocuments.java | 56 +++++++++++++++++++ .../module/trubudget/util/ProjectUtil.java | 20 +++++-- 3 files changed, 89 insertions(+), 5 deletions(-) create mode 100644 amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponentFundingDocuments.hbm.xml create mode 100644 amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponentFundingDocuments.java diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponentFundingDocuments.hbm.xml b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponentFundingDocuments.hbm.xml new file mode 100644 index 00000000000..099ed8b12b7 --- /dev/null +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponentFundingDocuments.hbm.xml @@ -0,0 +1,18 @@ + + + + + + + amp_component_funding_documents_seq + + + + + + + + + \ No newline at end of file diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponentFundingDocuments.java b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponentFundingDocuments.java new file mode 100644 index 00000000000..2a7efea38e2 --- /dev/null +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponentFundingDocuments.java @@ -0,0 +1,56 @@ +package org.digijava.module.aim.dbentity; + +import org.hibernate.annotations.DynamicUpdate; + +import javax.persistence.*; + +@Table(name = "amp_component_funding_documents") +@Cacheable +@DynamicUpdate +@Entity +public class AmpComponentFundingDocuments { + @Id + @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "amp_component_funding_documents_seq") + @SequenceGenerator(name = "amp_component_funding_documents_seq", sequenceName = "amp_component_funding_documents_seq", allocationSize = 1) + @Column(name = "id") + private Long id; + @Column(name = "file_base_64_string") + private String fileBase64String; + @Column(name = "file_name") + private String fileName; + @ManyToOne + @JoinColumn(name="amp_component_funding_id", nullable=false) + private AmpComponentFunding ampComponentFunding; + + public AmpComponentFunding getAmpComponentFunding() { + return ampComponentFunding; + } + + public void setAmpComponentFunding(AmpComponentFunding ampComponentFunding) { + this.ampComponentFunding = ampComponentFunding; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getFileBase64String() { + return fileBase64String; + } + + public void setFileBase64String(String fileBase64String) { + this.fileBase64String = fileBase64String; + } + + public String getFileName() { + return fileName; + } + + public void setFileName(String fileName) { + this.fileName = fileName; + } +} diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java b/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java index 1d37c6cc4a2..b6d4c9a0825 100644 --- a/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java @@ -189,6 +189,18 @@ public static void updateProject(String projectId, AmpActivityVersion ampActivit } createUpdateSubProjects(ampActivityVersion, projectId,settings); + } + + public static void closeProject(AmpActivityVersion ampActivityVersion,Listsettings,String projectId, String token) throws URISyntaxException { + CloseProjectModel closeProjectModel = new CloseProjectModel(); + closeProjectModel.setApiVersion(getSettingValue(settings, "apiVersion")); + CloseProjectModel.Data data = new CloseProjectModel.Data(); + data.setProjectId(projectId); + closeProjectModel.setData(data); + + GenericWebClient.postForSingleObjResponse(getSettingValue(settings, "baseUrl") + "api/project.close", closeProjectModel, CloseProjectModel.class, String.class, token) + .subscribe(res -> logger.info("WF close response: "+res)); + } public static void createUpdateSubProjects(AmpActivityVersion ampActivityVersion, String projectId, List settings) throws URISyntaxException { @@ -408,20 +420,18 @@ public static void closeWorkFlowItem(AmpComponentFunding ampComponentFunding, Li closeWFItemModel.setData(data); GenericWebClient.postForSingleObjResponse(getSettingValue(settings, "baseUrl") + "api/workflowitem.close", closeWFItemModel, CloseWFItemModel.class, String.class, token) - .subscribe(res -> { - logger.info("WF close response: "+res); - }); + .subscribe(res -> logger.info("WF close response: "+res)); } } - public static String convertToISO8601(Date date) { + private static String convertToISO8601(Date date) { Instant instant = date.toInstant(); return instant.toString(); } - public static String convertToISO8601AndAddDays(Date date, int daysToAdd) { + private static String convertToISO8601AndAddDays(Date date, int daysToAdd) { LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); LocalDate newLocalDate = localDate.plusDays(daysToAdd); date = Date.from(newLocalDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); From b191363d0ef58f56ca5f97256d65e376004c9740 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Mon, 25 Sep 2023 09:13:28 +0300 Subject: [PATCH 122/307] AMP-30723-Feature -implement amp TruBudget integration AMP-30725 -CREATION OF COMPONENTS AMP-30726-WORKFLOW CREATION Close workflow --- .../tables/AmpComponentsFundingFormTableFeature.java | 6 ++++++ amp/WEB-INF/src/org/digijava/module/aim/action/Login.java | 1 - .../digijava/module/aim/dbentity/AmpActivityDocument.java | 5 +---- .../digijava/module/aim/dbentity/AmpComponentFunding.java | 3 +++ 4 files changed, 10 insertions(+), 5 deletions(-) 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 d29d865e068..f33238d734a 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 @@ -12,6 +12,7 @@ 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.AmpNewResourceFieldPanel; import org.dgfoundation.amp.onepager.components.fields.AmpSelectFieldPanel; import org.dgfoundation.amp.onepager.components.fields.AmpTextFieldPanel; import org.dgfoundation.amp.onepager.events.FundingOrgListUpdateEvent; @@ -120,6 +121,11 @@ protected void onPopulateItem(org.dgfoundation.amp.onepager.components.ListItem< 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")); } }; diff --git a/amp/WEB-INF/src/org/digijava/module/aim/action/Login.java b/amp/WEB-INF/src/org/digijava/module/aim/action/Login.java index 9f900be742b..e23e7f865aa 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/action/Login.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/action/Login.java @@ -21,7 +21,6 @@ import org.digijava.module.aim.util.TeamUtil; import org.digijava.module.gateperm.core.GatePermConst; import org.digijava.module.gateperm.util.PermissionUtil; -import org.digijava.module.trubudget.util.ProjectUtil; import org.digijava.module.um.model.TruLoginRequest; import org.digijava.module.um.model.TruLoginResponse; import org.digijava.module.um.util.UmUtil; diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpActivityDocument.java b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpActivityDocument.java index 8e814eaa07c..8a8b41e61ae 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpActivityDocument.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpActivityDocument.java @@ -64,10 +64,7 @@ public boolean equalsForVersioning(Object obj) { AmpActivityDocument aux = (AmpActivityDocument) obj; String original = this.getUuid() != null ? this.getUuid() : ""; String copy = aux.getUuid() != null ? aux.getUuid() : ""; - if (original.equals(copy)) { - return true; - } - return false; + return original.equals(copy); } @Override diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponentFunding.java b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponentFunding.java index d93ac76da9d..798dfcfd31f 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponentFunding.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponentFunding.java @@ -18,6 +18,7 @@ import java.io.Serializable; import java.util.Date; +import java.util.Set; import static org.digijava.module.aim.annotations.interchange.ActivityFieldsConstants.*; @@ -30,6 +31,8 @@ public class AmpComponentFunding implements Cloneable, Serializable { private Integer transactionType; +// private Set fundingDocuments; + From ee07f2693fad7ae274efa697e2d89963b0cedfa6 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Mon, 25 Sep 2023 09:52:28 +0300 Subject: [PATCH 123/307] AMP-30723-Feature -implement amp TruBudget integration AMP-30725 -CREATION OF COMPONENTS AMP-30726-WORKFLOW CREATION Close workflow --- .../model/workflowitem/WorkflowItem.java | 202 ++++++++++++++++++ 1 file changed, 202 insertions(+) create mode 100644 amp/WEB-INF/src/org/digijava/module/trubudget/model/workflowitem/WorkflowItem.java diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/model/workflowitem/WorkflowItem.java b/amp/WEB-INF/src/org/digijava/module/trubudget/model/workflowitem/WorkflowItem.java new file mode 100644 index 00000000000..b4b655732f2 --- /dev/null +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/model/workflowitem/WorkflowItem.java @@ -0,0 +1,202 @@ +package org.digijava.module.trubudget.model.workflowitem; + +import java.util.List; +import java.util.Map; + +public class WorkflowItem { + private String id; + private String creationUnixTs; + private String status; + private String rejectReason; + private String amountType; + private String displayName; + private String description; + private String amount; + private String assignee; + private String currency; + private String billingDate; + private String dueDate; + private String exchangeRate; + private Map additionalData; + private String workflowItemType; + private List documents; + private List allowedIntents; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getCreationUnixTs() { + return creationUnixTs; + } + + public void setCreationUnixTs(String creationUnixTs) { + this.creationUnixTs = creationUnixTs; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getRejectReason() { + return rejectReason; + } + + public void setRejectReason(String rejectReason) { + this.rejectReason = rejectReason; + } + + public String getAmountType() { + return amountType; + } + + public void setAmountType(String amountType) { + this.amountType = amountType; + } + + public String getDisplayName() { + return displayName; + } + + public void setDisplayName(String displayName) { + this.displayName = displayName; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getAmount() { + return amount; + } + + public void setAmount(String amount) { + this.amount = amount; + } + + public String getAssignee() { + return assignee; + } + + public void setAssignee(String assignee) { + this.assignee = assignee; + } + + public String getCurrency() { + return currency; + } + + public void setCurrency(String currency) { + this.currency = currency; + } + + public String getBillingDate() { + return billingDate; + } + + public void setBillingDate(String billingDate) { + this.billingDate = billingDate; + } + + public String getDueDate() { + return dueDate; + } + + public void setDueDate(String dueDate) { + this.dueDate = dueDate; + } + + public String getExchangeRate() { + return exchangeRate; + } + + public void setExchangeRate(String exchangeRate) { + this.exchangeRate = exchangeRate; + } + + public Map getAdditionalData() { + return additionalData; + } + + public void setAdditionalData(Map additionalData) { + this.additionalData = additionalData; + } + + public String getWorkflowItemType() { + return workflowItemType; + } + + public void setWorkflowItemType(String workflowItemType) { + this.workflowItemType = workflowItemType; + } + + public List getDocuments() { + return documents; + } + + public void setDocuments(List documents) { + this.documents = documents; + } + + public List getAllowedIntents() { + return allowedIntents; + } + + public void setAllowedIntents(List allowedIntents) { + this.allowedIntents = allowedIntents; + } + + // Getters and setters for all fields + public static class Document { + private String hash; + private String fileName; + private String id; + private boolean available; + + public String getHash() { + return hash; + } + + public void setHash(String hash) { + this.hash = hash; + } + + public String getFileName() { + return fileName; + } + + public void setFileName(String fileName) { + this.fileName = fileName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public boolean isAvailable() { + return available; + } + + public void setAvailable(boolean available) { + this.available = available; + } + } +} + + From 80bc86bf0848f95f239be35a92de320a64834329 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Mon, 25 Sep 2023 11:28:27 +0300 Subject: [PATCH 124/307] GGW-93 -set user group --- amp/WEB-INF/src/org/digijava/kernel/user/Group.java | 6 +++--- amp/WEB-INF/src/org/digijava/kernel/user/User.java | 10 ++++------ .../src/org/digijava/module/admin/util/DbUtil.java | 9 +++++---- .../src/org/digijava/module/um/form/AddUserForm.java | 2 +- .../src/org/digijava/module/um/util/DbUtil.java | 4 ++-- 5 files changed, 15 insertions(+), 16 deletions(-) diff --git a/amp/WEB-INF/src/org/digijava/kernel/user/Group.java b/amp/WEB-INF/src/org/digijava/kernel/user/Group.java index d1ba172aee4..524f1cbdc18 100644 --- a/amp/WEB-INF/src/org/digijava/kernel/user/Group.java +++ b/amp/WEB-INF/src/org/digijava/kernel/user/Group.java @@ -70,7 +70,7 @@ public class Group private Site site; private String key; - private Set users; + private Set users=new HashSet<>(); private Set menuEntries= new HashSet<>(); public Set getMenuEntries() { @@ -192,11 +192,11 @@ public String getRequiredActions() { return null; } - public Set getUsers() { + public Set getUsers() { return users; } - public void setUsers(Set users) { + public void setUsers(Set users) { this.users = users; } diff --git a/amp/WEB-INF/src/org/digijava/kernel/user/User.java b/amp/WEB-INF/src/org/digijava/kernel/user/User.java index d3ad199a55d..6bb94230550 100644 --- a/amp/WEB-INF/src/org/digijava/kernel/user/User.java +++ b/amp/WEB-INF/src/org/digijava/kernel/user/User.java @@ -70,7 +70,7 @@ public class User private Country country; private AmpCategoryValueLocations region; private HashMap sitePreferences; - private Set groups; + private Set groups=new HashSet<>(); private HashMap siteContentLocales; private String address; private Image photo; @@ -260,7 +260,7 @@ public Site getRegisteredThrough() { return registeredThrough; } - public Set getGroups() { + public Set getGroups() { return groups; } @@ -324,7 +324,7 @@ public void setBanned(boolean banned) { this.banned = banned; } - public void setGroups(Set groups) { + public void setGroups(Set groups) { this.groups = groups; } @@ -477,9 +477,7 @@ public boolean hasVerifiedDonor(){ return false; } - Iterator it = this.assignedOrgs.iterator(); - while (it.hasNext()) { - AmpOrganisation currentOrganization = it.next(); + for (AmpOrganisation currentOrganization : this.assignedOrgs) { if (DbUtil.hasDonorRole(currentOrganization.getAmpOrgId())) return true; } diff --git a/amp/WEB-INF/src/org/digijava/module/admin/util/DbUtil.java b/amp/WEB-INF/src/org/digijava/module/admin/util/DbUtil.java index c44cfad2446..fa78a027a6f 100644 --- a/amp/WEB-INF/src/org/digijava/module/admin/util/DbUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/admin/util/DbUtil.java @@ -294,12 +294,13 @@ public static void addUsersToGroup(Long groupId, Long[] userIds) throws AdminExc try { session = PersistenceManager.getSession(); // beginTransaction(); - Group group = (Group) session.load(Group.class, groupId); - for (int i = 0; i < userIds.length; i++) { - User user = (User) session.load(User.class, userIds[i]); + Group group = session.load(Group.class, groupId); + for (Long userId : userIds) { + User user = session.load(User.class, userId); user.getGroups().add(group); + session.save(user); } - // tx.commit(); + session.flush(); } catch (Exception ex) { logger.debug("Unable to add Users to group ", ex); throw new AdminException("Unable to add Users to group ", ex); diff --git a/amp/WEB-INF/src/org/digijava/module/um/form/AddUserForm.java b/amp/WEB-INF/src/org/digijava/module/um/form/AddUserForm.java index f1bea70b033..2339f04e942 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/form/AddUserForm.java +++ b/amp/WEB-INF/src/org/digijava/module/um/form/AddUserForm.java @@ -80,7 +80,7 @@ public class AddUserForm extends ValidatorForm { private Collection navigationLanguages; private Collection truBudgetIntents; private String truBudgetPassword; - private String[] selectedTruBudgetIntents; + private String[] selectedTruBudgetIntents={}; private String selectedLanguage; private String[] contentSelectedLanguages; private String organizationTypeOther; diff --git a/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java b/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java index b2e2d042915..ef10be7c5cb 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java @@ -367,8 +367,8 @@ public static void updateUserMarket(User user) throws public static void updateUser(User user) throws UMException { - Transaction tx = null; - Session session = null; + Transaction tx; + Session session; try { session = PersistenceManager.getRequestDBSession(); tx = session.getTransaction(); From 1c9ace2c6ce6d602cfd52ad00ed1eeccdcf5e12c Mon Sep 17 00:00:00 2001 From: brianbrix Date: Mon, 25 Sep 2023 11:39:07 +0300 Subject: [PATCH 125/307] GGW-93 -set user group --- amp/WEB-INF/src/org/digijava/module/admin/util/DbUtil.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/amp/WEB-INF/src/org/digijava/module/admin/util/DbUtil.java b/amp/WEB-INF/src/org/digijava/module/admin/util/DbUtil.java index fa78a027a6f..44b6bbec79e 100644 --- a/amp/WEB-INF/src/org/digijava/module/admin/util/DbUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/admin/util/DbUtil.java @@ -260,9 +260,7 @@ public static List getGroupUsers(Long id) throws AdminException { try { session = PersistenceManager.getSession(); Group group = (Group) session.load(Group.class, id); - Iterator iter = group.getUsers().iterator(); - while (iter.hasNext()) { - User user = (User) iter.next(); + for (User user : group.getUsers()) { users.add(user); } @@ -281,6 +279,8 @@ public static void removeUserFromGroup(Long groupId, Long userId) throws AdminEx Group group = (Group) session.load(Group.class, groupId); User user = (User) session.load(User.class, userId); user.getGroups().remove(group); + session.save(user); + session.flush(); // tx.commit(); } catch (Exception ex) { logger.debug("Unable to remove User from group ", ex); From f7d297ac84628c95a3e7248a0a191c8654d3df1e Mon Sep 17 00:00:00 2001 From: brianbrix Date: Mon, 25 Sep 2023 11:39:20 +0300 Subject: [PATCH 126/307] GGW-93 -set user group --- amp/WEB-INF/src/org/digijava/module/admin/util/DbUtil.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/amp/WEB-INF/src/org/digijava/module/admin/util/DbUtil.java b/amp/WEB-INF/src/org/digijava/module/admin/util/DbUtil.java index 44b6bbec79e..1f2b848d947 100644 --- a/amp/WEB-INF/src/org/digijava/module/admin/util/DbUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/admin/util/DbUtil.java @@ -276,8 +276,8 @@ public static void removeUserFromGroup(Long groupId, Long userId) throws AdminEx try { session = PersistenceManager.getSession(); // beginTransaction(); - Group group = (Group) session.load(Group.class, groupId); - User user = (User) session.load(User.class, userId); + Group group = session.load(Group.class, groupId); + User user = session.load(User.class, userId); user.getGroups().remove(group); session.save(user); session.flush(); From 26958439f065c897bbcfafc7614273c90a5f8c11 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Tue, 26 Sep 2023 09:37:17 +0300 Subject: [PATCH 127/307] GGW-93 -set user group --- .../org/digijava/module/um/util/DbUtil.java | 71 +++++++++---------- 1 file changed, 35 insertions(+), 36 deletions(-) diff --git a/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java b/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java index 9d1f2e42d77..c8f1e8805ff 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java @@ -56,6 +56,8 @@ import java.net.URISyntaxException; import java.util.*; +import static java.util.Objects.isNull; + public class DbUtil { private static Logger logger = Logger.getLogger(DbUtil.class); @@ -68,16 +70,18 @@ public static long getuserId(String email) throws UMException { getSession(); String queryString = "from " + User.class.getName() + " rs where rs.email = :email"; - Query query = sess.createQuery(queryString); + Query query = sess.createQuery(queryString, User.class); query.setParameter("email", email, StringType.INSTANCE); - Iterator iter = query.iterate(); +// Iterator iter = query.iterate(); + User iterUser = query.stream().findAny().orElse(null); + userId = iterUser.getId(); - while(iter.hasNext()) { - User iterUser = (User) iter.next(); - userId = iterUser.getId().longValue(); - break; - } +// while(iter.hasNext()) { +// User iterUser = (User) iter.next(); +// userId = iterUser.getId().longValue(); +// break; +// } } catch(Exception ex0) { logger.debug("Unable to get user information from database", ex0); @@ -174,21 +178,23 @@ public static boolean ResetPassword(String email, String code, String newPasswor UMException { Transaction tx = null; - Session session = null; + Session session; try { session = org.digijava.kernel.persistence.PersistenceManager. getSession(); //beginTransaction(); String queryString = "from " + User.class.getName() + " rs where rs.email = :email"; - Query query = session.createQuery(queryString); + Query query = session.createQuery(queryString, User.class); query.setParameter("email", email,StringType.INSTANCE); - Iterator iter = query.iterate(); - User iterUser = null; - while(iter.hasNext()) { - iterUser = (User) iter.next(); - break; - } +// Iterator iter = query.iterate(); +// User iterUser = null; + User iterUser = query.stream().findAny().orElse(null); + +// while(iter.hasNext()) { +// iterUser = (User) iter.next(); +// break; +// } if(iterUser == null) { logger.warn("Attempt to reset password for unknown user: " + email); return false; @@ -209,7 +215,7 @@ public static boolean ResetPassword(String email, String code, String newPasswor } iterUser.setPassword(ShaCrypt.crypt(newPassword.trim()).trim()); - iterUser.setSalt(new Long(newPassword.trim().hashCode()).toString()); + iterUser.setSalt(Long.toString(newPassword.trim().hashCode())); session.update(iterUser); session.delete(resetPassword); //tx.commit(); @@ -217,13 +223,6 @@ public static boolean ResetPassword(String email, String code, String newPasswor } catch(Exception ex) { logger.debug("Unable to update user information into database", ex); - if(tx != null) { - try { - tx.rollback(); - } catch(HibernateException ex1) { - logger.warn("rollback() failed ", ex1); - } - } throw new UMException( "Unable to update user information into database", ex); } @@ -243,26 +242,26 @@ public static void updatePassword(String user, String oldPassword, String newPassword) throws UMException { - Session session = null; + Session session; try { session = org.digijava.kernel.persistence.PersistenceManager.getSession(); String queryString = "from " + User.class.getName() + " rs where trim(lower(rs.email)) = :email"; - Query query = session.createQuery(queryString); + Query query = session.createQuery(queryString, User.class); query.setParameter("email", user,StringType.INSTANCE); - Iterator iter = query.iterate(); - User iterUser = null; - while(iter.hasNext()) { - iterUser = (User) iter.next(); +// Iterator iter = query.iterate(); + User iterUser = query.stream().findAny().orElse(null); +// while(iter.hasNext()) { +// iterUser = (User) iter.next(); +// } + if (!isNull(iterUser)) { + iterUser.setPassword(ShaCrypt.crypt(newPassword.trim()).trim()); + iterUser.setSalt(Long.toString(newPassword.trim().hashCode())); + iterUser.updateLastModified(); + session.saveOrUpdate(iterUser); + session.flush(); } -//beginTransaction(); - iterUser.setPassword(ShaCrypt.crypt(newPassword.trim()).trim()); - iterUser.setSalt(new Long(newPassword.trim().hashCode()).toString()); - iterUser.updateLastModified(); - session.save(iterUser); - - //tx.commit(); } catch(Exception ex) { logger.debug("Unable to update user information into database", ex); From e5cfe1dec5be3037d503e370fd6a014fd06a95ed Mon Sep 17 00:00:00 2001 From: brianbrix Date: Tue, 26 Sep 2023 09:44:09 +0300 Subject: [PATCH 128/307] GGW-93 -set user group --- .../util/CategoryManagerUtil.java | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/amp/WEB-INF/src/org/digijava/module/categorymanager/util/CategoryManagerUtil.java b/amp/WEB-INF/src/org/digijava/module/categorymanager/util/CategoryManagerUtil.java index c2f6a47e8be..1b25143b6a3 100644 --- a/amp/WEB-INF/src/org/digijava/module/categorymanager/util/CategoryManagerUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/categorymanager/util/CategoryManagerUtil.java @@ -15,7 +15,9 @@ import org.digijava.module.categorymanager.util.CategoryConstants.HardCodedCategoryValue; import org.hibernate.Session; import org.hibernate.query.Query; +import org.hibernate.type.EntityType; import org.hibernate.type.LongType; +import org.hibernate.type.ObjectType; import org.hibernate.type.StringType; import java.lang.reflect.Field; @@ -749,7 +751,7 @@ public static AmpCategoryValue addValueToCategory(String categoryKey, String val ampCategoryValue.setValue(value); ampCategoryValue.setAmpCategoryClass(ampCategoryClass); ampCategoryValue.setIndex( ampCategoryClass.getPossibleValues().size() ); - + List tempList = new ArrayList(); tempList.addAll(ampCategoryClass.getPossibleValues()); tempList.add( ampCategoryValue ); @@ -783,18 +785,18 @@ public static AmpCategoryValue addValueToCategory(String categoryKey, String val */ public static boolean verifyDeletionProtectionForCategoryValue (String categoryKey, String valueKey ) { Field[] fields = CategoryConstants.class.getDeclaredFields(); - for (int i=0; i< fields.length; i++ ) { - Class fieldClass = fields[i].getType(); - if ( fieldClass.equals( HardCodedCategoryValue.class ) ) { + for (Field field : fields) { + Class fieldClass = field.getType(); + if (fieldClass.equals(HardCodedCategoryValue.class)) { HardCodedCategoryValue proprietyValue; try { - proprietyValue = (HardCodedCategoryValue)fields[i].get(null); + proprietyValue = (HardCodedCategoryValue) field.get(null); } catch (Exception e) { e.printStackTrace(); continue; } - if ( proprietyValue.getCategoryKey().equals(categoryKey) - && proprietyValue.getValueKey().equals(valueKey) + if (proprietyValue.getCategoryKey().equals(categoryKey) + && proprietyValue.getValueKey().equals(valueKey) && proprietyValue.isProtectOnDelete()) { return true; } @@ -821,8 +823,8 @@ public static AmpLinkedCategoriesState getState(AmpCategoryClass mainCategory, A dbSession = PersistenceManager.getRequestDBSession(); queryString = "select c from " + AmpLinkedCategoriesState.class.getName()+ " c where c.mainCategory=:mainCategory and c.linkedCategory=:usedCategory"; qry = dbSession.createQuery(queryString); - qry.setEntity("mainCategory", mainCategory); - qry.setEntity("usedCategory", usedCategory); + qry.setParameter("mainCategory", mainCategory, ObjectType.INSTANCE); + qry.setParameter("usedCategory", usedCategory, ObjectType.INSTANCE); retVal = (AmpLinkedCategoriesState)qry.uniqueResult(); } catch (Exception e) { logger.error("Failed to get state ", e); From fc11f5219b7f8e37efd7601175ef818e3018c1ce Mon Sep 17 00:00:00 2001 From: brianbrix Date: Tue, 26 Sep 2023 09:47:13 +0300 Subject: [PATCH 129/307] GGW-93 -set user group --- .../util/CategoryManagerUtil.java | 73 ++++++++----------- 1 file changed, 29 insertions(+), 44 deletions(-) diff --git a/amp/WEB-INF/src/org/digijava/module/categorymanager/util/CategoryManagerUtil.java b/amp/WEB-INF/src/org/digijava/module/categorymanager/util/CategoryManagerUtil.java index 1b25143b6a3..e280cf9633f 100644 --- a/amp/WEB-INF/src/org/digijava/module/categorymanager/util/CategoryManagerUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/categorymanager/util/CategoryManagerUtil.java @@ -23,10 +23,7 @@ import java.lang.reflect.Field; import java.nio.ByteBuffer; import java.nio.CharBuffer; -import java.nio.charset.CharacterCodingException; -import java.nio.charset.Charset; -import java.nio.charset.CharsetDecoder; -import java.nio.charset.CodingErrorAction; +import java.nio.charset.*; import java.util.*; public class CategoryManagerUtil { @@ -96,11 +93,9 @@ public static AmpCategoryValue getAmpCategoryValueFromCollectionById( Long ampCa logger.info("Couldn't get AmpCategoryValue because one of the parameters is null"); return null; } - Iterator iterator = col.iterator(); - - while ( iterator.hasNext() ) { - AmpCategoryValue val = iterator.next(); - if ( ampCategoryValueId.equals(val.getId()) ) + + for (AmpCategoryValue val : col) { + if (ampCategoryValueId.equals(val.getId())) return val; } return null; @@ -118,10 +113,9 @@ public static AmpCategoryValue getAmpCategoryValueFromList(Long categoryId, Coll logger.info("Couldn't get AmpCategoryValue because one of the parameters is null"); return null; } - Iterator iterator = values.iterator(); - while( iterator.hasNext() ) { - AmpCategoryValue ampCategoryValue = (AmpCategoryValue)iterator.next(); - if ( ampCategoryValue.getAmpCategoryClass().getId().longValue() == categoryId.longValue() ) { + for (Object value : values) { + AmpCategoryValue ampCategoryValue = (AmpCategoryValue) value; + if (ampCategoryValue.getAmpCategoryClass().getId().longValue() == categoryId.longValue()) { return ampCategoryValue; } } @@ -152,24 +146,20 @@ public static AmpCategoryValue getAmpCategoryValueFromList(String categoryKey, S public static List getAmpEventColors() throws NoCategoryClassException{ List eventTypeList = new ArrayList(); - AmpCategoryClass categoryClass = CategoryManagerUtil.loadAmpCategoryClassByKey(CategoryConstants.EVENT_TYPE_KEY); - Iterator categoryClassIter = categoryClass.getPossibleValues().iterator(); - while(categoryClassIter.hasNext()){ + AmpCategoryClass categoryClass = CategoryManagerUtil.loadAmpCategoryClassByKey(CategoryConstants.EVENT_TYPE_KEY); + for (AmpCategoryValue ampCategoryValue : categoryClass.getPossibleValues()) { AmpEventType eventType = new AmpEventType(); - AmpCategoryValue item = (AmpCategoryValue) categoryClassIter.next(); - eventType.setName(item.getValue()); - eventType.setId(item.getId()); - Set usedValues = item.getUsedValues(); - if (usedValues==null || usedValues.size()==0) { - eventType.setColor("grey"); //here select grey color by default if it's not seted on category manager. Thus the event doesn't lose on calendar view. - } else { - Iterator it = usedValues.iterator(); - while (it.hasNext()){ - AmpCategoryValue categoryValueItem = (AmpCategoryValue) it.next(); + eventType.setName(ampCategoryValue.getValue()); + eventType.setId(ampCategoryValue.getId()); + Set usedValues = ampCategoryValue.getUsedValues(); + if (usedValues == null || usedValues.size() == 0) { + eventType.setColor("grey"); //here select grey color by default if it's not seted on category manager. Thus the event doesn't lose on calendar view. + } else { + for (AmpCategoryValue categoryValueItem : usedValues) { eventType.setColor(categoryValueItem.getValue()); } - } - eventTypeList.add(eventType); + } + eventTypeList.add(eventType); } return eventTypeList; @@ -270,8 +260,7 @@ public static AmpCategoryValue getAmpCategoryValueFromDb(String categoryKey, Lon Iterator it=returnCollection.iterator(); if(it.hasNext()) { - AmpCategoryValue x=(AmpCategoryValue)it.next(); - return x; + return (AmpCategoryValue)it.next(); } } return null; @@ -360,10 +349,8 @@ public int compare(AmpCategoryValue o1, AmpCategoryValue o2) { ); if ( unorderedSet != null) { if ( categoryKey != null ) { - Iterator iter = unorderedSet.iterator(); - while ( iter.hasNext() ) { - AmpCategoryValue item = iter.next(); - if ( item.getAmpCategoryClass().getKeyName().equals(categoryKey) ) + for (AmpCategoryValue item : unorderedSet) { + if (item.getAmpCategoryClass().getKeyName().equals(categoryKey)) returnSet.add(item); } } @@ -394,7 +381,7 @@ public static AmpCategoryClass loadAmpCategoryClass(Long categoryId) throws NoCa + AmpCategoryClass.class.getName() + " c where c.id=:id"; qry = dbSession.createQuery(queryString); - qry.setLong("id", categoryId); + qry.setParameter("id", categoryId, LongType.INSTANCE); @@ -474,7 +461,7 @@ public static Collection getAmpCategoryValueCollection(String shouldOrderAlphabetically = ampCategoryClass.getIsOrdered(); } else - shouldOrderAlphabetically = ordered.booleanValue(); + shouldOrderAlphabetically = ordered; List ampCategoryValues = ampCategoryClass.getPossibleValues(); @@ -494,8 +481,8 @@ public static boolean isExitingAmpCategoryValue(String categoryKey, Long id, boo + " a where a.id=:id " + (onlyVisible ? "and (a.deleted=false or a.deleted is null) " : "") + "and a.ampCategoryClass.keyName=:keyName") - .setParameter("id", id) - .setParameter("keyName", categoryKey) + .setParameter("id", id, LongType.INSTANCE) + .setParameter("keyName", categoryKey, StringType.INSTANCE) .uniqueResult(); return count.intValue() == 1; } @@ -612,7 +599,7 @@ public static Collection getAmpCategoryValueCollection(Long ca shouldOrderAlphabetically = ampCategoryClass.getIsOrdered(); } else - shouldOrderAlphabetically = ordered.booleanValue(); + shouldOrderAlphabetically = ordered; List ampCategoryValues = ampCategoryClass.getPossibleValues(); @@ -632,7 +619,7 @@ public static Collection getAmpCategoryValueCollection(Long ca public static String asciiStringFilter (String input) { byte [] bytearray = input.getBytes(); - CharsetDecoder decoder = Charset.forName("US-ASCII").newDecoder(); + CharsetDecoder decoder = StandardCharsets.US_ASCII.newDecoder(); decoder.replaceWith("_"); decoder.onMalformedInput(CodingErrorAction.REPLACE); decoder.onUnmappableCharacter(CodingErrorAction.REPLACE); @@ -647,13 +634,11 @@ public static String asciiStringFilter (String input) { } public static String getTranslationKeyForCategoryName(String classKeyName) { - String translationKey = "cm:category_" + classKeyName + "_name"; - return translationKey; + return "cm:category_" + classKeyName + "_name"; } public static String getTranslationKeyForCategoryDescription(String classKeyName) { - String translationKey = "cm:category_" + classKeyName + "_description"; - return translationKey; + return "cm:category_" + classKeyName + "_description"; } /** From a1a190a391c8722a32efd12891e7ed6a59a0c796 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Tue, 26 Sep 2023 09:49:43 +0300 Subject: [PATCH 130/307] AMP-30723 implement amp TruBudget integration --- .../module/categorymanager/util/CategoryManagerUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/amp/WEB-INF/src/org/digijava/module/categorymanager/util/CategoryManagerUtil.java b/amp/WEB-INF/src/org/digijava/module/categorymanager/util/CategoryManagerUtil.java index e280cf9633f..709879e02c2 100644 --- a/amp/WEB-INF/src/org/digijava/module/categorymanager/util/CategoryManagerUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/categorymanager/util/CategoryManagerUtil.java @@ -27,7 +27,7 @@ import java.util.*; public class CategoryManagerUtil { - private static Logger logger = Logger.getLogger(CategoryManagerUtil.class); + private static final Logger logger = Logger.getLogger(CategoryManagerUtil.class); /** * Looks up the AmpCategoryValue with id = categoryValueId. If not null it adds it to the Set someSet. From af5b7a4c1334a81317ded81a81e564e8c30db329 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Wed, 27 Sep 2023 08:01:42 +0300 Subject: [PATCH 131/307] AMP-30723 implement amp TruBudget integration --- .../components/features/items/AmpGPIItemFeaturePanel.java | 2 -- .../features/items/AmpGPIQuestionItemFeaturePanel.java | 5 ++++- .../tables/AmpComponentsFundingFormTableFeature.java | 3 --- .../amp/visibility/data/FMSettingsMediator.java | 6 +----- .../digijava/kernel/entity/trubudget/TruBudgetIntent.java | 1 - amp/WEB-INF/src/org/digijava/kernel/user/User.java | 6 ++++-- .../src/org/digijava/module/aim/action/RegisterUser.java | 2 +- .../org/digijava/module/aim/auth/AmpPostLoginAction.java | 1 - .../src/org/digijava/module/aim/dbentity/AmpComponent.java | 1 - .../digijava/module/aim/dbentity/AmpComponentFunding.java | 1 - .../src/org/digijava/module/aim/dbentity/AmpGPISurvey.java | 2 -- .../module/categorymanager/util/CategoryManagerUtil.java | 6 ++++-- .../src/org/digijava/module/um/action/RegisterUser.java | 2 +- .../src/org/digijava/module/um/action/UserRegister.java | 5 ++++- .../src/org/digijava/module/um/action/ViewEditUser.java | 3 +-- .../src/org/digijava/module/um/util/GenericWebClient.java | 1 - amp/WEB-INF/src/org/digijava/module/um/util/UmUtil.java | 3 --- 17 files changed, 20 insertions(+), 30 deletions(-) diff --git a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/items/AmpGPIItemFeaturePanel.java b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/items/AmpGPIItemFeaturePanel.java index 951132e1ad2..832caec537e 100644 --- a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/items/AmpGPIItemFeaturePanel.java +++ b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/items/AmpGPIItemFeaturePanel.java @@ -15,11 +15,9 @@ import org.digijava.module.aim.dbentity.AmpActivityVersion; import org.digijava.module.aim.dbentity.AmpGPISurvey; import org.digijava.module.aim.dbentity.AmpGPISurveyIndicator; -import org.digijava.module.aim.dbentity.AmpGPISurveyResponse; import org.digijava.module.aim.util.DbUtil; import java.util.ArrayList; -import java.util.Collections; import java.util.HashSet; import java.util.List; diff --git a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/items/AmpGPIQuestionItemFeaturePanel.java b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/items/AmpGPIQuestionItemFeaturePanel.java index 574ef59ac84..3fd4592562d 100644 --- a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/items/AmpGPIQuestionItemFeaturePanel.java +++ b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/items/AmpGPIQuestionItemFeaturePanel.java @@ -19,7 +19,10 @@ import org.digijava.module.aim.dbentity.AmpGPISurveyQuestion; import org.digijava.module.aim.dbentity.AmpGPISurveyResponse; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Set; public class AmpGPIQuestionItemFeaturePanel extends AmpFeaturePanel { 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 f33238d734a..c0ed7725cdc 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 @@ -12,7 +12,6 @@ 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.AmpNewResourceFieldPanel; import org.dgfoundation.amp.onepager.components.fields.AmpSelectFieldPanel; import org.dgfoundation.amp.onepager.components.fields.AmpTextFieldPanel; import org.dgfoundation.amp.onepager.events.FundingOrgListUpdateEvent; @@ -23,11 +22,9 @@ import org.digijava.module.aim.dbentity.AmpComponent; import org.digijava.module.aim.dbentity.AmpComponentFunding; import org.digijava.module.aim.dbentity.AmpOrganisation; -import org.digijava.module.categorymanager.dbentity.AmpCategoryValue; import org.digijava.module.categorymanager.util.CategoryConstants; import java.util.ArrayList; -import java.util.Iterator; import java.util.List; import java.util.Set; diff --git a/amp/WEB-INF/src/org/dgfoundation/amp/visibility/data/FMSettingsMediator.java b/amp/WEB-INF/src/org/dgfoundation/amp/visibility/data/FMSettingsMediator.java index 713b06ad37a..e4c531ee669 100644 --- a/amp/WEB-INF/src/org/dgfoundation/amp/visibility/data/FMSettingsMediator.java +++ b/amp/WEB-INF/src/org/dgfoundation/amp/visibility/data/FMSettingsMediator.java @@ -6,11 +6,7 @@ import org.apache.log4j.Logger; import org.digijava.module.aim.util.FeaturesUtil; -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; -import java.util.Set; +import java.util.*; /** * Single point of reference for all FM settings groups diff --git a/amp/WEB-INF/src/org/digijava/kernel/entity/trubudget/TruBudgetIntent.java b/amp/WEB-INF/src/org/digijava/kernel/entity/trubudget/TruBudgetIntent.java index 44b8fd4ffd5..6140dd64e80 100644 --- a/amp/WEB-INF/src/org/digijava/kernel/entity/trubudget/TruBudgetIntent.java +++ b/amp/WEB-INF/src/org/digijava/kernel/entity/trubudget/TruBudgetIntent.java @@ -3,7 +3,6 @@ import org.digijava.kernel.user.User; import org.hibernate.annotations.DynamicUpdate; -import javax.persistence.Entity; import javax.persistence.*; import java.io.Serializable; import java.util.Set; diff --git a/amp/WEB-INF/src/org/digijava/kernel/user/User.java b/amp/WEB-INF/src/org/digijava/kernel/user/User.java index 6bb94230550..4e8dea8f7ca 100644 --- a/amp/WEB-INF/src/org/digijava/kernel/user/User.java +++ b/amp/WEB-INF/src/org/digijava/kernel/user/User.java @@ -24,7 +24,6 @@ import org.digijava.kernel.ampapi.endpoints.common.valueproviders.UserValueProvider; import org.digijava.kernel.dbentity.Country; -import org.digijava.kernel.entity.Locale; import org.digijava.kernel.entity.*; import org.digijava.kernel.entity.trubudget.TruBudgetIntent; import org.digijava.kernel.request.Site; @@ -39,7 +38,10 @@ import javax.security.auth.Subject; import java.io.Serializable; import java.sql.Clob; -import java.util.*; +import java.util.Date; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Set; @InterchangeableValue(UserValueProvider.class) public class User diff --git a/amp/WEB-INF/src/org/digijava/module/aim/action/RegisterUser.java b/amp/WEB-INF/src/org/digijava/module/aim/action/RegisterUser.java index cf3c490aa39..307a279a792 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/action/RegisterUser.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/action/RegisterUser.java @@ -9,8 +9,8 @@ import org.apache.struts.action.*; import org.digijava.kernel.Constants; import org.digijava.kernel.entity.Locale; -import org.digijava.kernel.entity.trubudget.TruBudgetIntent; import org.digijava.kernel.entity.UserLangPreferences; +import org.digijava.kernel.entity.trubudget.TruBudgetIntent; import org.digijava.kernel.mail.DgEmailManager; import org.digijava.kernel.request.Site; import org.digijava.kernel.request.SiteDomain; diff --git a/amp/WEB-INF/src/org/digijava/module/aim/auth/AmpPostLoginAction.java b/amp/WEB-INF/src/org/digijava/module/aim/auth/AmpPostLoginAction.java index aca3e5c0a24..eeb2c480524 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/auth/AmpPostLoginAction.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/auth/AmpPostLoginAction.java @@ -15,7 +15,6 @@ import org.digijava.kernel.user.User; import org.digijava.kernel.util.UserUtils; import org.digijava.module.aim.dbentity.AmpGlobalSettings; -import org.digijava.module.trubudget.util.ProjectUtil; import org.digijava.module.um.model.TruLoginRequest; import org.digijava.module.um.model.TruLoginResponse; import org.digijava.module.um.util.UmUtil; diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponent.java b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponent.java index 0154ac85b74..a31cd8cca78 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponent.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponent.java @@ -16,7 +16,6 @@ import org.digijava.module.aim.util.Identifiable; import org.digijava.module.aim.util.Output; -import javax.persistence.ElementCollection; import java.io.Serializable; import java.sql.Timestamp; import java.util.*; diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponentFunding.java b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponentFunding.java index 798dfcfd31f..9cc968aec4d 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponentFunding.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponentFunding.java @@ -18,7 +18,6 @@ import java.io.Serializable; import java.util.Date; -import java.util.Set; import static org.digijava.module.aim.annotations.interchange.ActivityFieldsConstants.*; diff --git a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.java b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.java index 6f2dbf1151a..47589669351 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpGPISurvey.java @@ -1,8 +1,6 @@ package org.digijava.module.aim.dbentity; -import org.digijava.kernel.persistence.PersistenceManager; import org.digijava.module.aim.util.Output; -import org.hibernate.Session; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/amp/WEB-INF/src/org/digijava/module/categorymanager/util/CategoryManagerUtil.java b/amp/WEB-INF/src/org/digijava/module/categorymanager/util/CategoryManagerUtil.java index 709879e02c2..21acfa2782c 100644 --- a/amp/WEB-INF/src/org/digijava/module/categorymanager/util/CategoryManagerUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/categorymanager/util/CategoryManagerUtil.java @@ -15,7 +15,6 @@ import org.digijava.module.categorymanager.util.CategoryConstants.HardCodedCategoryValue; import org.hibernate.Session; import org.hibernate.query.Query; -import org.hibernate.type.EntityType; import org.hibernate.type.LongType; import org.hibernate.type.ObjectType; import org.hibernate.type.StringType; @@ -23,7 +22,10 @@ import java.lang.reflect.Field; import java.nio.ByteBuffer; import java.nio.CharBuffer; -import java.nio.charset.*; +import java.nio.charset.CharacterCodingException; +import java.nio.charset.CharsetDecoder; +import java.nio.charset.CodingErrorAction; +import java.nio.charset.StandardCharsets; import java.util.*; public class CategoryManagerUtil { diff --git a/amp/WEB-INF/src/org/digijava/module/um/action/RegisterUser.java b/amp/WEB-INF/src/org/digijava/module/um/action/RegisterUser.java index 445898af2c3..2bb7737bce7 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/action/RegisterUser.java +++ b/amp/WEB-INF/src/org/digijava/module/um/action/RegisterUser.java @@ -12,8 +12,8 @@ import org.apache.struts.action.ActionMapping; import org.digijava.kernel.Constants; import org.digijava.kernel.entity.Locale; -import org.digijava.kernel.entity.trubudget.TruBudgetIntent; import org.digijava.kernel.entity.UserLangPreferences; +import org.digijava.kernel.entity.trubudget.TruBudgetIntent; import org.digijava.kernel.mail.DgEmailManager; import org.digijava.kernel.request.Site; import org.digijava.kernel.request.SiteDomain; diff --git a/amp/WEB-INF/src/org/digijava/module/um/action/UserRegister.java b/amp/WEB-INF/src/org/digijava/module/um/action/UserRegister.java index 5b4bcf96270..f8b93519d34 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/action/UserRegister.java +++ b/amp/WEB-INF/src/org/digijava/module/um/action/UserRegister.java @@ -29,7 +29,10 @@ import org.apache.struts.action.ActionMapping; import org.digijava.kernel.Constants; import org.digijava.kernel.dbentity.Country; -import org.digijava.kernel.entity.*; +import org.digijava.kernel.entity.Locale; +import org.digijava.kernel.entity.OrganizationType; +import org.digijava.kernel.entity.UserLangPreferences; +import org.digijava.kernel.entity.UserPreferences; import org.digijava.kernel.entity.trubudget.TruBudgetIntent; import org.digijava.kernel.request.SiteDomain; import org.digijava.kernel.user.User; diff --git a/amp/WEB-INF/src/org/digijava/module/um/action/ViewEditUser.java b/amp/WEB-INF/src/org/digijava/module/um/action/ViewEditUser.java index 512711c02e4..df3e56d3ade 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/action/ViewEditUser.java +++ b/amp/WEB-INF/src/org/digijava/module/um/action/ViewEditUser.java @@ -3,8 +3,8 @@ import org.apache.struts.action.*; import org.digijava.kernel.Constants; import org.digijava.kernel.entity.Locale; -import org.digijava.kernel.entity.trubudget.TruBudgetIntent; import org.digijava.kernel.entity.UserLangPreferences; +import org.digijava.kernel.entity.trubudget.TruBudgetIntent; import org.digijava.kernel.exception.DgException; import org.digijava.kernel.request.Site; import org.digijava.kernel.request.SiteDomain; @@ -33,7 +33,6 @@ import java.util.stream.Collectors; import static org.digijava.module.um.util.DbUtil.*; -import static org.digijava.module.um.util.DbUtil.getSettingValue; public class ViewEditUser extends Action { diff --git a/amp/WEB-INF/src/org/digijava/module/um/util/GenericWebClient.java b/amp/WEB-INF/src/org/digijava/module/um/util/GenericWebClient.java index 6289ec70d03..2eb88b66012 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/util/GenericWebClient.java +++ b/amp/WEB-INF/src/org/digijava/module/um/util/GenericWebClient.java @@ -4,7 +4,6 @@ import io.netty.channel.ChannelOption; import io.netty.handler.timeout.ReadTimeoutHandler; import io.netty.handler.timeout.WriteTimeoutHandler; -import io.netty.resolver.DefaultAddressResolverGroup; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.http.HttpStatus; diff --git a/amp/WEB-INF/src/org/digijava/module/um/util/UmUtil.java b/amp/WEB-INF/src/org/digijava/module/um/util/UmUtil.java index 24fc1c30ddc..5d3851ec2ef 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/util/UmUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/um/util/UmUtil.java @@ -37,8 +37,6 @@ import org.digijava.module.aim.util.TeamUtil; import org.digijava.module.um.dbentity.SuspendLogin; import org.digijava.module.um.exception.UMException; -import sun.misc.BASE64Decoder; -import sun.misc.BASE64Encoder; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; @@ -46,7 +44,6 @@ import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import javax.servlet.http.HttpServletRequest; -import java.io.IOException; import java.math.BigInteger; import java.nio.charset.StandardCharsets; import java.security.MessageDigest; From 7d5b9c9c2affda0f525d3bf1e47d0926fdc5e06e Mon Sep 17 00:00:00 2001 From: brianbrix Date: Wed, 27 Sep 2023 08:42:45 +0300 Subject: [PATCH 132/307] AMP-30723 implement amp TruBudget integration --- .../src/org/digijava/module/aim/action/RegisterUser.java | 6 +++++- .../module/aim/startup/AmpBackgroundActivitiesUtil.java | 4 ++++ .../src/org/digijava/module/um/action/RegisterUser.java | 6 +++++- .../src/org/digijava/module/um/action/UserRegister.java | 6 +++++- .../src/org/digijava/module/um/action/ViewEditUser.java | 5 ++++- 5 files changed, 23 insertions(+), 4 deletions(-) diff --git a/amp/WEB-INF/src/org/digijava/module/aim/action/RegisterUser.java b/amp/WEB-INF/src/org/digijava/module/aim/action/RegisterUser.java index 307a279a792..45812182431 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/action/RegisterUser.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/action/RegisterUser.java @@ -29,6 +29,7 @@ import org.digijava.module.um.util.DbUtil; import org.digijava.module.um.util.UmUtil; +import java.util.ArrayList; import java.util.HashSet; import java.util.List; @@ -58,7 +59,10 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, String encryptedTruPassword = UmUtil.encrypt(userRegisterForm.getTruBudgetPassword(),keyGen); user.setTruBudgetPassword(encryptedTruPassword); String[] intents = userRegisterForm.getSelectedTruBudgetIntents(); - List truBudgetIntents = getTruBudgetIntentsByName(intents); + List truBudgetIntents = new ArrayList<>(); + if (intents!=null) { + truBudgetIntents= getTruBudgetIntentsByName(intents); + } logger.info("Intents: "+ truBudgetIntents); // user.getTruBudgetIntents().addAll(new HashSet<>(truBudgetIntents)); diff --git a/amp/WEB-INF/src/org/digijava/module/aim/startup/AmpBackgroundActivitiesUtil.java b/amp/WEB-INF/src/org/digijava/module/aim/startup/AmpBackgroundActivitiesUtil.java index 480f9669065..9495d3a59ef 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/startup/AmpBackgroundActivitiesUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/startup/AmpBackgroundActivitiesUtil.java @@ -5,6 +5,7 @@ import org.digijava.kernel.entity.UserLangPreferences; import org.digijava.kernel.exception.DgException; import org.digijava.kernel.request.Site; +import org.digijava.kernel.user.Group; import org.digijava.kernel.user.User; import org.digijava.kernel.util.DgUtil; import org.digijava.kernel.util.SiteUtils; @@ -156,9 +157,12 @@ protected static void createAmpValidatorUser(String userEmail, String firstNames org.digijava.kernel.user.Group memberGroup = DbUtil.getGroup(org.digijava.kernel.user.Group.MEMBERS, site.getId()); + org.digijava.kernel.user.Group translatorGroup = DbUtil.getGroup(Group.TRANSLATORS, + site.getId()); Long[] uid = new Long[1]; uid[0] = user.getId(); org.digijava.module.admin.util.DbUtil.addUsersToGroup(memberGroup.getId(), uid); + org.digijava.module.admin.util.DbUtil.addUsersToGroup(translatorGroup.getId(), uid); //save amp user extensions; AmpUserExtensionPK extPK = new AmpUserExtensionPK(user); diff --git a/amp/WEB-INF/src/org/digijava/module/um/action/RegisterUser.java b/amp/WEB-INF/src/org/digijava/module/um/action/RegisterUser.java index 2bb7737bce7..6d3456498b6 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/action/RegisterUser.java +++ b/amp/WEB-INF/src/org/digijava/module/um/action/RegisterUser.java @@ -32,6 +32,7 @@ import org.digijava.module.um.util.UmUtil; import javax.servlet.http.HttpSession; +import java.util.ArrayList; import java.util.HashSet; import java.util.List; @@ -73,7 +74,10 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, String encryptedTruPassword = UmUtil.encrypt(userRegisterForm.getTruBudgetPassword(),keyGen); user.setTruBudgetPassword(encryptedTruPassword); String[] intents = userRegisterForm.getSelectedTruBudgetIntents(); - List truBudgetIntents = getTruBudgetIntentsByName(intents); + List truBudgetIntents = new ArrayList<>(); + if (intents!=null) { + truBudgetIntents= getTruBudgetIntentsByName(intents); + } logger.info("Intents: "+ truBudgetIntents); // user.getTruBudgetIntents().addAll(new HashSet<>(truBudgetIntents)); diff --git a/amp/WEB-INF/src/org/digijava/module/um/action/UserRegister.java b/amp/WEB-INF/src/org/digijava/module/um/action/UserRegister.java index f8b93519d34..f31f1c186cb 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/action/UserRegister.java +++ b/amp/WEB-INF/src/org/digijava/module/um/action/UserRegister.java @@ -43,6 +43,7 @@ import org.digijava.module.um.util.DbUtil; import org.digijava.module.um.util.UmUtil; +import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -103,7 +104,10 @@ public ActionForward execute(ActionMapping mapping, String encryptedTruPassword = UmUtil.encrypt(userRegisterForm.getTruBudgetPassword(),keyGen); user.setTruBudgetPassword(encryptedTruPassword); String[] intents = userRegisterForm.getSelectedTruBudgetIntents(); - List truBudgetIntents = getTruBudgetIntentsByName(intents); + List truBudgetIntents = new ArrayList<>(); + if (intents!=null) { + truBudgetIntents= getTruBudgetIntentsByName(intents); + } logger.info("Intents: "+ truBudgetIntents); user.setInitialTruBudgetIntents(new HashSet<>(user.getTruBudgetIntents())); user.setTruBudgetIntents(new HashSet<>(truBudgetIntents)); diff --git a/amp/WEB-INF/src/org/digijava/module/um/action/ViewEditUser.java b/amp/WEB-INF/src/org/digijava/module/um/action/ViewEditUser.java index df3e56d3ade..32eefe59d08 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/action/ViewEditUser.java +++ b/amp/WEB-INF/src/org/digijava/module/um/action/ViewEditUser.java @@ -315,7 +315,10 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServlet } String[] intents = uForm.getSelectedTruBudgetIntents(); - List truBudgetIntents = getTruBudgetIntentsByName(intents); + List truBudgetIntents = new ArrayList<>(); + if (intents!=null) { + truBudgetIntents= getTruBudgetIntentsByName(intents); + } // TODO: 8/28/23 add for trubudget request // user.getTruBudgetIntents().addAll(new HashSet<>(truBudgetIntents)); From ccf1c8e6c82c7da77e8dfd1b7ef8b422db2d3b97 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Wed, 27 Sep 2023 08:56:01 +0300 Subject: [PATCH 133/307] AMP-30723 implement amp TruBudget integration --- amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java b/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java index c8f1e8805ff..f3db740cc94 100644 --- a/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/um/util/DbUtil.java @@ -416,7 +416,8 @@ public static void updateUser(User user) throws user1.setDisplayName(user.getFirstNames()+" "+user.getLastName()); // TODO: 8/28/23 if you are editing a user for the first time with Trubudget integrated. their password will be the email // TODO: 8/28/23 this can be changed later in Trubudget - user1.setPassword(UmUtil.decrypt(user.getTruBudgetPassword(),user.getTruBudgetKeyGen())); + String pass = UmUtil.decrypt(user.getTruBudgetPassword(),user.getTruBudgetKeyGen()); + user1.setPassword(pass); user1.setId(user.getEmail().split("@")[0]);// TODO: 8/28/23 use username in future data.setUser(user1); userData.setData(data); From 8b631c68137a5b3747100fcc320affa11287be84 Mon Sep 17 00:00:00 2001 From: brianbrix Date: Thu, 28 Sep 2023 08:58:49 +0300 Subject: [PATCH 134/307] AMP-30723 implement amp TruBudget integration --- .../src/org/digijava/kernel/user/Group.java | 2 +- .../module/admin/action/SearchSite.java | 11 ++-- .../digijava/module/admin/util/DbUtil.java | 50 ++++++++++--------- .../module/trubudget/util/ProjectUtil.java | 2 +- 4 files changed, 33 insertions(+), 32 deletions(-) diff --git a/amp/WEB-INF/src/org/digijava/kernel/user/Group.java b/amp/WEB-INF/src/org/digijava/kernel/user/Group.java index 524f1cbdc18..8bb6f9e40c3 100644 --- a/amp/WEB-INF/src/org/digijava/kernel/user/Group.java +++ b/amp/WEB-INF/src/org/digijava/kernel/user/Group.java @@ -113,7 +113,7 @@ public void setSite(Site site) { * @deprecated this method is subject of remove */ public Set getPermissions() { - return new HashSet(); + return new HashSet<>(); } /** diff --git a/amp/WEB-INF/src/org/digijava/module/admin/action/SearchSite.java b/amp/WEB-INF/src/org/digijava/module/admin/action/SearchSite.java index 01340de860a..286683e3049 100644 --- a/amp/WEB-INF/src/org/digijava/module/admin/action/SearchSite.java +++ b/amp/WEB-INF/src/org/digijava/module/admin/action/SearchSite.java @@ -54,19 +54,18 @@ public ActionForward execute(ActionMapping mapping, siteList = DbUtil.searchSite(siteForm.getSiteKey().trim()); - ListIterator iterator = siteList.listIterator(); - while (iterator.hasNext()) { - Site currentSite = (Site) iterator.next(); + for (Object o : siteList) { + Site currentSite = (Site) o; String adminLink; boolean delete; boolean permitted = DgSecurityManager.permitted(RequestUtils. - getSubject(request), currentSite, - ResourcePermission.INT_ADMIN); + getSubject(request), currentSite, + ResourcePermission.INT_ADMIN); if (permitted) { - adminLink = DgUtil.getSiteUrl(currentSite,request)+"/admin"; + adminLink = DgUtil.getSiteUrl(currentSite, request) + "/admin"; delete = true; } else { adminLink = null; diff --git a/amp/WEB-INF/src/org/digijava/module/admin/util/DbUtil.java b/amp/WEB-INF/src/org/digijava/module/admin/util/DbUtil.java index cf180fae9ba..c5f4912a057 100644 --- a/amp/WEB-INF/src/org/digijava/module/admin/util/DbUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/admin/util/DbUtil.java @@ -40,6 +40,7 @@ import org.hibernate.Transaction; import org.hibernate.query.Query; import org.hibernate.type.BooleanType; +import org.hibernate.type.IntegerType; import org.hibernate.type.LongType; import org.hibernate.type.StringType; @@ -320,13 +321,13 @@ public static List searchSite(String siteKey) throws AdminException { siteKey = siteKey.toLowerCase(); StringTokenizer st = new StringTokenizer(siteKey); - String domainUrl = new String(""); + StringBuilder domainUrl = new StringBuilder(); while (st.hasMoreTokens()) { - domainUrl += st.nextToken(); + domainUrl.append(st.nextToken()); } siteKey = "%" + siteKey + "%"; - domainUrl = "%" + domainUrl + "%"; + domainUrl = new StringBuilder("%" + domainUrl + "%"); String queryString = "select distinct s from " + SiteDomain.class.getName() + " d, " + Site.class.getName() + " s where (d.site.id = s.id) " @@ -335,7 +336,7 @@ public static List searchSite(String siteKey) throws AdminException { + " or lower(d.siteDbDomain || d.sitePath) like :domainUrl)"; Query query = session.createQuery(queryString); query.setParameter("siteKey", siteKey,StringType.INSTANCE); - query.setParameter("domainUrl", domainUrl,StringType.INSTANCE); + query.setParameter("domainUrl", domainUrl.toString(),StringType.INSTANCE); Iterator iterator = query.iterate(); @@ -356,7 +357,7 @@ public static void deleteSite(Long id) throws AdminException { Session session = null; Transaction tx = null; - Site site = null; + Site site; try { session = PersistenceManager.getSession(); @@ -370,9 +371,8 @@ public static void deleteSite(Long id) throws AdminException { while (iterator.hasNext()) { Group item = (Group) iterator.next(); if (item.getPermissions() != null) { - Iterator iter = item.getPermissions().iterator(); - while (iter.hasNext()) { - GroupPermission gp = (GroupPermission) iter.next(); + for (Object o : item.getPermissions()) { + GroupPermission gp = (GroupPermission) o; session.delete(gp); } } @@ -434,6 +434,7 @@ public static Site getSite(String domain, String path) throws AdminException { Query query = session.createQuery(queryString); query.setParameter("siteDomain", domain,StringType.INSTANCE); iter = query.iterate(); + site = (Site) query.stream().findAny().orElse(null); } else { String queryString = "select sd.site from " + SiteDomain.class.getName() + " sd where sd.siteDbDomain=:siteDomain and sd.sitePath=:sitePath"; @@ -441,12 +442,14 @@ public static Site getSite(String domain, String path) throws AdminException { query.setParameter("siteDomain", domain,StringType.INSTANCE); query.setParameter("sitePath", path,StringType.INSTANCE); - iter = query.iterate(); - } - while (iter.hasNext()) { - site = (Site) iter.next(); - break; +// iter = query.iterate(); + site = (Site) query.stream().findAny().orElse(null); + } +// while (iter.hasNext()) { +// site = (Site) iter.next(); +// break; +// } } catch (Exception ex) { logger.debug("Unable to get site from database ", ex); throw new AdminException("Unable to get site from database ", ex); @@ -473,8 +476,8 @@ public static List getReferencedInstances(Long siteId) throws Ad String queryString = " from " + ModuleInstance.class.getName() + " m where m.site.id != :siteId and m.realInstance is not null" + " and m.realInstance.site.id = :siteId " + " order by m.site.name, m.moduleName, m.instanceName"; - Query query = PersistenceManager.getSession().createQuery(queryString); - query.setLong("siteId", siteId); + Query query = PersistenceManager.getSession().createQuery(queryString, ModuleInstance.class); + query.setParameter("siteId", siteId, LongType.INSTANCE); return query.list(); } catch (Exception ex) { logger.debug("Unable to get Referenced Instances from database ", ex); @@ -571,9 +574,8 @@ public static List getReferencedGroups(Long siteId) throws AdminException { boolean passed = false; Site site = (Site) session.load(Site.class, siteId); - Iterator iter = site.getModuleInstances().iterator(); - while (iter.hasNext()) { - ModuleInstance item = (ModuleInstance) iter.next(); + for (Object o : site.getModuleInstances()) { + ModuleInstance item = (ModuleInstance) o; if (item.getRealInstance() == null) { if (passed) { buff.append(","); @@ -589,8 +591,8 @@ public static List getReferencedGroups(Long siteId) throws AdminException { + " p where p.group.site.id != :siteId and p.permissionType = :permissionType " + " and p.targetName in (" + buff.toString() + ")"; Query query = session.createQuery(queryString); - query.setLong("siteId", siteId); - query.setInteger("permissionType", new Integer(GroupPermission.MODULE_INSTANCE_PERMISSION)); + query.setParameter("siteId", siteId, LongType.INSTANCE); + query.setParameter("permissionType", GroupPermission.MODULE_INSTANCE_PERMISSION, IntegerType.INSTANCE); groupList = query.list(); } @@ -657,8 +659,8 @@ private static List getInheritedPermissions(Long groupId, Session session) throw public static List getLocales() throws AdminException { - Session session = null; - List locales = null; + Session session; + List locales; try { session = PersistenceManager.getSession(); @@ -676,7 +678,7 @@ public static void updateLocale(Locale locale) throws AdminException { try { session = PersistenceManager.getSession(); - Locale oldLoc = (Locale) session.get(Locale.class, locale.getCode()); + Locale oldLoc = session.get(Locale.class, locale.getCode()); oldLoc.setAvailable(locale.isAvailable()); oldLoc.setLeftToRight(locale.getLeftToRight()); @@ -778,7 +780,7 @@ public static List getPossibleValues(String tableName) { if (tableName == null || tableName.length() == 0) return ret; - List ls = PersistenceManager.getSession().createNativeQuery("select id, value from " + tableName).list(); + List ls = PersistenceManager.getRequestDBSession().createNativeQuery("select id, value from " + tableName).list(); for (Object[] obj : ls) { KeyValue keyValue = new KeyValue(PersistenceManager.getString(obj[0]), PersistenceManager.getString(obj[1])); diff --git a/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java b/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java index b6d4c9a0825..77284168f64 100644 --- a/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/trubudget/util/ProjectUtil.java @@ -120,7 +120,7 @@ public static void createProject(AmpActivityVersion ampActivityVersion) throws U } ); - createUpdateSubProjects(ampActivityVersion, project.getId(),settings); + createUpdateSubProjects(ampActivityVersion, project.getId(),settings); TruBudgetActivity truBudgetActivity = new TruBudgetActivity(); truBudgetActivity.setAmpActivityId(ampActivityVersion.getAmpActivityId()); truBudgetActivity.setTruBudgetId(project.getId()); From 9630e14d01cbe34345c5c520967ff0101135520b Mon Sep 17 00:00:00 2001 From: brianbrix Date: Thu, 28 Sep 2023 08:59:29 +0300 Subject: [PATCH 135/307] AMP-30723 implement amp TruBudget integration --- amp/WEB-INF/src/org/digijava/module/admin/util/DbUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/amp/WEB-INF/src/org/digijava/module/admin/util/DbUtil.java b/amp/WEB-INF/src/org/digijava/module/admin/util/DbUtil.java index c5f4912a057..1d305a3af24 100644 --- a/amp/WEB-INF/src/org/digijava/module/admin/util/DbUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/admin/util/DbUtil.java @@ -48,7 +48,7 @@ public class DbUtil { - private static Logger logger = Logger.getLogger(DbUtil.class); + private static final Logger logger = Logger.getLogger(DbUtil.class); public static List getAvailableLanguages() throws AdminException { From b56f02e19851b5f6b998460533f7c4ce8d4d64eb Mon Sep 17 00:00:00 2001 From: brianbrix Date: Thu, 28 Sep 2023 09:20:06 +0300 Subject: [PATCH 136/307] AMP-30723 implement amp TruBudget integration --- amp/WEB-INF/src/org/digijava/module/aim/util/DbUtil.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/amp/WEB-INF/src/org/digijava/module/aim/util/DbUtil.java b/amp/WEB-INF/src/org/digijava/module/aim/util/DbUtil.java index 2b9c8117520..2ce22929a08 100644 --- a/amp/WEB-INF/src/org/digijava/module/aim/util/DbUtil.java +++ b/amp/WEB-INF/src/org/digijava/module/aim/util/DbUtil.java @@ -716,11 +716,9 @@ public static Country getDgCountry(String iso) { try { session = PersistenceManager.getRequestDBSession(); String queryString = "select c from " + Country.class.getName() + " c " + "where (c.iso=:iso)"; - Query qry = session.createQuery(queryString); + Query qry = session.createQuery(queryString,Country.class); qry.setParameter("iso", iso, StringType.INSTANCE); - for (Object o : qry.list()) { - country = (Country) o; - } + country= qry.stream().findAny().orElse(null); } catch (Exception e) { logger.error("Exception from getDgCountry()", e); @@ -741,7 +739,7 @@ public static Collection getFiscalCalOrgs(Long fiscalCalId) { qry = sess.createQuery(queryString); qry.setParameter("ampFisCalId", fiscalCalId, LongType.INSTANCE); Iterator itr = qry.list().iterator(); - col = new ArrayList(); + col = new ArrayList<>(); while (itr.hasNext()) { col.add(itr.next()); } From 6f2e9d6c3925748ad4b17090693b770d5cf0027b Mon Sep 17 00:00:00 2001 From: brianbrix Date: Sun, 1 Oct 2023 14:22:06 +0300 Subject: [PATCH 137/307] AMP-30723 implement amp TruBudget integration --- .../amp/onepager/OnePagerConst.java | 7 +- ...ComponentFundingResourcesTableFeature.html | 38 ++ ...ComponentFundingResourcesTableFeature.java | 274 +++++++++++++ .../AmpComponentsFundingFormTableFeature.html | 2 + .../AmpComponentsFundingFormTableFeature.java | 18 +- .../tables/AmpResourcesFormTableFeature.java | 5 +- ...ComponentFundingNewResourceFieldPanel.html | 61 +++ ...ComponentFundingNewResourceFieldPanel.java | 371 ++++++++++++++++++ .../TemporaryComponentFundingDocument.java | 76 ++++ .../module/aim/action/ViewRelatedLinks.java | 2 +- .../interchange/ActivityFieldsConstants.java | 1 + .../module/aim/dbentity/AmpComponent.java | 4 + .../aim/dbentity/AmpComponentFunding.hbm.xml | 6 + .../aim/dbentity/AmpComponentFunding.java | 14 + .../AmpComponentFundingDocument.hbm.xml | 17 + .../dbentity/AmpComponentFundingDocument.java | 114 ++++++ .../util/CategoryConstants.java | 1 + amp/repository/digi-common.xml | 1 + 18 files changed, 1000 insertions(+), 12 deletions(-) create mode 100644 amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/tables/AmpComponentFundingResourcesTableFeature.html create mode 100644 amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/tables/AmpComponentFundingResourcesTableFeature.java create mode 100644 amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/fields/AmpComponentFundingNewResourceFieldPanel.html create mode 100644 amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/fields/AmpComponentFundingNewResourceFieldPanel.java create mode 100644 amp/WEB-INF/src/org/dgfoundation/amp/onepager/helper/TemporaryComponentFundingDocument.java create mode 100644 amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponentFundingDocument.hbm.xml create mode 100644 amp/WEB-INF/src/org/digijava/module/aim/dbentity/AmpComponentFundingDocument.java diff --git a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/OnePagerConst.java b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/OnePagerConst.java index 57f4a3de2e3..1a46ad0c623 100644 --- a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/OnePagerConst.java +++ b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/OnePagerConst.java @@ -5,10 +5,7 @@ package org.dgfoundation.amp.onepager; import org.apache.wicket.MetaDataKey; -import org.dgfoundation.amp.onepager.helper.EditorStore; -import org.dgfoundation.amp.onepager.helper.ResourceTranslationStore; -import org.dgfoundation.amp.onepager.helper.TemporaryActivityDocument; -import org.dgfoundation.amp.onepager.helper.TemporaryGPINiDocument; +import org.dgfoundation.amp.onepager.helper.*; import org.digijava.kernel.startup.AmpSessionListener; import org.digijava.module.aim.dbentity.*; @@ -34,7 +31,9 @@ public final class OnePagerConst { public static final MetaDataKey> RESOURCES_NEW_ITEMS = new MetaDataKey>(){}; + public static final MetaDataKey> COMPONENT_FUNDING_NEW_ITEMS = new MetaDataKey>(){}; public static final MetaDataKey> RESOURCES_DELETED_ITEMS = new MetaDataKey>(){}; + public static final MetaDataKey> COMPONENT_FUNDING_DELETED_ITEMS = new MetaDataKey>(){}; public static final MetaDataKey> RESOURCES_EXISTING_ITEM_TITLES = new MetaDataKey>(){}; public static final MetaDataKey> RESOURCES_TRANSLATIONS = new MetaDataKey>(){}; diff --git a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/tables/AmpComponentFundingResourcesTableFeature.html b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/tables/AmpComponentFundingResourcesTableFeature.html new file mode 100644 index 00000000000..afd820daca0 --- /dev/null +++ b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/tables/AmpComponentFundingResourcesTableFeature.html @@ -0,0 +1,38 @@ + + + Title + Resource Name + Date + Year + Size + + +   + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/tables/AmpComponentFundingResourcesTableFeature.java b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/tables/AmpComponentFundingResourcesTableFeature.java new file mode 100644 index 00000000000..6c1cd40a2a5 --- /dev/null +++ b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/features/tables/AmpComponentFundingResourcesTableFeature.java @@ -0,0 +1,274 @@ +package org.dgfoundation.amp.onepager.components.features.tables; + + +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.markup.html.list.ListItem; +import org.apache.wicket.markup.html.list.ListView; +import org.apache.wicket.model.AbstractReadOnlyModel; +import org.apache.wicket.model.IModel; +import org.apache.wicket.model.Model; +import org.apache.wicket.model.PropertyModel; +import org.dgfoundation.amp.onepager.OnePagerConst; +import org.dgfoundation.amp.onepager.components.fields.AmpDeleteLinkField; +import org.dgfoundation.amp.onepager.components.fields.AmpLabelFieldPanel; +import org.dgfoundation.amp.onepager.components.fields.AmpTextFieldPanel; +import org.dgfoundation.amp.onepager.helper.DownloadResourceStream; +import org.dgfoundation.amp.onepager.helper.TemporaryComponentFundingDocument; +import org.dgfoundation.amp.onepager.helper.TemporaryDocument; +import org.dgfoundation.amp.onepager.models.PersistentObjectModel; +import org.dgfoundation.amp.onepager.models.ResourceTranslationModel; +import org.dgfoundation.amp.onepager.util.AmpFMTypes; +import org.dgfoundation.amp.onepager.util.SessionUtil; +import org.digijava.module.aim.dbentity.AmpComponentFundingDocument; +import org.digijava.module.aim.dbentity.AmpComponentFunding; +import org.digijava.module.aim.helper.Constants; +import org.digijava.module.aim.util.FeaturesUtil; +import org.digijava.module.contentrepository.helper.NodeWrapper; +import org.digijava.module.contentrepository.util.DocumentManagerUtil; +import org.digijava.module.translation.util.ContentTranslationUtil; + +import javax.jcr.Node; +import java.text.SimpleDateFormat; +import java.util.*; + +/** + * @author aartimon@dginternational.org + * @since Apr 13, 2011 + */ +public class AmpComponentFundingResourcesTableFeature extends AmpFormTableFeaturePanel { + + boolean refreshExistingDocs = false; + + + /** + * @param id + * @param fmName + * @param am + * @throws Exception + */ + public AmpComponentFundingResourcesTableFeature(String id, String fmName, + final IModel am) throws Exception { + super(id, am, fmName); + super.setTitleHeaderColSpan(10); + + + final IModel> setModel = new PropertyModel>(am, "componentFundingDocuments"); + + if (am.getObject().getComponentFundingDocuments() == null) + am.getObject().setComponentFundingDocuments(new HashSet()); + + IModel> listModel = new AbstractReadOnlyModel>() { + + private transient List existingTmpDocs = getExistingObject(); + + private List getExistingObject() { + Iterator it = setModel.getObject().iterator(); + List ret = new ArrayList(); + HashSet existingDocTitles = new HashSet(); + + while (it.hasNext()) { + AmpComponentFundingDocument d = it.next(); + Node node = DocumentManagerUtil.getWriteNode(d.getUuid(), SessionUtil.getCurrentServletRequest()); + NodeWrapper nw = new NodeWrapper(node); + + if (node == null || nw == null) + continue; + + /** + * Code to add TempDoc to list + */ + TemporaryComponentFundingDocument td = new TemporaryComponentFundingDocument(); + td.setExisting(true); + td.setExistingDocument(d); + td.setDate(nw.getCalendarDate()); + td.setDescription(nw.getDescription()); + td.setNote(nw.getNotes()); + td.setTitle(nw.getTitle()); +// td.setType(CategoryManagerUtil.getAmpCategoryValueFromDb(nw.getCmDocTypeId())); + td.setWebLink(nw.getWebLink()); + td.setYear(nw.getYearOfPublication()); + td.setFileSize(nw.getFileSizeInMegabytes()); + td.setFileName(nw.getName()); +// td.setLabels(nw.getLabels()); + td.setContentType(nw.getContentType()); + + ret.add(td); + + // Existing doc titles should be populated only when multilingual is enabled + if (ContentTranslationUtil.multilingualIsEnabled()) { + TemporaryComponentFundingDocument titleHolder = new TemporaryComponentFundingDocument(); + titleHolder.setTitle(td.getTitle()); + titleHolder.setExistingDocument(d); + existingDocTitles.add(titleHolder); + existingDocTitles.add(td); + } + } + + getSession().setMetaData(OnePagerConst.RESOURCES_EXISTING_ITEM_TITLES, existingDocTitles); + refreshExistingDocs = false; + return ret; + } + + @Override + public List getObject() { + HashSet newItems = getSession().getMetaData(OnePagerConst.COMPONENT_FUNDING_NEW_ITEMS); + if (newItems == null) + newItems = new HashSet(); + HashSet delItems = getSession().getMetaData(OnePagerConst.COMPONENT_FUNDING_DELETED_ITEMS); + if (delItems == null) + delItems = new HashSet(); + + if (refreshExistingDocs) + existingTmpDocs = getExistingObject(); + List ret = new ArrayList<>(existingTmpDocs); + + if (am.getObject().getComponentFundingDocuments() == null) + am.getObject().setComponentFundingDocuments(new HashSet()); + + for (AmpComponentFundingDocument d : setModel.getObject()) { + //check if marked for delete + if (delItems.contains(d)) { + for (TemporaryDocument td : existingTmpDocs) { + if (td.getExistingDocument().equals(d)) { + existingTmpDocs.remove(td); + break; + } + } + } + } + ret.addAll(newItems); + + return ret; + } + }; + + + list = new ListView("componentFundingDocumentList", listModel) { + private static final long serialVersionUID = 7218457979728871528L; + + @Override + protected void onAfterRender() { + super.onAfterRender(); + DocumentManagerUtil.logoutJcrSessions(SessionUtil.getCurrentServletRequest()); + } + + @Override + protected void populateItem(final ListItem item) { + if (item.getModel() == null && item.getModelObject() == null) { + logger.error("yoh"); + return; + } + + TemporaryDocument document = (TemporaryDocument) item.getModelObject(); + + if (!ContentTranslationUtil.multilingualIsEnabled()) { + item.add(new Label("componentFundingDocumentTitle", item.getModel().getObject().getTitle())); + } else { + String id; + if (document.getExistingDocument() != null) { + id = document.getExistingDocument().getUuid(); + } else { + id = document.getNewTemporaryDocumentId(); + } + Model newResourceIdModel = new Model(id); + final ResourceTranslationModel titleModel = new ResourceTranslationModel(new PropertyModel(item.getModel().getObject(), "title"), newResourceIdModel); + final AmpTextFieldPanel name = new AmpTextFieldPanel("componentFundingDocumentTitle", titleModel, "Title", AmpFMTypes.MODULE, Boolean.TRUE); + name.setEnabled(false); + name.getTextContainer().setRequired(true); + item.add(name); + + + } + + if (item.getModel().getObject().getFileName() == null) { + item.add(new Label("componentFundingDocumentResourceName", item.getModel().getObject().getWebLink())); + } else { + item.add(new Label("componentFundingDocumentResourceName", item.getModel().getObject().getFileName())); + } + + PropertyModel dateModel = new PropertyModel(item.getModel(), "date.time"); + String pattern = FeaturesUtil.getGlobalSettingValue(Constants.GLOBALSETTINGS_DATEFORMAT); + pattern = pattern.replace('m', 'M'); + SimpleDateFormat formater = new SimpleDateFormat(pattern); + String formatedDate = formater.format(dateModel.getObject()); + + item.add(new AmpLabelFieldPanel<>("componentFundingDocumentDate", new Model(formatedDate), "Component Funding Document Date", true)); + item.add(new AmpLabelFieldPanel("componentFundingDocumentYear", new PropertyModel<>(item.getModel(), "year"), "Component Funding Document Year", true)); + item.add(new AmpLabelFieldPanel("componentFundingDocumentSize", new PropertyModel<>(item.getModel(), "fileSize"), "Component Funding Document Size", true)); +// item.add(new AmpLabelFieldPanel("docType", new PropertyModel(item.getModel(), "type.label"), "Document Type", true)); + + final DownloadResourceStream drs; + if (item.getModelObject().isExisting()) + drs = new DownloadResourceStream(new PersistentObjectModel<> + (item.getModelObject().getExistingDocument()), item.getModelObject().getFileName()); + else + drs = new DownloadResourceStream(item.getModelObject().getFile(), item.getModelObject().getFileName()); + +// String webLink = item.getModelObject().getWebLink(); +// +// if (webLink != null && webLink.length() > 0) { +// if (!webLink.startsWith("http")) +// webLink = "http://" + 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"))); +// link.add(downloadLinkImg); +// } else { +// Link downloadLink = new Link("download") { +// @Override +// public void onClick() { +// getRequestCycle().scheduleRequestHandlerAfterCurrent(new ResourceStreamRequestHandler(drs, drs.getFileName())); +// } +// }; +// item.add(downloadLink); +// +// String contentType = item.getModelObject().getFileName(); +// int index = contentType.lastIndexOf('.'); +// +// String extension = contentType.substring(index + 1, contentType.length()); +// String extPath = "/TEMPLATE/ampTemplate/images/icons/" + extension + ".gif"; +// File extImgFile = new File(WebApplication.get().getServletContext().getRealPath(extPath)); +// if (!extImgFile.exists()) +// extPath = "/TEMPLATE/ampTemplate/images/icons/default.icon.gif"; +// else +// extPath = "/TEMPLATE/ampTemplate/images/icons/" + extension + ".gif"; +// +// WebMarkupContainer downloadLinkImg = new WebMarkupContainer("downloadImage"); +// downloadLinkImg.add(new AttributeModifier("src", new Model<>(extPath))); +// downloadLink.add(downloadLinkImg); +// } + + AmpDeleteLinkField delRelOrg = new AmpDeleteLinkField("componentFundingDocumentDelete", "Delete Resource") { + @Override + public void onClick(AjaxRequestTarget target) { + if (item.getModelObject().isExisting()) { + HashSet delItems = getSession().getMetaData(OnePagerConst.COMPONENT_FUNDING_DELETED_ITEMS); + if (delItems == null) { + delItems = new HashSet(); + getSession().setMetaData(OnePagerConst.COMPONENT_FUNDING_DELETED_ITEMS, delItems); + } + delItems.add(item.getModelObject().getExistingDocument()); + } else { + HashSet newItems = getSession().getMetaData(OnePagerConst.COMPONENT_FUNDING_NEW_ITEMS); + newItems.remove(item.getModelObject()); + } + target.add(list.getParent()); + } + }; + item.add(delRelOrg); + } + }; + + add(list); + + } + + + public void setRefreshExistingDocs(boolean refreshExistingDocs) { + this.refreshExistingDocs = refreshExistingDocs; + } + +} + 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 bcc4cc8b8c5..87e154a0a92 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 @@ -10,6 +10,8 @@ +
+
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 c0ed7725cdc..f4e1ec2e76c 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 @@ -11,9 +11,7 @@ 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.FundingOrgListUpdateEvent; import org.dgfoundation.amp.onepager.events.UpdateEventBehavior; import org.dgfoundation.amp.onepager.models.AbstractMixedSetModel; @@ -90,7 +88,21 @@ protected void onPopulateItem(org.dgfoundation.amp.onepager.components.ListItem< { logger.info("Unable to add component funding status dropdown: ",e); } + try { + final AmpComponentFundingResourcesTableFeature resourcesList = + new AmpComponentFundingResourcesTableFeature("componentFundingDocuments", "Component Funding Documents", model); + item.add(resourcesList); + + final 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 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..1d21baa44be 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 @@ -136,11 +136,8 @@ public List getObject() { 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) { 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..3ac3b03ab62 --- /dev/null +++ b/amp/WEB-INF/src/org/dgfoundation/amp/onepager/components/fields/AmpComponentFundingNewResourceFieldPanel.java @@ -0,0 +1,371 @@ +package org.dgfoundation.amp.onepager.components.fields; + +import org.apache.wicket.AttributeModifier; +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.features.tables.AmpResourcesFormTableFeature; +import org.dgfoundation.amp.onepager.components.upload.FileUploadPanel; +import org.dgfoundation.amp.onepager.helper.*; +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.AmpActivityVersion; +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.categorymanager.dbentity.AmpCategoryValue; +import org.digijava.module.categorymanager.util.CategoryConstants; +import org.digijava.module.contentrepository.util.DocumentManagerUtil; + +import java.io.BufferedInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.Calendar; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; + +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) throws Exception { + + super(id, model, fmName, true); + + TemporaryComponentFundingDocument tmpDoc = new TemporaryComponentFundingDocument (); + String docId =generateResourceKey("newComponentResource"); + 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 = "newComponentResource"; + 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); + if (newItemsSet == null) { + newItemsSet = new HashSet(); + getSession().setMetaData(OnePagerConst.COMPONENT_FUNDING_NEW_ITEMS, 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("newComponentResource"); + 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)); + } + + @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 = null; + 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)")); + } else { + link.add(AttributeModifier.remove("key")); + link.add(AttributeModifier.remove("style")); + link.add(AttributeModifier.remove("onclick")); + link.add(new AttributeModifier("onclick", "$('#" + getToggleId() + "').slideToggle();")); + } + } + + 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/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