1 package com.openedit.archive.update; 2 3 import java.util.ArrayList ; 4 import java.util.Iterator ; 5 import java.util.List ; 6 7 import org.apache.commons.logging.Log; 8 import org.apache.commons.logging.LogFactory; 9 10 public class ExifEditBuilder { 11 private static final String _SUPPRESS_BACKUP_IMAGE = "/b"; 12 13 private final static String Q = "\""; 14 15 private final static String EscQ = "\\\""; 16 17 private static final Log log = LogFactory.getLog(ExifEditBuilder.class); 18 19 boolean valid = true; 20 21 String filename = ""; 22 23 String comments = ""; 24 25 List ip_keywords = new ArrayList (); 26 27 private boolean makeBackupImage = false; 28 29 public void makeBackupImage() { 30 makeBackupImage = true; 31 } 32 33 public ExifEditBuilder(String filename) { 34 this.filename = filename; 35 } 36 37 public String cmdLineStr() { 38 String result = ""; 39 boolean first = true; 40 List args = cmdLine(); 41 if (args == null) 42 return null; 43 for (Iterator iter = args.iterator(); iter.hasNext();) { 44 String element = (String ) iter.next(); 45 if (!first) 46 result += " "; 47 result += element; 48 first = false; 49 } 50 return result; 51 } 52 53 public List cmdLine() { 54 if (!valid) 55 return null; 56 57 List cmd = new ArrayList (); 58 cmd.add("exifedit"); 59 addBackupFlag(cmd); 60 if (!keywordValid()) 61 return null; 62 addNickNames(cmd); 63 addFilename(cmd); 64 return cmd; 65 } 66 67 private boolean keywordValid() { 68 for (Iterator iter = ip_keywords.iterator(); iter.hasNext();) { 69 String keyword = (String ) iter.next(); 70 if (keyword.contains(";")) { 71 valid = false; 72 return false; 73 } 74 } 75 return true; 76 } 77 78 private void addFilename(List cmd) { 79 cmd.add(filename); 80 } 81 82 private void addBackupFlag(List cmd) { 83 if (!makeBackupImage) 84 cmd.add(_SUPPRESS_BACKUP_IMAGE); 85 } 86 87 private void addNickNames(List cmd) { 88 cmd.add("/a"); 89 String nicknames = ""; 90 nicknames = addKeywords(nicknames); 91 nicknames = addComments(nicknames); 92 cmd.add(quote(nicknames)); 93 } 94 95 private String addComments(String nicknames) { 96 if (comments == null || comments.length() == 0) 97 return nicknames; 98 return nicknames += ",comment=" + Q + comments + Q; 99 } 100 101 private String addKeywords(String nicknames) { 102 boolean first = true; 103 for (Iterator iter = ip_keywords.iterator(); iter.hasNext();) { 104 String keyword = (String ) iter.next(); 105 if (!first) 106 nicknames += ","; 107 nicknames += "ip-keyword=" + Q + keyword + Q; 108 first = false; 109 } 110 return nicknames; 111 } 112 113 public String quote(String nicknames) { 114 nicknames = nicknames.replace(Q, EscQ); 115 return Q + nicknames + Q; 116 } 117 118 public void setKeys(List ip_keywords) { 119 if (ip_keywords.isEmpty()) { 120 log.warn("Empty list of keywords for file: " + filename); 121 valid = false; 122 return; 123 } 124 this.ip_keywords = ip_keywords; 125 } 126 127 public void setComments(String comments) { 128 this.comments = comments; 129 } 130 131 } 132 | Popular Tags |