Changeset 7290
- Timestamp:
- Jan 31, 2017, 1:13:44 PM (6 years ago)
- Location:
- trunk
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk
- Property svn:mergeinfo changed
/branches/3.10-stable (added) merged: 7277,7279-7287
- Property svn:mergeinfo changed
-
trunk/config/dist/mysql-queries.xml
r7259 r7290 87 87 </query> 88 88 89 <query id="PS_FIND_OVERRIDE_ID_FOR_PROJECT_ANNOTATION" type="SQL"> 90 <sql> 91 UPDATE [Annotations] 92 SET [override_id] = COALESCE( 93 (SELECT [tmp].[id] FROM ( 94 SELECT [id] FROM [Annotations] 95 WHERE [annotationset_id] = :annotationSetId 96 AND [annotationtype_id] = :annotationTypeId 97 AND [source] = 0 AND [project_id] = 0 98 ) [tmp] ) 99 , 0) 100 WHERE id = :annotationId 101 </sql> 102 <description> 103 Updates the "override_id" column on a newly created project-specific 104 (PRIMARY) annotation to point to the existing default annotation id 105 or 0 if no default annotation exists. To make this query work in MySQL 106 we need a double inner subselect to force a temporary table for the 107 single value we are after. 108 </description> 109 </query> 110 111 <query id="PS_UPDATE_PROJECT_ANNOTATION_OVERRIDE_REF_INHERITED" type="HQL"> 112 <sql> 113 UPDATE [Annotations] 114 SET [override_id] = :annotationId 115 WHERE [annotationset_id] = :annotationSetId 116 AND [inherited_id] IN ( 117 SELECT [tmp].[id] FROM ( 118 SELECT [id] FROM [Annotations] 119 WHERE [annotationset_id] = :parentSetId 120 AND [override_id] = :parentId 121 ) [tmp] 122 ) 123 </sql> 124 <description> 125 Updates the "override_id" column on project-specific annotations 126 to point to a newly created default annotation (INHERITED and 127 CLONED annotations). The subquery will find project-specific annotation 128 on the parent annotation set that is overriding the inherited annotation. 129 130 To make this query work in MySQL we need a double inner subselect 131 to force a temporary table for the values we are after. 132 </description> 133 </query> 134 135 <query id="PS_FIND_OVERRIDE_ID_FOR_PROJECT_ANNOTATION_INHERITED" type="SQL"> 136 <sql> 137 UPDATE [Annotations] 138 SET [override_id] = COALESCE( 139 (SELECT [tmp].[id] FROM ( 140 SELECT [id] FROM [Annotations] 141 WHERE [annotationset_id] = :annotationSetId 142 AND [inherited_id] = :parentOverrideId 143 AND [source] <> 0 144 AND [project_id] = 0 145 ) [tmp]) 146 , 0) 147 WHERE id = :annotationId 148 </sql> 149 <description> 150 Updates the "override_id" column on a newly created project-specific 151 (CLONED or INHERITED) annotation to point to the existing default 152 annotation id or 0 if no default annotation exists. 153 154 To make this query work in MySQL we need a double inner subselect 155 to force a temporary table for the values we are after. 156 </description> 157 </query> 89 158 159 <query id="PS_RESET_OVERRIDE_ON_PROJECT_ANNOTATIONS" type="HQL"> 160 <sql> 161 UPDATE [Annotations] 162 SET [override_id] = 0 163 WHERE [override_id] IN (:deletedAnnotations) 164 OR [inherited_id] IN ( 165 SELECT [tmp].[id] FROM ( 166 SELECT [id] FROM [Annotations] 167 WHERE [override_id] IN (:deletedPrimaryAnnotations) 168 ) [tmp] 169 ) 170 </sql> 171 <description> 172 Reset the "override_id" column on project-specific annotations 173 that points to a default annotation that has been removed. 174 175 To make this query work in MySQL we need a double inner subselect 176 to force a temporary table for the values we are after. 177 </description> 178 </query> 179 90 180 </predefined-queries> -
trunk/src/clients/web/net/sf/basedb/clients/web/AnnotationUtil.java
r7208 r7290 167 167 // The base object has 'id', 'source', 'annotationType' and 'annotation' 168 168 JSONObject json = new JSONObject(); 169 json.put("id", ""+at.getId() + (a!=null ? "-" + a.getId() : "")); 169 String id = ""+at.getId(); 170 if (a != null) id += "-" + a.getId(); 171 if (inherited != null) id += "-" + inherited.getId(); 172 json.put("id", id); 170 173 // If 'a' is null this is a primary annotation that has no current values 171 174 json.put("source", a == null ? (inherited == null ? "PRIMARY" : "INHERITED") : a.getSource().name()); -
trunk/src/core/common-queries.xml
r7263 r7290 3823 3823 <description> 3824 3824 Updates the "override_id" column on a newly created project-specific 3825 ( PRIMARY) annotation to point to the existing default annotation id3826 or 0 if no default annotation exists.3825 (CLONED or INHERITED) annotation to point to the existing default 3826 annotation id or 0 if no default annotation exists. 3827 3827 </description> 3828 3828 </query> -
trunk/src/core/net/sf/basedb/core/HibernateUtil.java
r7252 r7290 1402 1402 session.flush(); 1403 1403 } 1404 catch(HibernateException ex) 1404 catch (ConstraintViolationException ex) 1405 { 1406 // This is the best we can do... I think... 1407 throw new DatabaseException(ex.getSQLException()); 1408 } 1409 catch (StaleStateException ex) 1410 { 1411 throw new ItemModifiedException(ex); 1412 } 1413 catch (HibernateException ex) 1405 1414 { 1406 1415 throw new BaseException(ex); -
trunk/src/test/TestAnnotation.java
r7260 r7290 100 100 // Test: inherit and clone annotations 101 101 int rawBioAssayId = TestRawBioAssay.test_create(Platform.GENERIC, "genepix", null, 0, 0, 0, 0, arrayDesignId, false); 102 int rawBioAssayId2 = TestRawBioAssay.test_create(Platform.GENERIC, "genepix", null, 0, 0, 0, 0, arrayDesignId2, false); 102 103 test_inherit_annotation(Item.RAWBIOASSAY, rawBioAssayId, intAnnotationId, false); 103 104 int clonedId = test_inherit_annotation(Item.RAWBIOASSAY, rawBioAssayId, stringAnnotationId, true); … … 110 111 // Test project specific annotations -- set a default value and a project-specific for "Project #1" 111 112 int defaultProjectAnnotationId = test_annotatate(Item.ARRAYDESIGN, arrayDesignId2, projectSpecificId, 0, "default value"); 113 test_inherit_annotation(Item.RAWBIOASSAY, rawBioAssayId2, defaultProjectAnnotationId, false); 114 112 115 TestProject.test_activate_project(project1, null); 113 116 int project1AnnotationId = test_annotatate(Item.ARRAYDESIGN, arrayDesignId2, projectSpecificId, 0, "project 1 value"); 117 test_inherit_annotation(Item.RAWBIOASSAY, rawBioAssayId2, project1AnnotationId, false); 114 118 TestProject.test_noactive_project(); 119 120 if (defaultProjectAnnotationId == project1AnnotationId) 121 { 122 write("--Create project-specific annotation value FAILED (test returns the default value"); 123 ok = false; 124 } 115 125 116 126 // Check that the annotation values are as expected … … 120 130 TestProject.test_activate_project(project2, null); 121 131 test_project_annotation(Item.ARRAYDESIGN, arrayDesignId2, projectSpecificId, "default value", "project 1 value"); 132 133 134 if (TestUtil.waitBeforeDelete()) TestUtil.waitForEnter(); 135 136 // Remove project-specific annotation 137 test_remove_annotation(Item.ARRAYDESIGN, arrayDesignId2, projectSpecificId); 122 138 TestProject.test_noactive_project(); 123 124 if (TestUtil.waitBeforeDelete()) TestUtil.waitForEnter();139 test_remove_annotation(Item.ARRAYDESIGN, arrayDesignId2, projectSpecificId); 140 125 141 // Remove an annotation that is inherited 126 142 test_remove_annotation(Item.ARRAYDESIGN, arrayDesignId, intId); … … 128 144 129 145 TestRawBioAssay.test_delete(rawBioAssayId); 146 TestRawBioAssay.test_delete(rawBioAssayId2); 130 147 131 148 // Remove the annotations … … 184 201 l.addAll(Arrays.asList(value)); 185 202 Unit unit = unitId != 0 ? Unit.getById(dc, unitId) : null; 186 a.setValuesIfDifferent(l, unit); 203 boolean changed = a.setValuesIfDifferent(l, unit); 204 if (changed && at.getProjectAnnotations() && dc.getSessionControl().getActiveProjectId() != a.getProjectId()) 205 { 206 // We have created a different (project-specific) annotation 207 a = as.getAnnotation(at); 208 } 187 209 } 188 210 dc.commit(); … … 368 390 if (!TestUtil.getSilent()) 369 391 { 370 write(" \tID \tAnnotation type\tAnnotation set\tSource\tP arent\tValues\tUnit\tRaw values");371 write("-- \t-- \t---------------\t--------------\t------\t------ \t------\t----\t----------");392 write(" \tID \tAnnotation type\tAnnotation set\tSource\tProject\tParent\tValues\tUnit\tRaw values"); 393 write("-- \t-- \t---------------\t--------------\t------\t-------\t------\t------\t----\t----------"); 372 394 } 373 395 } … … 387 409 } 388 410 write(i+":\t"+a.getId()+"\t"+a.getAnnotationType()+"\t"+a.getAnnotationSet()+"\t"+ 389 a.getSource()+"\t"+a.get InheritedFrom()+"\t" +411 a.getSource()+"\t"+a.getProjectId()+"\t"+a.getInheritedFrom()+"\t" + 390 412 values + "\t" + a.getUnit() + "\t" + a.getValues()); 391 413 } -
trunk/src/test/TestAnnotationType.java
r7245 r7290 107 107 test_delete(id_boolean); 108 108 test_delete(id_enum); 109 test_delete(id2_enum); 109 110 write("++Testing annotation types "+(ok ? "OK" : "Failed")+"\n"); 110 111 return ok; -
trunk/src/test/TestFileServer.java
r6576 r7290 79 79 out.close(); 80 80 fs.setServerCertificate(out.toByteArray()); 81 fs.getServerX509Certificate().checkValidity(); 81 82 } 82 83 if (clientCertificateFile != null) … … 87 88 fs.setClientCertificate(out.toByteArray()); 88 89 fs.setClientCertificatePassword(clientCertificatePassword); 90 fs.getClientX509Certificate().checkValidity(); 89 91 } 90 92 dc.saveItem(fs); -
trunk/src/test/data/base.onk.lu.se.crt
r7223 r7290 1 1 -----BEGIN CERTIFICATE----- 2 MIIGADCCBOigAwIBAgISA +0qhg6EOXsjmCadwu8LeW99MA0GCSqGSIb3DQEBCwUA2 MIIGADCCBOigAwIBAgISA8zlhTYbJUemcfpe5z8gx/03MA0GCSqGSIb3DQEBCwUA 3 3 MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD 4 ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0xNjE xMDEyMzE1MDBaFw0x5 NzA xMzAyMzE1MDBaMBkxFzAVBgNVBAMTDmJhc2Uub25rLmx1LnNlMIICIjANBgkq6 hkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA wP4+FsJWvAe88wM6JYimiwtruCyhXa4u7 pl+tL9Sirkv7huBkcnLTDK7ZLNYIdui0BPGj09Toqjt+DtrzbFzMkLxRWetDIsMV8 B0N3nqseAcJQW8bdZ2lXx1rv0Jyaeo/nLQocw/5U83TAGiEtdxHNa4d39AROCcSw 9 +pbO4R6dhXlAden77iEVL+ojxwX4ckeFUl3k/gB6kQ2ux+JkMyjglO8INC2ub9XQ 10 9Jb1S4atCKEJLduhcVOD20kPy3iZ/ooU1fvhf3CJqofdAqt70iyR6lpZ07bdmh13 11 JVTpcKxIFPAAM3iYspxQlMjrpLuFFXXLrCle/7iVD8gl84h63DKST+INk4UN5zku 12 cbKC82/7RbHDupRYo9KidtKrwKMhLW0ApnBupaZfPmLdE4n+m8v+AxN32XOWCG6c 13 wrrEcDrZEyR39IA7E6e8CUdhjo6yE91zU5Qepp5LSnwRhA/dzc29/rlye8kNvZqg 14 C09aJtwb8VM93QJfDYLEBqZE5ra5oE2tP/WNZy5+jw1lwxRUfDvQzjckdl7JWmOn 15 7F6pMdj7DsGv6BnOzDOGVgxMAspkFBKmW057wNeUoTxPVfM0rbjWPagn7iOnGWnp 16 7wazFw4+YoHj9WRepLBoB79zJt89ThvuXbD1ngWx0idcRXC4XeaxsRUiDZByoevs 17 MccblD9oB8sCAwEAAaOCAg8wggILMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAU18 BggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQU YfM/19 iXdjQF2+JZ1KcILFsRxv03owHwYDVR0jBBgwFoAUqEpqYwR93brm0Tm3pkVl7/Oo4 ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0xNjEyMzEyMzAxMDBaFw0x 5 NzAzMzEyMzAxMDBaMBkxFzAVBgNVBAMTDmJhc2Uub25rLmx1LnNlMIICIjANBgkq 6 hkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0tH9L14uQFw9IHdkbNiUscUC8+3g3SNb 7 cdBG/g4AWyK8YOdEA5+Rn/C9wNXeZVghUU8McgLx3EN6YNHbyecoBi9wHOlDtiHV 8 ynU6kTB18LSl2D/ZP+qI/ai1VmHeBPBRXIzOImh/2JXQ/dKjie6VBeDZOLDrv94D 9 0c/fJvfmupCOm6VTzDqziBjSU32VTXoWCJN9BjgQkEZ5awGKg4SurAohhwiy5teE 10 Fd1n5W4z9fy4ymX/5lxfK3P7V4frYsdqOEYDevLB+X8KigaFzaM3WJdnluHwRHjP 11 jfmeeHPCHTvqNXKHlaf2S72ak27z5VTqw3HfMd0KUO3oRJxZhocV2HErK/k9CxA6 12 2zy7VqmfpfDW094hED6c0tp5+kXRo4x9ure8S2HWzLc6GXxQf+7SH5sXgxDYwQbp 13 nesz8Z5E/KdgBs53NRNALoUsc/wcaJw1ba+S8IagqQY8sbubOUialhGjssjjRw7c 14 rjtc2ahNArUBa6/mT973eJ8XzvJ6lOvIIdwNp8xMwh5qNITCtE4/RIvMgoDlmO9f 15 JMG0twaIfetsjndmzBK3Wf3wHK/glW3M/3plxAvlHNWUNuwGURspKudBhQQKyEa3 16 HDPl2qFCeyH4oVSZzr1FjKEKC1A00BTdSPUUu88/gxb3o/nmW7Mz4SRcP5ZhLMcL 17 XNwa0OBQ+C8CAwEAAaOCAg8wggILMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAU 18 BggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUI7U9 19 wQUPViEUkRZMaQ1yUfmtSP4wHwYDVR0jBBgwFoAUqEpqYwR93brm0Tm3pkVl7/Oo 20 20 7KEwcAYIKwYBBQUHAQEEZDBiMC8GCCsGAQUFBzABhiNodHRwOi8vb2NzcC5pbnQt 21 21 eDMubGV0c2VuY3J5cHQub3JnLzAvBggrBgEFBQcwAoYjaHR0cDovL2NlcnQuaW50 … … 26 26 IFJlbHlpbmcgUGFydGllcyBhbmQgb25seSBpbiBhY2NvcmRhbmNlIHdpdGggdGhl 27 27 IENlcnRpZmljYXRlIFBvbGljeSBmb3VuZCBhdCBodHRwczovL2xldHNlbmNyeXB0 28 Lm9yZy9yZXBvc2l0b3J5LzANBgkqhkiG9w0BAQsFAAOCAQEA MghFDTBKAZfqUUrT29 Njwy86ufTj2XMR1HyVQbxxrVh3bPGePYEK3pEMaAcFey84zr0N6R89fYr6XcKupK 30 x3XG9COY9PkgkOGTzJDiz8850Y41P96XpMvY8g2HeuRol+dieHpE2kQE7QWk+wsp 31 QwA0avvI68+gg+d6JGE7IyphVmC9waTStx09P77gOjh4mdV7Xk5pWl6XIwsXjxeG 32 hGMMfYo4oLA2M6Le7StD4fLpm9AFkctDVMH71FQSImaWMg4HmN63dKljOYjKHjad 33 +9abpO6JC0DvNcu3FLnb02X8+B8R9MBUmibKL+ole2RN7RrzR8MjQXVIKdbBpXyj 34 bktITw==28 Lm9yZy9yZXBvc2l0b3J5LzANBgkqhkiG9w0BAQsFAAOCAQEAK1bssuC+i7ZtoSZy 29 QaGqG9z1cTZ2GN2kPhFjDPA+3G2KHAiZBpEi85GhpJ+l3WdoV3ncmsTWelZ1+1+k 30 VwGz+N4P4gPLmoDj999kUpRN9dys8jeypcDPx9lqqqSSWWXqmF0a9E9bbzrjI+N0 31 RfnWGuBDBWU0Y8CzcOFlwUxJ8C54V3Z4JsniBADK0SWFUHZHcF9HOZMmH+y5awMs 32 9BJSmwVgo1GXZnTL5fBC2WFUfL7+SJnp+1dJx+FejYhghKThDjc3zKACgHNYc6wm 33 3EEca3idN08FFdQOMOy0xcIxcR5O+hgq6czVbEv2/ypY/ERtDrhL7BuuuQs8/uQ8 34 pTISGw== 35 35 -----END CERTIFICATE----- -
trunk/www/views/jobs/list_jobs.jsp
r7269 r7290 196 196 exportable="true" 197 197 /> 198 <%199 Enumeration<String, String> jobTypes = new Enumeration<String, String>();200 for (ItemSubtype subtype : typeQuery.list(dc))201 {202 jobTypes.add(Integer.toString(subtype.getId()), HTML.encodeTags(subtype.getName()));203 }204 %>205 198 <tbl:columndef 206 199 id="itemSubtype" … … 209 202 exportproperty="itemSubtype.name:string" 210 203 datatype="int" 211 enumeration="<%= jobTypes%>"204 enumeration="<%=Enumeration.fromItems(typeQuery.list(dc), "-none-")%>" 212 205 title="Subtype" 213 206 sortable="true"
Note: See TracChangeset
for help on using the changeset viewer.