Skip to content
This repository was archived by the owner on Jan 23, 2025. It is now read-only.

Commit 9bfda7f

Browse files
author
TonyJ
committed
Merge branch 'dev'
merging dev to master Changes to be committed: modified: README.md modified: conf/web/WEB-INF/applicationContext.xml modified: conf/web/WEB-INF/struts.xml modified: src/java/main/com/topcoder/direct/services/view/action/project/ProjectContestsHealthAction.java modified: src/java/main/com/topcoder/direct/services/view/action/project/ProjectOverviewAction.java modified: src/java/main/com/topcoder/direct/services/view/action/project/ProjectWorkManagementAction.java modified: src/java/main/com/topcoder/direct/services/view/util/DirectUtils.java modified: src/web/WEB-INF/includes/modalWindows.jsp deleted: src/web/WEB-INF/project-overview-contests-health.jsp deleted: src/web/WEB-INF/project-overview-project-activities.jsp modified: src/web/WEB-INF/project-overview-project-stats.jsp modified: src/web/WEB-INF/project-overview.jsp modified: src/web/WEB-INF/project-work-management.jsp modified: src/web/scripts/ckeditor/ckeditor/config.js modified: src/web/scripts/dashboard-view.js modified: src/web/scripts/directProjectOverview.js modified: src/web/scripts/launch/contestDetailSoftware.js modified: src/web/scripts/launch/entity.js modified: src/web/scripts/launchcontest.js modified: src/web/scripts/projectWorkManager.js modified: token.properties.docker modified: token.properties.example
2 parents 27d28fe + 7a739e4 commit 9bfda7f

22 files changed

+975
-738
lines changed

README.md

-11
Original file line numberDiff line numberDiff line change
@@ -36,17 +36,6 @@ In this configuration, we'll run the direct app in a docker container locally bu
3636

3737
## **old** instructions
3838

39-
Setup on VM:
40-
* Once you get your VM, login into the VM with your private key and account 'direct'
41-
* Back up token.properties and topcoder_global.properties in /home/direct/direct somewhere
42-
* Delete the whole directory /home/direct/direct
43-
* Git Clone the direct-app repo into folder /home/direct/direct.
44-
* Copy the back up *.properties files back to /home/direct/direct
45-
* Among the *.properties, update topcoder_global.properties, add line 'direct_service_libdir=${libdir}/tcs/ejb' after tcs_libdir property
46-
* Make sure JDK7 is used: run
47-
* + export JAVA_HOME=/opt/jdk1.7.0_17
48-
* + export PATH=/opt/jdk1.7.0_17/bin:$PATH
49-
5039
Setup on Local env - Refer to http://apps.topcoder.com/wiki/display/docs/TC+Direct+Setup+Guide
5140
* Instead of using SVN, you will use the codes from this git repo
5241

conf/web/WEB-INF/applicationContext.xml

+20
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,24 @@
249249

250250
<bean id="mimeTypeRetriever" class="com.topcoder.direct.services.view.action.contest.launch.MimeTypeRetriever"/>
251251

252+
<bean id="dbConnectionFactory" class="com.topcoder.db.connectionfactory.DBConnectionFactoryImpl">
253+
<constructor-arg index="0" value="com.topcoder.db.connectionfactory.DBConnectionFactoryImpl"/>
254+
</bean>
255+
256+
<bean id="resourcePersistence" class="com.topcoder.management.resource.persistence.sql.SqlResourcePersistence">
257+
<constructor-arg index="0" ref="dbConnectionFactory"/>
258+
</bean>
259+
260+
<bean id="searchBundleManager" class="com.topcoder.search.builder.SearchBundleManager">
261+
<constructor-arg index="0" value="com.topcoder.searchbuilder.common"/>
262+
</bean>
263+
264+
<bean id="persistenceResourceManager"
265+
class="com.topcoder.management.resource.persistence.PersistenceResourceManager">
266+
<constructor-arg index="0" ref="resourcePersistence"/>
267+
<constructor-arg index="1" ref="searchBundleManager"/>
268+
</bean>
269+
252270
<!-- Actions -->
253271
<bean id="baseDirectStrutsAction"
254272
class="com.topcoder.direct.services.view.action.BaseDirectStrutsAction"
@@ -286,6 +304,7 @@
286304
<property name="userService" ref="userService"/>
287305
<property name="permissionServiceFacade" ref="permissionServiceFacade"/>
288306
<property name="copilotProjectDAO" ref="copilotProjectDAO"/>
307+
<property name="memberProfileUrlBase" value="@member.profile.url.base@"/>
289308
</bean>
290309

