1 package org.lsst.ccs.release.management;
2
3 import java.io.IOException;
4 import java.sql.Connection;
5 import java.sql.PreparedStatement;
6 import java.sql.ResultSet;
7 import java.sql.SQLException;
8 import javax.servlet.ServletException;
9 import javax.servlet.http.HttpServlet;
10 import javax.servlet.http.HttpServletRequest;
11 import javax.servlet.http.HttpServletResponse;
12 import org.json.JSONException;
13 import org.srs.web.base.db.ConnectionManager;
14
15
16
17
18
19 public class ReleaseManagementServlet extends HttpServlet {
20
21 static String[] subsystemModules = {"buses", "main", "gui"};
22
23 @Override
24 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
25
26
27 String projectName = req.getParameter("projectName");
28 String releaseVersion = req.getParameter("releaseVersion");
29 String snapshotVersion = req.getParameter("snapshotVersion");
30 String projectType = req.getParameter("projectType");
31 String projectDescription = req.getParameter("projectDescription");
32 String projectJiraProject = req.getParameter("projectJiraProject");
33 String projectJiraPrefix = req.getParameter("projectJiraPrefix");
34
35 if (projectName != null) {
36
37
38 Connection conn = null;
39 try {
40 conn = ConnectionManager.getConnection("jdbc/ccs");
41 conn.setAutoCommit(true);
42
43
44 String projectCheckQuery = "select * from ccs_Projects where name = ?";
45 PreparedStatement projectCheckStat = conn.prepareStatement(projectCheckQuery);
46 projectCheckStat.setString(1, projectName);
47 ResultSet projectCheckResult = projectCheckStat.executeQuery();
48
49 boolean projectExists = projectCheckResult.next();
50 if (!projectExists) {
51 PreparedStatement insertProjectStat = conn.prepareStatement("insert into ccs_Projects (name) values (?)");
52 insertProjectStat.setString(1, projectName);
53 insertProjectStat.executeUpdate();
54
55 PreparedStatement insertProjectDisplay = conn.prepareStatement("insert into ccs_Project_Display (projectName, projectSiteLocation, projectOrder, links) values (?,?,?,?)");
56
57 int order = 100;
58
59 if (projectType.equals("subsystem")) {
60
61 insertProjectDisplay.setString(1, projectName);
62 insertProjectDisplay.setString(2, "subsystems");
63 insertProjectDisplay.setInt(3, order);
64 insertProjectDisplay.setString(4, "apidoc,sourcecode,testcode,dependencies,tests,graph");
65 insertProjectDisplay.executeUpdate();
66
67 for (String mod : subsystemModules) {
68 String moduleName = projectName + "-" + mod;
69 PreparedStatement createModule = conn.prepareStatement("insert into ccs_Project_Modules (moduleName,projectName) values (?,?)");
70 createModule.setString(1, moduleName);
71 createModule.setString(2, projectName);
72 createModule.executeUpdate();
73
74 order++;
75 insertProjectDisplay.setString(1, moduleName);
76 insertProjectDisplay.setString(2, moduleName);
77 insertProjectDisplay.setInt(3, order);
78 insertProjectDisplay.setString(4, "apidoc,sourcecode,testcode,dependencies,tests,jdepend,graph,findbugs,dist");
79 insertProjectDisplay.executeUpdate();
80 }
81
82 } else if (projectType.equals("driver")) {
83 insertProjectDisplay.setString(1, projectName);
84 insertProjectDisplay.setString(2, "drivers");
85 insertProjectDisplay.setInt(3, order);
86 insertProjectDisplay.setString(4, "apidoc,sourcecode,testcode,dependencies,tests,jdepend,graph,findbugs,dist");
87 insertProjectDisplay.executeUpdate();
88 }
89
90 }
91
92 resp.getWriter().print("Updating information for project " + projectName + "\n");
93 resp.getWriter().print("\tDescription: " + emptyStringIfNull(projectDescription) + "\n");
94 resp.getWriter().print("\tType: " + emptyStringIfNull(projectType) + "\n");
95 resp.getWriter().print("\tJira Project: " + emptyStringIfNull(projectJiraProject) + "\n");
96 resp.getWriter().print("\tJira Prefix: " + emptyStringIfNull(projectJiraPrefix) + "\n");
97
98
99 PreparedStatement projectInfoUpdateStat = conn.prepareStatement("update ccs_Projects set description=?, jiraProject=?, jiraVersionPrefix=?, type=? where name=?");
100 projectInfoUpdateStat.setString(1, emptyStringIfNull(projectDescription));
101 projectInfoUpdateStat.setString(2, emptyStringIfNull(projectJiraProject));
102 projectInfoUpdateStat.setString(3, emptyStringIfNull(projectJiraPrefix));
103 projectInfoUpdateStat.setString(4, emptyStringIfNull(projectType));
104 projectInfoUpdateStat.setString(5, projectName);
105 projectInfoUpdateStat.executeUpdate();
106
107
108 if (releaseVersion != null && !"".equals(releaseVersion)) {
109
110 PreparedStatement activeRelCycleStat = conn.prepareStatement("select * from ccs_Release_Cycle where released = 0 and active = 1");
111 ResultSet activeRelCycleResult = activeRelCycleStat.executeQuery();
112 String relCycle = null;
113 if (activeRelCycleResult.next()) {
114 relCycle = activeRelCycleResult.getString("name");
115 } else {
116 java.text.DateFormat df = new java.text.SimpleDateFormat("yyyy-MM-dd");
117 relCycle = df.format(new java.util.Date());
118
119 try {
120 PreparedStatement createRelCycleStat = conn.prepareStatement("insert into ccs_Release_Cycle (name,date) values (?,(select current_date from dual))");
121 createRelCycleStat.setString(1, relCycle);
122 createRelCycleStat.executeUpdate();
123 resp.getWriter().print("\nCreated Release Cycle " + relCycle + "https://srs.slac.stanford.edu/releaseManagement/releaseCycles.jsp\n");
124 } catch (Exception e) {
125
126 }
127 }
128
129
130 PreparedStatement addReleaseStat = conn.prepareStatement("insert into ccs_Project_Version (projectName,version,relCycle,created,isSnapshot) values (?,?,?,(select current_timestamp from dual),0)");
131 addReleaseStat.setString(1, projectName);
132 addReleaseStat.setString(2, releaseVersion);
133 addReleaseStat.setString(3, relCycle);
134 addReleaseStat.executeUpdate();
135
136 resp.getWriter().print("Added Release " + releaseVersion + " to project " + projectName + " https://srs.slac.stanford.edu/releaseManagement/projectVersions.jsp?projectName=" + projectName + "for Release Cycle " + relCycle + "https://srs.slac.stanford.edu/releaseManagement/releaseNotes.jsp?relCycle=" + relCycle + "\n");
137
138
139 PreparedStatement removeSnapshotStat = conn.prepareStatement("delete from ccs_Project_Version where projectName = ? and version = ?");
140 removeSnapshotStat.setString(1, projectName);
141 removeSnapshotStat.setString(2, releaseVersion + "-SNAPSHOT");
142 removeSnapshotStat.executeUpdate();
143
144
145 if (relCycle != null) {
146 PreparedStatement updateResCycleVersions = conn.prepareStatement("update ccs_Release_Cycle_Versions set version = ? where projectName = ? and relCycle = ? ");
147 updateResCycleVersions.setString(1, releaseVersion);
148 updateResCycleVersions.setString(2, projectName);
149 updateResCycleVersions.setString(3, relCycle);
150 updateResCycleVersions.executeUpdate();
151 }
152
153 }
154
155
156 if (snapshotVersion != null && !"".equals(snapshotVersion)) {
157 try {
158
159 PreparedStatement addSnapshotToProject = conn.prepareStatement("insert into ccs_Project_Version (projectName,version,created) values (?,?,(select current_timestamp from dual))");
160 addSnapshotToProject.setString(1, projectName);
161 addSnapshotToProject.setString(2, snapshotVersion);
162 addSnapshotToProject.executeUpdate();
163 resp.getWriter().print("Added Snapshot " + snapshotVersion + " to project " + projectName + "https://srs.slac.stanford.edu/releaseManagement/projectVersions.jsp?projectName=" + projectName + "\n");
164 } catch (IOException | SQLException e) {
165
166 }
167 }
168
169 if (projectJiraProject != null && !"".equals(projectJiraProject)) {
170 String jiraRelVersion = releaseVersion;
171 String jiraNextVersion = snapshotVersion;
172 if (projectJiraPrefix != null && !"".equals(projectJiraPrefix)) {
173 if (jiraRelVersion != null && !"".equals(jiraRelVersion)) {
174 jiraRelVersion = projectJiraPrefix + "-" + jiraRelVersion;
175 }
176 if (jiraNextVersion != null && !"".equals(jiraNextVersion)) {
177 jiraNextVersion = projectJiraPrefix + "-" + jiraNextVersion;
178 }
179 }
180 try {
181 JiraVersionManagement.updateJiraVersions(projectJiraProject, jiraRelVersion, jiraNextVersion);
182 } catch (JSONException ex) {
183 resp.getWriter().print("Problem updating Jira projects\n");
184 resp.getWriter().print(ex.getMessage() + "\n");
185 }
186
187 }
188
189 } catch (Exception ex) {
190 resp.getWriter().print(ex.getMessage());
191
192 } finally {
193 try {
194 conn.close();
195 } catch (SQLException ex) {
196 resp.getWriter().print(ex.getMessage());
197 }
198 }
199 } else {
200 resp.getWriter().print("ReleaseManagementServlet: no projectName was provided.");
201 }
202
203 }
204
205 private static String emptyStringIfNull(String value) {
206 return value == null ? "" : value;
207 }
208
209 }