2929import com .topcoder .direct .services .view .util .DirectUtils ;
3030import com .topcoder .management .deliverable .Submission ;
3131import com .topcoder .management .deliverable .Upload ;
32+ import com .topcoder .management .resource .Resource ;
33+ import com .topcoder .management .resource .ResourceManager ;
34+ import com .topcoder .management .resource .persistence .ResourcePersistenceException ;
3235import com .topcoder .project .phases .Phase ;
3336import com .topcoder .shared .dataAccess .DataAccess ;
3437import com .topcoder .shared .dataAccess .Request ;
5053/**
5154 * Action supporting project work management page.
5255 *
53- * @author TCSASSEMBLER
54- * @version 1.0
56+ *
57+ * <p>
58+ * Version 1.1 Change notes:
59+ * <ol>
60+ * <li>Added {@link #resourceManager} property.</li>
61+ * <li>Added {@link #resolveSubmitter(Submission)} method.</li>
62+ * </ol>
63+ * </p>
64+ * @author isv, TCSASSEMBLER
65+ * @version 1.1
5566 */
5667public class ProjectWorkManagementAction extends BaseDirectStrutsAction implements FormAction <ProjectIdForm > {
5768
@@ -129,6 +140,13 @@ public class ProjectWorkManagementAction extends BaseDirectStrutsAction implemen
129140 */
130141 private MimeTypeRetriever mimeTypeRetriever ;
131142
143+ /**
144+ * <p>A <code>ResourceManager</code> providing the value for resourceManager property.</p>
145+ *
146+ * @since 1.1
147+ */
148+ private ResourceManager resourceManager ;
149+
132150 /**
133151 * Logger for this class.
134152 */
@@ -581,6 +599,7 @@ public String pushSubmissions() {
581599 Map <Long , Map <Integer , Submission >> organizingMap = new HashMap <Long , Map <Integer , Submission >>();
582600
583601 for (Submission s : checkpointSubmissions ) {
602+ resolveSubmitter (s );
584603
585604 Long submissionUserId = Long .parseLong (s .getCreationUser ());
586605
@@ -591,8 +610,6 @@ public String pushSubmissions() {
591610 Map <Integer , Submission > userSubmissionMap = new TreeMap <Integer , Submission >();
592611 userSubmissionMap .put (s .getUserRank (), s );
593612 organizingMap .put (submissionUserId , userSubmissionMap );
594- userHandlesMap .put (submissionUserId ,
595- this .getUserService ().getUserHandle (submissionUserId ));
596613 }
597614 }
598615
@@ -615,6 +632,7 @@ public String pushSubmissions() {
615632 Map <Long , Map <Integer , Submission >> organizingMap = new HashMap <Long , Map <Integer , Submission >>();
616633
617634 for (Submission s : finalRoundSubmissions ) {
635+ resolveSubmitter (s );
618636
619637 Long submissionUserId = Long .parseLong (s .getCreationUser ());
620638
@@ -625,8 +643,6 @@ public String pushSubmissions() {
625643 Map <Integer , Submission > userSubmissionMap = new TreeMap <Integer , Submission >();
626644 userSubmissionMap .put (s .getUserRank (), s );
627645 organizingMap .put (submissionUserId , userSubmissionMap );
628- userHandlesMap .put (submissionUserId ,
629- this .getUserService ().getUserHandle (submissionUserId ));
630646 }
631647 }
632648
@@ -647,17 +663,14 @@ public String pushSubmissions() {
647663
648664 // find out the latest final fix submission
649665 Submission latestSubmission = finalFixesSubmissions .get (0 );
666+ resolveSubmitter (latestSubmission );
650667 for (int i = 1 , n = finalFixesSubmissions .size (); i < n ; ++i ) {
651668 if (latestSubmission .getModificationTimestamp ().compareTo (
652669 finalFixesSubmissions .get (i ).getModificationTimestamp ()) < 0 ) {
653670 latestSubmission = finalFixesSubmissions .get (i );
654671 }
655672 }
656673
657- userHandlesMap .put (Long .parseLong (latestSubmission .getCreationUser ()),
658- this .getUserService ().getUserHandle (
659- Long .parseLong (latestSubmission .getCreationUser ())));
660-
661674 List <com .appirio .client .asp .api .Submission > finalFixSubmissionsToPush = new ArrayList <com .appirio .client .asp .api .Submission >();
662675
663676 finalFixSubmissionsToPush .add (getStudioSubmissionDataForAPI (latestSubmission , true ));
@@ -678,6 +691,7 @@ public String pushSubmissions() {
678691 for (Submission sub : submissions ) {
679692 if (sub .getId () == firstPlaceWinner .getSubmissionId ()) {
680693 // find the winner
694+ resolveSubmitter (sub );
681695 List <com .appirio .client .asp .api .Submission > winnerSubmissionToPush = new ArrayList <com .appirio .client .asp .api .Submission >();
682696
683697 winnerSubmissionToPush .add (getSoftwareSubmissionDataForAPI (sub ));
@@ -695,6 +709,7 @@ public String pushSubmissions() {
695709 for (Upload upload : uploads ) {
696710 if (upload .getProjectPhase () != null && upload .getProjectPhase ().longValue () == lastClosedFinalFixPhase .getId ()) {
697711 Submission finalFixSubmission = new Submission ();
712+ resolveSubmitter (finalFixSubmission );
698713 long finalFixSubmissionId = 0 ;
699714 long submitterId = 0 ;
700715 for (ContestFinalFixDTO ff : finalFixes ) {
@@ -893,6 +908,25 @@ private String createAbsoluteStudioSubmissionBasePath(Submission submission) {
893908 return buf .toString ();
894909 }
895910
911+ /**
912+ * <p>Gets the details for actual submitter based on the submitter resource associated with the specified submission
913+ * and updates {@link Submission#getCreationUser()} accordingly.</p>
914+ *
915+ * @param submission a <code>Submission</code> providing submission details.
916+ * @throws ResourcePersistenceException if an unexpected error occurs.
917+ * @since 1.1
918+ */
919+ private void resolveSubmitter (Submission submission ) throws ResourcePersistenceException {
920+ long submitterResourceId = submission .getUpload ().getOwner ();
921+ Resource submitterResource = getResourceManager ().getResource (submitterResourceId );
922+ long submitterUserId = Long .parseLong (submitterResource .getProperty ("External Reference ID" ));
923+ String submitterHandle = submitterResource .getProperty ("Handle" );
924+
925+ this .userHandlesMap .put (submitterUserId , submitterHandle );
926+
927+ submission .setCreationUser (String .valueOf (submitterUserId ));
928+ }
929+
896930 /**
897931 * Gets the absolute path of the preview deliverable zip.
898932 *
@@ -1126,6 +1160,26 @@ public void setMimeTypeRetriever(MimeTypeRetriever mimeTypeRetriever) {
11261160 this .mimeTypeRetriever = mimeTypeRetriever ;
11271161 }
11281162
1163+ /**
1164+ * <p>Gets the resourceManager property.</p>
1165+ *
1166+ * @return a <code>ResourceManager</code> providing the value for resourceManager property.
1167+ * @since 1.1
1168+ */
1169+ public ResourceManager getResourceManager () {
1170+ return this .resourceManager ;
1171+ }
1172+
1173+ /**
1174+ * <p>Sets the resourceManager property.</p>
1175+ *
1176+ * @param resourceManager a <code>ResourceManager</code> providing the value for resourceManager property.
1177+ * @since 1.1
1178+ */
1179+ public void setResourceManager (ResourceManager resourceManager ) {
1180+ this .resourceManager = resourceManager ;
1181+ }
1182+
11291183 public static class SubmissionPresentationFilter implements FilenameFilter {
11301184
11311185 /**
0 commit comments