1 6 package fr.jayasoft.ivy.xml; 7 8 import java.io.File ; 9 import java.io.FileOutputStream ; 10 import java.io.IOException ; 11 import java.io.PrintWriter ; 12 import java.util.Arrays ; 13 import java.util.Collection ; 14 import java.util.HashSet ; 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 28 public class XmlModuleDescriptorWriter { 29 public static void write(ModuleDescriptor md, File output) throws IOException { 30 if (output.getParentFile() != null) { 31 output.getParentFile().mkdirs(); 32 } 33 PrintWriter out = new PrintWriter (new FileOutputStream (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 branch = md.getResolvedModuleRevisionId().getBranch(); 39 if (branch != null) { 40 out.println("\t\tbranch=\""+branch+"\""); 41 } 42 String 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 [] 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 [] modConfs = dds[i].getModuleConfigurations(); 114 for (int j = 0; j < modConfs.length; j++) { 115 String [] 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 [] 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 [] 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 getConfs(ModuleDescriptor md, Artifact artifact) { 191 StringBuffer ret = new StringBuffer (); 192 193 String [] 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 |