]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/request/ApplyTemplatesRequest.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.db.layer0 / src / org / simantics / db / layer0 / request / ApplyTemplatesRequest.java
1 /*******************************************************************************\r
2  * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
3  * in Industry THTH ry.\r
4  * All rights reserved. This program and the accompanying materials\r
5  * are made available under the terms of the Eclipse Public License v1.0\r
6  * which accompanies this distribution, and is available at\r
7  * http://www.eclipse.org/legal/epl-v10.html\r
8  *\r
9  * Contributors:\r
10  *     VTT Technical Research Centre of Finland - initial API and implementation\r
11  *******************************************************************************/\r
12 package org.simantics.db.layer0.request;\r
13 \r
14 import java.util.ArrayList;\r
15 import java.util.Collection;\r
16 import java.util.HashMap;\r
17 import java.util.HashSet;\r
18 import java.util.Map;\r
19 \r
20 import org.simantics.db.Resource;\r
21 import org.simantics.db.WriteGraph;\r
22 import org.simantics.db.exception.DatabaseException;\r
23 import org.simantics.db.layer0.adapter.Template;\r
24 import org.simantics.operation.Layer0X;\r
25 \r
26 /**\r
27  * Applies templates to an instance.\r
28  * @author Hannu Niemist�\r
29  */\r
30 public class ApplyTemplatesRequest {\r
31         Map<String, Object> parameters;\r
32         Collection<Resource> contexts;\r
33         \r
34         public ApplyTemplatesRequest(Map<String, Object> parameters,\r
35                         Collection<Resource> contexts) {\r
36                 this.parameters = parameters;\r
37                 this.contexts = contexts;\r
38         }\r
39         \r
40         public ApplyTemplatesRequest(Map<String, Object> parameters) {\r
41                 this(parameters, new ArrayList<Resource>(2));\r
42         }\r
43         \r
44         public ApplyTemplatesRequest() {\r
45                 this(new HashMap<String, Object>());\r
46         }\r
47 \r
48         public void perform(WriteGraph g, Resource resource) throws DatabaseException {\r
49             Layer0X L0X = Layer0X.getInstance(g);\r
50 \r
51                 parameters.put("", resource);\r
52                 \r
53                 // Use default context if no other contexts have been defined\r
54                 if(contexts.isEmpty())\r
55                         contexts.add(L0X.HasTemplate);\r
56                 \r
57                 // Collect templates\r
58                 HashSet<Resource> templates = new HashSet<Resource>();\r
59                 for(Resource context : contexts)\r
60                         templates.addAll(g.getObjects(resource, context));\r
61                 \r
62                 // Apply templates\r
63                 for(Resource template : templates)\r
64                         g.adapt(template, Template.class).apply(g, parameters);\r
65         }\r
66         \r
67         public void addContext(Resource context) {\r
68                 contexts.add(context);\r
69         }\r
70         \r
71         public void addParameter(String key, Object value) {\r
72                 parameters.put(key, value);\r
73         }\r
74         \r
75         public <T> T getParameter(String key) {\r
76                 return (T)parameters.get(key);\r
77         }\r
78         \r
79         public Map<String,Object> getParameters() {\r
80                 return parameters;\r
81         }\r
82 }\r