291310
<bean id="projectVMManagementAction"
@@ -299,6 +318,7 @@
299318
<property name="studioSubmissionBase" value="@studio.submission.base@"/>
300319
<property name="softwareSubmissionBase" value="@file_storage_location@"/>
301320
<property name="mimeTypeRetriever" ref="mimeTypeRetriever"/>
321+
<property name="resourceManager" ref="persistenceResourceManager"/>
302322
</bean>
303323

304324
<bean id="getProjectVMInstancesAction"

conf/web/WEB-INF/struts.xml

+12-3
Original file line numberDiff line numberDiff line change
@@ -789,6 +789,12 @@
789789
<result name="error" type="json"/>
790790
</action>
791791

792+
<action name="getSubmissionPushStatus" method="getSubmissionPushStatus" class="projectWorkManagementAction">
793+
<interceptor-ref name="securedProjectPreProcessorStack"/>
794+
<result name="success" type="json"/>
795+
<result name="error" type="json"/>
796+
</action>
797+
792798
<action name="getWorkStepChallenges" method="getChallengesForWorkStepAndProject" class="projectWorkManagementAction">
793799
<interceptor-ref name="securedProjectPreProcessorStack"/>
794800
<result name="success" type="json"/>
@@ -821,7 +827,8 @@
821827

822828
<action name="getProjectStatsAjax" method="getProjectStatsAjax" class="projectOverviewAction">
823829
<interceptor-ref name="securedProjectStack"/>
824-
<result name="success">/WEB-INF/project-overview-project-stats.jsp</result>
830+
<result name="success" type="json" />
831+
<result name="error" type="json"/>
825832
</action>
826833

827834
<action name="getProjectIssuesStatsAjax" method="getProjectIssuesStatsAjax" class="projectOverviewAction">
@@ -832,7 +839,8 @@
832839

833840
<action name="getProjectActivitiesAjax" method="getProjectActivitiesAjax" class="projectOverviewAction">
834841
<interceptor-ref name="securedProjectStack"/>
835-
<result name="success">/WEB-INF/project-overview-project-activities.jsp</result>
842+
<result name="success" type="json"/>
843+
<result name="error" type="json"/>
836844
</action>
837845

838846
<action name="projectInfoExport" class="projectExportAction">
@@ -859,7 +867,8 @@
859867

860868
<action name="projectContestsHealthAJAX" class="projectContestsHealthAction">
861869
<interceptor-ref name="securedDefaultStack"/>
862-
<result name="success">/WEB-INF/project-overview-contests-health.jsp</result>
870+
<result name="success" type="json"/>
871+
<result name="error" type="json"/>
863872
</action>
864873

865874
<action name="projectMilestoneView" class="projectMilestoneViewAction">

src/java/main/com/topcoder/direct/services/view/action/project/ProjectContestsHealthAction.java

+10-2
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@
1313
import com.topcoder.security.TCSubject;
1414
import com.topcoder.shared.util.logging.Logger;
1515

16+
import java.util.ArrayList;
17+
import java.util.HashMap;
18+
import java.util.List;
1619
import java.util.Map;
1720

