server/resources/projectPage.jsp (217 lines of code) (raw):

<%@ include file="/include-internal.jsp" %> <%@ page import="jetbrains.buildServer.sharedResources.SharedResourcesPluginConstants" %> <%@ page import="jetbrains.buildServer.sharedResources.model.resources.ResourceType" %> <jsp:useBean id="bean" scope="request" type="jetbrains.buildServer.sharedResources.pages.beans.ProjectPageBean"/> <%--@elvariable id="usedResources" type="java.util.Map<java.lang.String, jetbrains.buildServer.sharedResources.model.resources.Resource>"--%> <%--@elvariable id="duplicates" type="java.util.Map<java.lang.String, java.lang.Boolean>"--%> <c:set var="PARAM_RESOURCE_NAME" value="<%=SharedResourcesPluginConstants.WEB.PARAM_RESOURCE_NAME%>"/> <c:set var="PARAM_PROJECT_ID" value="<%=SharedResourcesPluginConstants.WEB.PARAM_PROJECT_ID%>"/> <c:set var="PARAM_RESOURCE_QUOTA" value="<%=SharedResourcesPluginConstants.WEB.PARAM_RESOURCE_QUOTA%>"/> <c:set var="PARAM_RESOURCE_TYPE" value="<%=SharedResourcesPluginConstants.WEB.PARAM_RESOURCE_TYPE%>"/> <c:set var="PARAM_RESOURCE_VALUES" value="<%=SharedResourcesPluginConstants.WEB.PARAM_RESOURCE_VALUES%>"/> <c:set var="PARAM_OLD_RESOURCE_NAME" value="<%=SharedResourcesPluginConstants.WEB.PARAM_OLD_RESOURCE_NAME%>"/> <c:set var="PARAM_RESOURCE_STATE" value="<%=SharedResourcesPluginConstants.WEB.PARAM_RESOURCE_STATE%>"/> <c:set var="PARAM_RESOURCE_ID" value="<%=SharedResourcesPluginConstants.WEB.PARAM_RESOURCE_ID%>"/> <c:set var="ACTIONS" value="<%=SharedResourcesPluginConstants.WEB.ACTIONS%>"/> <c:set var="type_quota" value="<%=ResourceType.QUOTED%>"/> <c:set var="type_custom" value="<%=ResourceType.CUSTOM%>"/> <c:set var="project" value="${bean.project}"/> <c:set var="canEdit" value="${not project.readOnly and afn:permissionGrantedForProject(project, 'EDIT_PROJECT')}"/> <c:set var="overrides" value="${bean.overridesMap}"/> <c:set var="projects" value="${bean.projects}"/> <style type="text/css"> .resourcesDialog { width: 49em; } </style> <script type="text/javascript"> BS.SharedResourcesActions = { getCommonParams: function () { // if quota checkbox in unchecked, send no quota info var type = $j('#resource_type option:selected').val(); var params = {}; params['${PARAM_PROJECT_ID}'] = '${project.projectId}'; params['${PARAM_RESOURCE_NAME}'] = $j('#resource_name').val(); params['${PARAM_RESOURCE_STATE}'] = $j('#resource_enabled').prop('checked'); params['${PARAM_RESOURCE_ID}'] = $j('#resource_id').val(); // infinite if (type === 'infinite') { params['${PARAM_RESOURCE_TYPE}'] = 'quoted'; } // quoted if (type === 'quoted') { params['${PARAM_RESOURCE_TYPE}'] = 'quoted'; params['${PARAM_RESOURCE_QUOTA}'] = $j('#resource_quota').val(); } // custom if (type === 'custom') { params['${PARAM_RESOURCE_TYPE}'] = 'custom'; params['${PARAM_RESOURCE_VALUES}'] = $j('#customValues').val(); } return params; }, actionsUrl: window['base_uri'] + "${ACTIONS}", addResource: function () { var params = this.getCommonParams(); params['action'] = 'addResource'; BS.ajaxRequest(this.actionsUrl, { parameters: params, onComplete: function (transport) { var errors = BS.XMLResponse.processErrors(transport.responseXML, { onNameError: function (elem) { $j('#error_Name').html("The name is already used"); BS.Util.show('error_Name'); } }); BS.ResourceDialog.afterSubmit(errors); } }); }, editResource: function (resource_id, old_resource_name) { var params = this.getCommonParams(); params['${PARAM_OLD_RESOURCE_NAME}'] = old_resource_name; params['${PARAM_RESOURCE_ID}'] = resource_id; params['action'] = 'editResource'; BS.ajaxRequest(this.actionsUrl, { parameters: params, onComplete: function (transport) { var errors = BS.XMLResponse.processErrors(transport.responseXML, { onNameError: function (elem) { $j('#error_Name').html("Name is already used"); BS.Util.show('error_Name'); } }); BS.ResourceDialog.afterSubmit(errors); } }); }, deleteResourceOverride: function(resource_id, resource_name, ancestor_name) { if (confirm('Are you sure you want to delete the resource "' + resource_name + '"? Overridden resource from ' + ancestor_name + ' will be used instead.')) { this.doDeleteResource(resource_id, '${project.projectId}'); } }, deleteResource: function (resource_id) { if (confirm('Are you sure you want to delete this resource? It may result in errors if the name is used as a parameter reference.')) { this.doDeleteResource(resource_id, '${project.projectId}'); } }, doDeleteResource: function(resource_id, project_id) { var params = {}; params['${PARAM_PROJECT_ID}'] = project_id; params['${PARAM_RESOURCE_ID}'] = resource_id; params['action'] = 'deleteResource'; BS.ajaxRequest(this.actionsUrl, { parameters: params, onSuccess: function () { window.location.reload(); } }); }, alertCantDelete: function (resource_name) { alert('Resource ' + resource_name + " can't be deleted because it is in use"); }, enableDisableResource: function (resource_id, new_state) { var params = {}; params['${PARAM_PROJECT_ID}'] = '${project.projectId}'; params['${PARAM_RESOURCE_ID}'] = resource_id; params['${PARAM_RESOURCE_STATE}'] = new_state; params['action'] = 'enableDisableResource'; if (confirm('Are you sure you want to ' + (new_state ? 'enable' : 'disable') + ' this resource?')) { BS.ajaxRequest(this.actionsUrl, { parameters: params, onSuccess: function () { window.location.reload(); } }); } } }; </script> <script type="text/javascript"> var myValues; var r; <c:forEach var="item" items="${bean.ownResources}"> <c:set var="type" value="${item.type}"/> r = { name: '<bs:escapeForJs text="${item.name}"/>', type: '${item.type}', enabled: ${item.enabled}, id: '${item.id}' }; <c:choose> <%-- quoted resource--%> <c:when test="${type == type_quota}"> r['quota'] = '${item.quota}'; r['infinite'] = ${item.infinite}; BS.ResourceDialog.myData['<bs:escapeForJs text="${item.id}"/>'] = r; </c:when> <%-- custom resource--%> <c:when test="${type == type_custom}"> myValues = []; <c:forEach items="${item.values}" var="val"> myValues.push('<bs:escapeForJs text="${val}"/>'); </c:forEach> r['customValues'] = myValues; BS.ResourceDialog.myData['<bs:escapeForJs text="${item.id}"/>'] = r; </c:when> <c:otherwise> console.log('Resource [<bs:escapeForJs text="${item.name}"/>] was not recognized'); </c:otherwise> </c:choose> </c:forEach> </script> <div class="section noMargin"> <h2 class="noBorder">Shared Resources</h2> <div class="grayNote"> This page lists shared resources defined in the current project, as well as inherited resources.<bs:help file="Shared+Resources"/> </div> <bs:messages key="<%=SharedResourcesPluginConstants.WEB.ACTION_MESSAGE_KEY%>"/> <c:if test="${canEdit}"> <forms:addButton id="addNewResource" onclick="BS.ResourceDialog.showDialog(); return false">Add new resource</forms:addButton> </c:if> <div> <%@ include file="_resourcesDialog.jspf" %> <%@ include file="_displayErrors.jspf" %> <c:if test="${not empty bean.ownResources}"> <p style="margin-top: 2em">Resources defined in the current project</p> <l:tableWithHighlighting id="resourcesTable" className="parametersTable" mouseovertitle="Click to edit resource" highlightImmediately="true"> <tr> <th>Resource Name</th> <th colspan="${canEdit ? 3 : 2}">Description</th> </tr> <c:set var="resourcesToDisplay" value="${bean.ownResources}"/> <c:set var="ownResources" value="${true}"/> <c:set var="currentProject" value="${project}"/> <%@ include file="_displayResources.jspf" %> </l:tableWithHighlighting> </c:if> <c:forEach var="pathElement" items="${bean.projectPath}"> <c:set var="projectResources" value="${bean.inheritedResources[pathElement.projectId]}"/> <c:if test="${not empty projectResources}"> <p style="margin-top: 2em"> Resources inherited from <authz:authorize projectId="${pathElement.externalId}" allPermissions="EDIT_PROJECT" > <jsp:attribute name="ifAccessGranted"> <c:url var="editUrl" value="/admin/editProject.html?projectId=${pathElement.externalId}&tab=JetBrains.SharedResources"/> <a href="${editUrl}"><c:out value="${pathElement.extendedFullName}"/></a> </jsp:attribute> <jsp:attribute name="ifAccessDenied"> <bs:projectLink project="${pathElement}"><c:out value="${pathElement.extendedFullName}"/></bs:projectLink> </jsp:attribute> </authz:authorize> </p> <table class="parametersTable"> <tr> <th>Resource Name</th> <th>Description</th> </tr> <c:set var="resourcesToDisplay" value="${projectResources}"/> <c:set var="canEdit" value="${false}"/> <c:set var="ownResources" value="${false}"/> <c:set var="currentProject" value="${pathElement}"/> <%@ include file="_displayResources.jspf" %> </table> </c:if> </c:forEach> </div> </div>