KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > fr > jayasoft > ivy > xml > XmlModuleDescriptorWriter


1 /*
2  * This file is subject to the license found in LICENCE.TXT in the root directory of the project.
3  *
4  * #SNAPSHOT#
5  */

6 package fr.jayasoft.ivy.xml;
7
8 import java.io.File JavaDoc;
9 import java.io.FileOutputStream JavaDoc;
10 import java.io.IOException JavaDoc;
11 import java.io.PrintWriter JavaDoc;
12 import java.util.Arrays JavaDoc;
13 import java.util.Collection JavaDoc;
14 import java.util.HashSet JavaDoc;
15
16 import fr.jayasoft.ivy.Artifact;
17 import fr.jayasoft.ivy.Configuration;
18 import fr.jayasoft.ivy.DefaultModuleDescriptor;
19 import fr.jayasoft.ivy.DependencyArtifactDescriptor;
20 import fr.jayasoft.ivy.DependencyDescriptor;
21 import fr.jayasoft.ivy.Ivy;
22 import fr.jayasoft.ivy.ModuleDescriptor;
23
24 /**
25  * @author Xavier Hanin
26  *
27  */

28 public class XmlModuleDescriptorWriter {
29     public static void write(ModuleDescriptor md, File JavaDoc output) throws IOException JavaDoc {
30         if (output.getParentFile() != null) {
31             output.getParentFile().mkdirs();
32         }
33         PrintWriter JavaDoc out = new PrintWriter JavaDoc(new FileOutputStream JavaDoc(output));
34         try {
35             out.println("<ivy-module version=\"1.0\">");
36             out.println("\t<info organisation=\""+md.getModuleRevisionId().getOrganisation()+"\"");
37             out.println("\t\tmodule=\""+md.getModuleRevisionId().getName()+"\"");
38             String JavaDoc branch = md.getResolvedModuleRevisionId().getBranch();
39             if (branch != null) {
40                 out.println("\t\tbranch=\""+branch+"\"");
41             }
42             String JavaDoc revision = md.getResolvedModuleRevisionId().getRevision();
43             if (revision != null) {
44                 out.println("\t\trevision=\""+revision+"\"");
45             }
46             out.println("\t\tstatus=\""+md.getStatus()+"\"");
47             out.println("\t\tpublication=\""+Ivy.DATE_FORMAT.format(md.getResolvedPublicationDate())+"\"");
48             if (md.isDefault()) {
49                 out.println("\t\tdefault=\"true\"");
50             }
51             if (md instanceof DefaultModuleDescriptor) {
52                 DefaultModuleDescriptor dmd = (DefaultModuleDescriptor)md;
53                 if (dmd.getNamespace() != null && !dmd.getNamespace().getName().equals("system")) {
54                     out.println("\t\tnamespace=\""+dmd.getNamespace().getName()+"\"");
55                 }
56             }
57             out.println("\t/>");
58             Configuration[] confs = md.getConfigurations();
59             if (confs.length > 0) {
60                 out.println("\t<configurations>");
61                 for (int i = 0; i < confs.length; i++) {
62                     out.print("\t\t<conf");
63                     out.print(" name=\""+confs[i].getName()+"\"");
64                     out.print(" visibility=\""+confs[i].getVisibility()+"\"");
65                     if (confs[i].getDescription() != null) {
66                         out.print(" description=\""+confs[i].getDescription()+"\"");
67                     }
68                     String JavaDoc[] exts = confs[i].getExtends();
69                     if (exts.length > 0) {
70                         out.print(" extends=\"");
71                         for (int j = 0; j < exts.length; j++) {
72                             out.print(exts[j]);
73                             if (j+1 < exts.length) {
74                                 out.print(",");
75                             }
76                         }
77                         out.print("\"");
78                     }
79                     out.println("/>");
80                 }
81                 out.println("\t</configurations>");
82             }
83             out.println("\t<publications>");
84             Artifact[] artifacts = md.getAllArtifacts();
85             for (int i = 0; i < artifacts.length; i++) {
86                 out.print("\t\t<artifact");
87                 out.print(" name=\""+artifacts[i].getName()+"\"");
88                 out.print(" type=\""+artifacts[i].getType()+"\"");
89                 out.print(" ext=\""+artifacts[i].getExt()+"\"");
90                 out.print(" conf=\""+getConfs(md, artifacts[i])+"\"");
91                 out.println("/>");
92             }
93             out.println("\t</publications>");
94             
95             DependencyDescriptor[] dds = md.getDependencies();
96             if (dds.length > 0) {
97                 out.println("\t<dependencies>");
98                 for (int i = 0; i < dds.length; i++) {
99                     out.print("\t\t<dependency");
100                     out.print(" org=\""+dds[i].getDependencyRevisionId().getOrganisation()+"\"");
101                     out.print(" name=\""+dds[i].getDependencyRevisionId().getName()+"\"");
102                     out.print(" rev=\""+dds[i].getDependencyRevisionId().getRevision()+"\"");
103                     if (dds[i].isForce()) {
104                         out.print(" force=\""+dds[i].isForce()+"\"");
105                     }
106                     if (dds[i].isChanging()) {
107                         out.print(" changing=\""+dds[i].isChanging()+"\"");
108                     }
109                     if (!dds[i].isTransitive()) {
110                         out.print(" transitive=\""+dds[i].isTransitive()+"\"");
111                     }
112                     out.print(" conf=\"");
113                     String JavaDoc[] modConfs = dds[i].getModuleConfigurations();
114                     for (int j = 0; j < modConfs.length; j++) {
115                         String JavaDoc[] depConfs = dds[i].getDependencyConfigurations(modConfs[j]);
116                         out.print(modConfs[j]+"->");
117                         for (int k = 0; k < depConfs.length; k++) {
118                             out.print(depConfs[k]);
119                             if (k+1 < depConfs.length) {
120                                 out.print(",");
121                             }
122                         }
123                         if (j+1 < modConfs.length) {
124                             out.print(";");
125                         }
126                     }
127                     out.print("\"");
128                     DependencyArtifactDescriptor[] includes = dds[i].getAllDependencyArtifactsIncludes();
129                     if (includes.length > 0) {
130                         out.println(">");
131                         for (int j = 0; j < includes.length; j++) {
132                             out.print("\t\t\t<include");
133                             out.print(" name=\""+includes[j].getName()+"\"");
134                             out.print(" type=\""+includes[j].getType()+"\"");
135                             out.print(" ext=\""+includes[j].getExt()+"\"");
136                             String JavaDoc[] dadconfs = includes[j].getConfigurations();
137                             if (!Arrays.asList(dadconfs).equals(Arrays.asList(md.getConfigurationsNames()))) {
138                                 out.print(" conf=\"");
139                                 for (int k = 0; k < dadconfs.length; k++) {
140                                     out.print(dadconfs[k]);
141                                     if (k+1 < dadconfs.length) {
142                                         out.print(",");
143                                     }
144                                 }
145                                 out.print("\"");
146                             }
147                             out.println("/>");
148                         }
149                     }
150                     DependencyArtifactDescriptor[] excludes = dds[i].getAllDependencyArtifactsExcludes();
151                     if (excludes.length > 0) {
152                         if (includes.length == 0) {
153                             out.println(">");
154                         }
155                         for (int j = 0; j < excludes.length; j++) {
156                             out.print("\t\t\t<exclude");
157                             out.print(" org=\""+excludes[j].getId().getModuleId().getOrganisation()+"\"");
158                             out.print(" module=\""+excludes[j].getId().getModuleId().getName()+"\"");
159                             out.print(" name=\""+excludes[j].getName()+"\"");
160                             out.print(" type=\""+excludes[j].getType()+"\"");
161                             out.print(" ext=\""+excludes[j].getExt()+"\"");
162                             String JavaDoc[] dadconfs = excludes[j].getConfigurations();
163                             if (!Arrays.asList(dadconfs).equals(Arrays.asList(md.getConfigurationsNames()))) {
164                                 out.print(" conf=\"");
165                                 for (int k = 0; k < dadconfs.length; k++) {
166                                     out.print(dadconfs[k]);
167                                     if (k+1 < dadconfs.length) {
168                                         out.print(",");
169                                     }
170                                 }
171                                 out.print("\"");
172                             }
173                             out.println("/>");
174                         }
175                     }
176                     if (includes.length + excludes.length == 0) {
177                         out.println("/>");
178                     } else {
179                         out.println("\t\t</dependency>");
180                     }
181                 }
182                 out.println("\t</dependencies>");
183             }
184             out.println("</ivy-module>");
185         } finally {
186             out.close();
187         }
188     }
189
190     private static String JavaDoc getConfs(ModuleDescriptor md, Artifact artifact) {
191         StringBuffer JavaDoc ret = new StringBuffer JavaDoc();
192     
193         String JavaDoc[] confs = md.getConfigurationsNames();
194         for (int i = 0; i < confs.length; i++) {
195             if (Arrays.asList(md.getArtifacts(confs[i])).contains(artifact)) {
196                 ret.append(confs[i]).append(",");
197             }
198         }
199         if (ret.length() > 0) {
200             ret.setLength(ret.length() - 1);
201         }
202         return ret.toString();
203     }
204 }
205
Popular Tags