1821
/**
@@ -92,15 +95,20 @@ protected void executeAction() {
9295
log.info("Retrieved contests health data for project " + getProjectId()
9396
+ ", contests count = " + contests.size());
9497

98+
List<Map<String, Object> > results = new ArrayList<Map<String, Object> >();
9599
// Get dashboard data for each contest
96100
for (ContestBriefDTO contest : contests.keySet()) {
97101
ContestDashboardDTO contestDashboardData =
98102
DataProvider.getContestDashboardData(contest.getId(), !contest.isSoftware(), false);
99103
contests.get(contest).setDashboardData(contestDashboardData);
100-
}
101104

105+
Map<String, Object> contestResult = new HashMap<String, Object>();
106+
contestResult.put("contest", contest);
107+
contestResult.put("healthData", contests.get(contest));
108+
results.add(contestResult);
109+
}
102110

103-
setResult(contests);
111+
setResult(results);
104112
} catch (Exception e) {
105113
DirectUtils.getServletResponse().setStatus(500);
106114
log.error("Got an error", e);

src/java/main/com/topcoder/direct/services/view/action/project/ProjectOverviewAction.java

+72-9
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import com.topcoder.direct.services.view.action.AbstractAction;
1111
import com.topcoder.direct.services.view.action.FormAction;
1212
import com.topcoder.direct.services.view.action.ViewAction;
13+
import com.topcoder.direct.services.view.dto.ActivityDTO;
1314
import com.topcoder.direct.services.view.dto.TcJiraIssue;
1415
import com.topcoder.direct.services.view.dto.contest.ContestBriefDTO;
1516
import com.topcoder.direct.services.view.dto.contest.ContestHealthDTO;
@@ -235,6 +236,11 @@ public class ProjectOverviewAction extends AbstractAction implements FormAction<
235236
*/
236237
private boolean export = false;
237238

