Advertisement
Guest User

Source code

a guest
Aug 28th, 2013
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.11 KB | None | 0 0
  1. import java.io.BufferedReader;
  2. import java.io.BufferedWriter;
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.FileWriter;
  6. import java.io.IOException;
  7. import java.io.InputStreamReader;
  8. import java.util.HashMap;
  9. import java.util.zip.ZipEntry;
  10. import java.util.zip.ZipFile;
  11.  
  12. import javax.swing.JOptionPane;
  13.  
  14. import nu.xom.Builder;
  15. import nu.xom.Document;
  16. import nu.xom.Element;
  17. import nu.xom.Elements;
  18.  
  19.  
  20. public class Main {
  21.     public static void main(String[] args) {
  22.         try {
  23.             HashMap<Integer, String> partNames = loadPartNames();
  24.             HashMap<Integer, Material> materials = loadMaterials();
  25.             String fileName = JOptionPane.showInputDialog("Place the LXF file you want to use in the same directory as this jar.\nThen write the file name (with extension) in the box below.");
  26.             if(!(new File(fileName).exists())) {
  27.                 JOptionPane.showMessageDialog(null, "The file\n"+(new File(fileName).getAbsolutePath())+"\ncould not be found :(");
  28.             }
  29.             Element root = openLXFFile(fileName);
  30.             String fileNameNoExtension = fileName.substring(0, fileName.length() - 4);
  31.             generatePartList(partNames, materials, root, fileNameNoExtension);
  32.             JOptionPane.showMessageDialog(null, "Conversion complete!\nYou can find the new html file with the same name as the LXF in the same directory as this jar.");
  33.         } catch (Exception e) {
  34.             System.out.println("This means that something has gone wrong. Let me know what by sending me what's written below. Thanks!");
  35.             e.printStackTrace();
  36.         }
  37.     }
  38.    
  39.     private static void generatePartList(HashMap<Integer, String> partNames, HashMap<Integer, Material> materials, Element root, String fileNameNoExtension) throws Exception {
  40.         HashMap<Integer, HashMap<Material, Integer>> partCounts = new HashMap<Integer, HashMap<Material, Integer>>();
  41.         Elements brickElements = root.getChildElements();
  42.         for(int i = 0; i < brickElements.size(); i++) {
  43.             Element brickElement = brickElements.get(i);
  44.             Element partElement = brickElement.getFirstChildElement("Part");
  45.             int designID = Integer.parseInt(partElement.getAttributeValue("designID"));
  46.             int materialID = Integer.parseInt(partElement.getAttributeValue("materials").split(",")[0]);
  47.            
  48.             Material material = materials.get(materialID);
  49.             register(partCounts, designID, material);
  50.         }
  51.        
  52.         File output = new File(fileNameNoExtension + ".html");
  53.         if(output.exists()) {
  54.             output.delete();
  55.         }
  56.         output.createNewFile();
  57.        
  58.         FileWriter fileWriter = new FileWriter(output);
  59.         BufferedWriter writer = new BufferedWriter(fileWriter);
  60.         writer.write("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n ");
  61.         writer.write("<html><body>\n");
  62.         writer.write("<table><tr><td><b>part ID</b></td><td><b>part count</b></td><td><b>part name</b></td><td><b>colour</b></td>\n");
  63.         for(int designID : partCounts.keySet()) {
  64.             HashMap<Material, Integer> partMap = partCounts.get(designID);
  65.             for(Material material : partMap.keySet()){
  66.                 writer.write("<tr><td>"+designID+"</td><td>"+partMap.get(material)+"</td><td>"+partNames.get(designID)+"</td><td style=\"background: rgba("+material.red+", "+material.green+", "+material.blue+", "+((double)material.alpha / 255d)+"); \"><br></td>\n");
  67.             }
  68.         }
  69.         writer.write("</table></body></html>");
  70.         writer.close();
  71.         fileWriter.close();
  72.     }
  73.  
  74.     private static void register(HashMap<Integer, HashMap<Material, Integer>> partCounts, int designID, Material material) {
  75.         HashMap<Material, Integer> partMap;
  76.         if(!partCounts.containsKey(designID)) {
  77.             partMap = new HashMap<Material, Integer>();
  78.             partCounts.put(designID, partMap);
  79.         } else {
  80.             partMap = partCounts.get(designID);
  81.         }
  82.         if(!partMap.containsKey(material)) {
  83.             partMap.put(material, 1);
  84.         } else {
  85.             int partCount = partMap.get(material);
  86.             partCount++;
  87.             partMap.put(material, partCount);
  88.             System.out.println(partCount);
  89.         }
  90.     }
  91.  
  92.     private static Element openLXFFile(String fileName) throws Exception {
  93.         ZipFile lxfFile = new ZipFile(fileName);
  94.         ZipEntry entry = lxfFile.getEntry("IMAGE100.LXFML");
  95.        
  96.         Builder builder = new Builder();
  97.         Document doc = builder.build(lxfFile.getInputStream(entry));
  98.         Element root = doc.getRootElement();
  99.         return root.getFirstChildElement("Bricks");
  100.     }
  101.  
  102.     private static HashMap<Integer, Material> loadMaterials() throws Exception {
  103.         Builder builder = new Builder();
  104.         Document doc = builder.build(new FileInputStream("res/materials.xml"));
  105.         Element root = doc.getRootElement();
  106.         Elements materialElements = root.getChildElements();
  107.         HashMap<Integer, Material> materials = new HashMap<Integer, Material>();
  108.        
  109.         for(int i = 0; i < materialElements.size(); i++) {
  110.             Element materialElement = materialElements.get(i);
  111.             int materialID = Integer.parseInt(materialElement.getAttributeValue("MatID"));
  112.             int red = Integer.parseInt(materialElement.getAttributeValue("Red"));
  113.             int green = Integer.parseInt(materialElement.getAttributeValue("Green"));
  114.             int blue = Integer.parseInt(materialElement.getAttributeValue("Blue"));
  115.             int alpha = Integer.parseInt(materialElement.getAttributeValue("Alpha"));
  116.             materials.put(materialID, new Material(red, green, blue, alpha));
  117.         }
  118.        
  119.         return materials;
  120.     }
  121.  
  122.     private static HashMap<Integer, String> loadPartNames() throws IOException {
  123.         File namesFile = new File("res/partNames.txt");
  124.         FileInputStream inStream = new FileInputStream(namesFile);
  125.         InputStreamReader inStreamReader = new InputStreamReader(inStream);
  126.         BufferedReader reader = new BufferedReader(inStreamReader);
  127.        
  128.         HashMap<Integer, String> partNames = new HashMap<Integer, String>();
  129.         while(reader.ready()) {
  130.             String line = reader.readLine();
  131.             String[] parts = line.split("\t");
  132.             int partID = Integer.parseInt(parts[0]);
  133.             partNames.put(partID, parts[1]);
  134.         }
  135.        
  136.         return partNames;
  137.     }
  138. }
  139.  
  140.  
  141.  
  142.  
  143.  
  144.  
  145.  
  146.  
  147.  
  148.  
  149. //FILE: Material.java
  150.  
  151. public class Material {
  152.     public final int red;
  153.     public final int green;
  154.     public final int blue;
  155.     public final int alpha;
  156.    
  157.     public Material(int red, int green, int blue, int alpha) {
  158.         this.red = red;
  159.         this.green = green;
  160.         this.blue = blue;
  161.         this.alpha = alpha;
  162.     }
  163. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement