KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > eclipse > emf > importer > rose > RoseImporterApplication


1 /**
2  * <copyright>
3  *
4  * Copyright (c) 2005 IBM Corporation and others.
5  * All rights reserved. This program and the accompanying materials
6  * are made available under the terms of the Eclipse Public License v1.0
7  * which accompanies this distribution, and is available at
8  * http://www.eclipse.org/legal/epl-v10.html
9  *
10  * Contributors:
11  * IBM - Initial API and implementation
12  *
13  * </copyright>
14  *
15  * $Id: RoseImporterApplication.java,v 1.17 2005/06/22 15:00:23 marcelop Exp $
16  */

17 package org.eclipse.emf.importer.rose;
18
19 import java.io.File JavaDoc;
20 import java.util.HashMap JavaDoc;
21 import java.util.Iterator JavaDoc;
22 import java.util.List JavaDoc;
23 import java.util.Map JavaDoc;
24
25 import org.eclipse.core.runtime.IPath;
26 import org.eclipse.core.runtime.IProgressMonitor;
27 import org.eclipse.core.runtime.Path;
28 import org.eclipse.core.runtime.SubProgressMonitor;
29
30 import org.eclipse.emf.common.util.URI;
31 import org.eclipse.emf.ecore.EPackage;
32 import org.eclipse.emf.importer.ModelImporter;
33 import org.eclipse.emf.importer.ModelImporterApplication;
34
35
36 public class RoseImporterApplication extends ModelImporterApplication
37 {
38   public static class PackageInfo
39   {
40     public String JavaDoc name;
41     public String JavaDoc nsPrefix;
42     public String JavaDoc nsURI;
43     public String JavaDoc base;
44     public String JavaDoc prefix;
45   }
46
47   protected IPath roseModelFullPath;
48   protected IPath genModelFullPath;
49
50   protected boolean noQualify;
51   protected boolean unsettablePrimitive;
52   protected Map JavaDoc pathMap;
53   protected Map JavaDoc nameToPackageInfo;
54   protected Map JavaDoc nameToReferencedPackageInfo;
55
56   public RoseImporter getRoseImporter()
57   {
58     return (RoseImporter)getModelImporter();
59   }
60
61   protected ModelImporter createModelImporter()
62   {
63     return new RoseImporter();
64   }
65
66   protected StringBuffer JavaDoc getUsage()
67   {
68     StringBuffer JavaDoc result = new StringBuffer JavaDoc();
69     appendLine(result, "Usage: <model.mdl> [ <model.genmodel> [ -reload ] ] <OPTION>");
70     appendLine(result, "<OPTION> ::= [ <PROJECT-OPTION> ] [ <PATHMAP> ]");
71     appendLine(result, " { <PACKAGE> }+ { <REF-PACKAGE> }* { <REF-GEN-MODEL> }*");
72     appendLine(result, " [ <TEMPLATE-PATH> ] [ <MODEL-PLUGIN-ID> ] [ <COPYRIGHT> ]");
73     appendLine(result, " [ <SDO> ] [ <QUIET> ]");
74     appendLine(result, "<PROJECT-OPTION> ::= <MODEL-PROJECT> [ <EDIT-PROJECT> ] [ <EDITOR-PROJECT> ]");
75     appendLine(result, " [ <TESTS-PROJECT> ]");
76     appendLine(result, "<MODEL-PROJECT> ::= -modelProject <model-directory> <fragment-path>");
77     appendLine(result, "<EDIT-PROJECT> ::= -editProject <edit-directory> <fragment-path>");
78     appendLine(result, "<EDITOR-PROJECT> ::= -editorProject <editor-directory> <fragment-path>");
79     appendLine(result, "<TESTS-PROJECT> ::= -testsProject <tests-directory> <fragment-path>");
80     appendLine(result, "<PATHMAP> ::= -pathMap { <symbol> <directory> }+");
81     appendLine(result, "<PACKAGE> ::= -package <name> [ <nsPrefix> <nsURI> <base> <prefix> ]");
82     appendLine(result, "<REF-PACKAGE> ::= -refPackage <name> [ <nsPrefix> <nsURI> <base> <prefix> ]");
83     appendLine(result, "<REF-GEN-MODEL> ::= -refGenModel <model.genmodel> { <nsURI> }+");
84     appendLine(result, "<TEMPLATE-PATH> ::= -templatePath <template-directory>");
85     appendLine(result, "<MODEL-PLUGIN-ID> ::= -modelPluginID <plugin-ID>");
86     appendLine(result, "<COPYRIGHT> ::= -copyright <copyright-string>");
87     appendLine(result, "<SDO> ::= -sdo");
88     appendLine(result, "<QUIET> ::= -quiet");
89     appendLine(result, "");
90     appendLine(result, "For example:");
91     appendLine(result, "");
92     appendLine(result, "");
93     appendLine(result, " rose2genmodel");
94     appendLine(result, " ../../etools.company/src/rose/model.mdl");
95     appendLine(result, " result/model/Extended.genmodel");
96     appendLine(result, " -modelProject result src");
97     appendLine(result, " -editProject result.edit src");
98     appendLine(result, " -editorProject result.editor src");
99     appendLine(result, " -pathMap VABASE_PLUGINS_PATH C:/sandbox/unpackage2/eclipse/plugins");
100     appendLine(result, " -package extended Extended Extended.ecore org.example Extended");
101     appendLine(result, " -refPackage company Company Company.ecore org.sample Company");
102     return result;
103   }
104
105   protected void processArguments(String JavaDoc[] arguments, int index)
106   {
107     roseModelFullPath = new Path(new File JavaDoc(arguments[index++]).getAbsolutePath());
108
109     String JavaDoc nextArgument = index < arguments.length ? arguments[index++] : null;
110     genModelFullPath = nextArgument != null && !nextArgument.startsWith("-") ?
111       new Path(new File JavaDoc(nextArgument).getAbsolutePath()) :
112       roseModelFullPath.removeFileExtension().addFileExtension("genmodel");
113
114     super.processArguments(arguments, index);
115   }
116
117   protected int processArgument(String JavaDoc[] arguments, int index)
118   {
119     if (arguments[index].equalsIgnoreCase("-pathmap"))
120     {
121       if (pathMap == null)
122       {
123         pathMap = new HashMap JavaDoc();
124       }
125       do
126       {
127         String JavaDoc variable = arguments[++index];
128         String JavaDoc directory = arguments[++index];
129         pathMap.put(variable, directory);
130       }
131       while (index + 1 < arguments.length && !arguments[index + 1].startsWith("-"));
132     }
133     else if (arguments[index].equalsIgnoreCase("-package"))
134     {
135       if (nameToPackageInfo == null)
136       {
137         nameToPackageInfo = new HashMap JavaDoc();
138       }
139       index = processPackageInformation(arguments, index, nameToPackageInfo);
140     }
141     else if (arguments[index].equalsIgnoreCase("-refPackage"))
142     {
143       System.out.println("**** Instead of -refPackage you should be using -refGenModel");
144       
145       if (nameToReferencedPackageInfo == null)
146       {
147         nameToReferencedPackageInfo = new HashMap JavaDoc();
148       }
149       index = processPackageInformation(arguments, index, nameToReferencedPackageInfo);
150     }
151     else if (arguments[index].equalsIgnoreCase("-unsettablePrimitive"))
152     {
153       unsettablePrimitive = true;
154     }
155     else if (arguments[index].equalsIgnoreCase("-noQualify"))
156     {
157       noQualify = true;
158     }
159     else
160     {
161       return super.processArgument(arguments, index);
162     }
163     return index + 1;
164   }
165
166   protected int processPackageInformation(String JavaDoc[] arguments, int index, Map JavaDoc nameToPackageInfo)
167   {
168     int start = index;
169     PackageInfo packageInfo = new PackageInfo();
170     if (index + 1 < arguments.length && !arguments[index + 1].startsWith("-"))
171     {
172       packageInfo.name = arguments[++index];
173       if (index + 1 < arguments.length && !arguments[index + 1].startsWith("-"))
174       {
175         packageInfo.nsPrefix = arguments[++index];
176         if (index + 1 < arguments.length && !arguments[index + 1].startsWith("-"))
177         {
178           packageInfo.nsURI = arguments[++index];
179           if (index + 1 < arguments.length && !arguments[index + 1].startsWith("-"))
180           {
181             packageInfo.base = arguments[++index];
182             if (index + 1 < arguments.length && !arguments[index + 1].startsWith("-"))
183             {
184               packageInfo.prefix = arguments[++index];
185             }
186           }
187         }
188       }
189       if (index - start != 1 && index - start != 5)
190       {
191         throw new IllegalArgumentException JavaDoc("Error: Expecting either 1 or 5 arguments for " + arguments[start]);
192       }
193       else
194       {
195         nameToPackageInfo.put(packageInfo.name, packageInfo);
196         nameToPackageInfo.put(packageInfo.name.toLowerCase(), packageInfo);
197         return index;
198       }
199     }
200     else
201     {
202       throw new IllegalArgumentException JavaDoc("Error: No package name was specified for " + arguments[start]);
203     }
204   }
205
206   protected void adjustModelImporter(IProgressMonitor progressMonitor)
207   {
208     try
209     {
210       progressMonitor.beginTask("", 2);
211
212       super.adjustModelImporter(new SubProgressMonitor(progressMonitor, 1));
213       RoseImporter roseImporter = getRoseImporter();
214       handleGenModelPath(genModelFullPath);
215       roseImporter.setModelLocation(URI.createFileURI(roseModelFullPath.toOSString()).toString());
216   
217       if (pathMap != null)
218       {
219         roseImporter.getPathMap().putAll(pathMap);
220       }
221       roseImporter.setNoQualify(noQualify);
222       roseImporter.setUnsettablePrimitive(unsettablePrimitive);
223     }
224     finally
225     {
226       progressMonitor.done();
227     }
228   }
229
230   protected void adjustEPackages(IProgressMonitor progressMonitor)
231   {
232     try
233     {
234       progressMonitor.beginTask("", 2);
235       super.adjustEPackages(new SubProgressMonitor(progressMonitor, 1));
236       
237       List JavaDoc ePackages = getRoseImporter().getEPackages();
238       traverseEPackages(ePackages);
239       getRoseImporter().adjustEPackages(new SubProgressMonitor(progressMonitor, 1));
240     }
241     finally
242     {
243       progressMonitor.done();
244     }
245   }
246   
247   protected void traverseEPackages(List JavaDoc ePackages)
248   {
249     for (Iterator JavaDoc i = ePackages.iterator(); i.hasNext();)
250     {
251       EPackage ePackage = (EPackage)i.next();
252       String JavaDoc packageName = ePackage.getName();
253       
254       boolean isReferencedEPackage = false;
255       PackageInfo packageInfo = nameToPackageInfo == null ? null :
256         (PackageInfo)nameToPackageInfo.get(packageName);
257       if (packageInfo == null && nameToReferencedPackageInfo != null)
258       {
259         packageInfo = (PackageInfo)nameToReferencedPackageInfo.get(packageName);
260         isReferencedEPackage = packageInfo != null;
261       }
262       
263       if (packageInfo != null || nameToPackageInfo == null)
264       {
265         handleEPackage(ePackage, !isReferencedEPackage);
266       }
267
268       if (packageInfo != null)
269       {
270         if (!getRoseImporter().hasRoseGenPackageProperties(ePackage))
271         {
272           ePackage.setNsPrefix(packageInfo.nsPrefix);
273           ePackage.setNsURI(packageInfo.nsURI);
274         }
275         
276         ModelImporter.EPackageInfo ePackageInfo = getRoseImporter().getEPackageInfo(ePackage);
277         if (ePackageInfo.getBasePackage() == null)
278         {
279           ePackageInfo.setBasePackage(packageInfo.base);
280         }
281         if (ePackageInfo.getPrefix() == null)
282         {
283           ePackageInfo.setPrefix(packageInfo.prefix);
284         }
285       }
286       
287       handleQualifiedEPackageName(ePackage);
288       traverseEPackages(ePackage.getESubpackages());
289     }
290   }
291 }
292
Popular Tags