239+
/**
240+
* The member profile url base.
241+
*/
242+
private String memberProfileUrlBase;
243+
238244
/**
239245
* Gets the project service facade.
240246
*
@@ -497,6 +503,23 @@ public String getProjectStatsAjax() {
497503

498504
// get and set dashboard stats
499505
setDashboardProjectStat();
506+
507+
Map<String, Object> result = new HashMap<String, Object>();
508+
result.put("draftContestsNumber", projectStats.getDraftContestsNumber());
509+
result.put("pipelineContestsNumber", projectStats.getPipelineContestsNumber());
510+
result.put("runningContestsNumber", projectStats.getRunningContestsNumber());
511+
result.put("finishedContestsNumber", projectStats.getFinishedContestsNumber());
512+
result.put("cancelledNumber", viewData.getDashboardProjectStat().getCancelledNumber());
513+
result.put("completedNumber", viewData.getDashboardProjectStat().getCompletedNumber());
514+
result.put("totalMemberCost", viewData.getDashboardProjectStat().getTotalMemberCost());
515+
result.put("averageMemberCostPerContest", viewData.getDashboardProjectStat().getAverageMemberCostPerContest());
516+
result.put("totalContestFee", viewData.getDashboardProjectStat().getTotalContestFee());
517+
result.put("averageContestFeePerContest", viewData.getDashboardProjectStat().getAverageContestFeePerContest());
518+
result.put("totalProjectCost", viewData.getDashboardProjectStat().getTotalProjectCost());
519+
result.put("averageContestDuration", viewData.getDashboardProjectStat().getAverageContestDuration());
520+
result.put("averageFulfillment", viewData.getDashboardProjectStat().getAverageFulfillment());
521+
522+
setResult(result);
500523
} catch (Throwable error) {
501524
if(getModel() != null) {
502525
setResult(error);
@@ -557,6 +580,28 @@ public String getProjectActivitiesAjax() {
557580
LatestProjectActivitiesDTO latestActivities
558581
= DataProvider.getLatestActivitiesForProject(DirectUtils.getTCSubjectFromSession().getUserId(), getFormData().getProjectId());
559582
viewData.setLatestProjectActivities(latestActivities);
583+
584+
Map<String, List<Map<String, Object>>> m = new HashMap<String, List<Map<String, Object>>>();
585+
for(Map.Entry<ContestBriefDTO, List<ActivityDTO>> entry: latestActivities.getActivities().entrySet()) {
586+
List<Map<String, Object>> activities = new ArrayList<Map<String, Object>>();
587+
for(ActivityDTO activityDTO : entry.getValue()) {
588+
Map<String, Object> activity = new HashMap<String, Object>();
589+
activity.put("title", entry.getKey().getTitle());
590+
activity.put("typeShortName", activityDTO.getType().getShortName());
591+
activity.put("typeName", activityDTO.getType().getName());
592+
activity.put("typeActionText", activityDTO.getType().getActionText());
593+
activity.put("contestId", activityDTO.getContest().getId());
594+
activity.put("originatorId", activityDTO.getOriginatorId());
595+
activity.put("originatorHandle", activityDTO.getOriginatorHandle());
596+
activity.put("date", activityDTO.getDate());
597+
activity.put("memberProfileUrlBase", getMemberProfileUrlBase());
598+
599+
activities.add(activity);
600+
}
601+
m.put(Long.toString(entry.getKey().getId()), activities);
602+
}
603+
604+
setResult(m);
560605
} catch (Throwable error) {
561606
if(getModel() != null) {
562607
setResult(error);
@@ -674,7 +719,7 @@ private void setProjectGeneralInfo(ProjectData project) throws Exception {
674719

675720

676721
getViewData().getProjectGeneralInfo().setActualCost(actualCost);
677-
722+
678723
DataProvider.setProjectGeneralInfo(getViewData().getProjectGeneralInfo());
679724
// set project permission info
680725
setProjectPermissionInfo();
@@ -696,11 +741,11 @@ private void setProjectPermissionInfo() throws Exception {
696741
final List<Permission> permissionsByProject = getPermissionServiceFacade().getPermissionsByProject(currentUser, getFormData().getProjectId());
697742

698743
ProjectPermissionInfoDTO permissionInfo = new ProjectPermissionInfoDTO();
699-
boolean hasFullPermission = false;
700-
744+
boolean hasFullPermission = false;
745+
701746
if (permissionsByProject != null) {
702-
for(Permission p : permissionsByProject) {
703-
747+
for(Permission p : permissionsByProject) {
748+
704749
if(p.getPermissionType().getPermissionTypeId() == PermissionType.PERMISSION_TYPE_PROJECT_REPORT) {
705750
permissionInfo.setReportPermissionNumber(permissionInfo.getReportPermissionNumber() + 1);
706751
} else if(p.getPermissionType().getPermissionTypeId() == PermissionType.PERMISSION_TYPE_PROJECT_READ) {
@@ -709,10 +754,10 @@ private void setProjectPermissionInfo() throws Exception {
709754
permissionInfo.setWritePermissionNumber(permissionInfo.getWritePermissionNumber() + 1);
710755
} else if(p.getPermissionType().getPermissionTypeId() == PermissionType.PERMISSION_TYPE_PROJECT_FULL) {
711756
permissionInfo.setFullPermissionNumber(permissionInfo.getFullPermissionNumber() + 1);
712-
if (p.getUserId() == currentUser.getUserId())
713-
{
714-
hasFullPermission = true;
715-
}
757+
if (p.getUserId() == currentUser.getUserId())
758+
{
759+
hasFullPermission = true;
760+
}
716761
}
717762
}
718763
}
@@ -757,4 +802,22 @@ public UserService getUserService() {
757802
public void setUserService(UserService userService) {
758803
this.userService = userService;
759804
}
805+
806+
/**
807+
* Gets the memberProfileUrlBase.
808+
*
809+
* @return the memberProfileUrlBase.
810+
*/
811+
public String getMemberProfileUrlBase() {
812+
return memberProfileUrlBase;
813+
}
814+
815+
/**
816+
* Sets the memberProfileUrlBase.
817+
*
818+
* @param memberProfileUrlBase the memberProfileUrlBase.
819+
*/
820+
public void setMemberProfileUrlBase(String memberProfileUrlBase) {
821+
this.memberProfileUrlBase = memberProfileUrlBase;
822+
}
760823
}

0 commit comments

Comments
 (0)