1 /*******************************************************************************
\r
2 * Copyright (c) 2007 VTT Technical Research Centre of Finland and others.
\r
3 * All rights reserved. This program and the accompanying materials
\r
4 * are made available under the terms of the Eclipse Public License v1.0
\r
5 * which accompanies this distribution, and is available at
\r
6 * http://www.eclipse.org/legal/epl-v10.html
\r
9 * VTT Technical Research Centre of Finland - initial API and implementation
\r
10 *******************************************************************************/
\r
11 package org.simantics.project.management;
\r
13 import java.util.ArrayList;
\r
14 import java.util.Collection;
\r
15 import java.util.List;
\r
16 import java.util.TreeMap;
\r
17 import java.util.regex.Pattern;
\r
19 import org.simantics.db.ReadGraph;
\r
20 import org.simantics.db.Resource;
\r
21 import org.simantics.db.exception.DatabaseException;
\r
22 import org.simantics.db.request.Read;
\r
23 import org.simantics.layer0.DatabaseManagementResource;
\r
24 import org.simantics.layer0.Layer0;
\r
27 * A description of an graph bundle
\r
29 * @author Toni Kalajainen <toni.kalajainen@vtt.fi>
\r
31 public class OntologySpec {
\r
33 /** Versioned Id pattern */
\r
34 static String ID_PATTERN_STRING = "[a-zA-Z_0-9]+(?:\\.[a-zA-Z_0-9]+)*";
\r
35 static String VERSION_PATTERN_STRING = "(\\d+).(\\d+).(\\d+).([a-zA-Z_0-9\\-]+)";
\r
36 static Pattern ID_PATTERN = Pattern.compile(ID_PATTERN_STRING);
\r
37 static Pattern VERSION_PATTERN = Pattern.compile(VERSION_PATTERN_STRING);
\r
38 static Pattern VERSIONED_ID_PATTERN = Pattern.compile("(" + ID_PATTERN_STRING + ")/" + VERSION_PATTERN_STRING + "");
\r
42 /** OSGi versioned ID - id/major.minor.micro(.qualifier) */
\r
46 * Create new bundle spec
\r
48 * @param name optional name
\r
49 * @param versionedId
\r
51 public OntologySpec(String name, String versionedId) {
\r
52 if (!VERSIONED_ID_PATTERN.matcher(versionedId).matches())
\r
53 throw new IllegalArgumentException("not versioned id");
\r
54 this.versionedId = versionedId;
\r
55 this.name = name == null ? versionedId : name;
\r
58 public String getName() {
\r
62 public String getVersionedId() {
\r
67 public int hashCode() {
\r
68 return versionedId.hashCode();
\r
72 public boolean equals(Object obj) {
\r
73 if (obj == null) return false;
\r
74 if (obj instanceof OntologySpec == false) return false;
\r
75 OntologySpec other = (OntologySpec) obj;
\r
76 return other.versionedId.equals(versionedId);
\r
80 public String toString() {
\r
81 return name + "("+versionedId+")";
\r
84 /** A query that reads all bundles from the database, result is ordered by versioned id */
\r
85 static Read<List<OntologySpec>> QUERY = new Read<List<OntologySpec>>() {
\r
87 public List<OntologySpec> perform(ReadGraph g) throws DatabaseException {
\r
88 DatabaseManagementResource DatabaseManagement = DatabaseManagementResource.getInstance(g);
\r
89 Layer0 L0 = Layer0.getInstance(g);
\r
90 Collection<Resource> tgs = g.getObjects(DatabaseManagement.InstalledGraphBundles, L0.ConsistsOf);
\r
91 TreeMap<String, OntologySpec> result = new TreeMap<String, OntologySpec>();
\r
92 for (Resource tg : tgs) {
\r
93 if ( !g.isInstanceOf(tg, DatabaseManagement.GraphBundle) ) continue;
\r
95 String name = g.getPossibleRelatedValue(tg, L0.HasName);
\r
96 String versionedId = g.getPossibleRelatedValue(tg, DatabaseManagement.HasVersionedId);
\r
97 OntologySpec bs = new OntologySpec(name, versionedId);
\r
98 result.put( bs.versionedId, bs );
\r
99 } catch (IllegalArgumentException iae) {
\r
103 return new ArrayList<OntologySpec>(result.values());
\r