001/** 002 * Copyright (C) 2014 Universidade de Aveiro, DETI/IEETA, Bioinformatics Group - http://bioinformatics.ua.pt/ 003 * 004 * This file is part of Dicoogle/dicoogle. 005 * 006 * Dicoogle/dicoogle is free software: you can redistribute it and/or modify 007 * it under the terms of the GNU General Public License as published by 008 * the Free Software Foundation, either version 3 of the License, or 009 * (at your option) any later version. 010 * 011 * Dicoogle/dicoogle is distributed in the hope that it will be useful, 012 * but WITHOUT ANY WARRANTY; without even the implied warranty of 013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 014 * GNU General Public License for more details. 015 * 016 * You should have received a copy of the GNU General Public License 017 * along with Dicoogle. If not, see <http://www.gnu.org/licenses/>. 018 */ 019package pt.ua.dicoogle.core; 020 021import java.io.File; 022import java.io.FileInputStream; 023import java.io.FileNotFoundException; 024import java.io.FileOutputStream; 025import java.io.IOException; 026import java.io.PrintWriter; 027 028import javax.xml.transform.OutputKeys; 029import javax.xml.transform.Transformer; 030import javax.xml.transform.TransformerConfigurationException; 031import javax.xml.transform.TransformerFactory; 032import javax.xml.transform.sax.SAXTransformerFactory; 033import javax.xml.transform.sax.TransformerHandler; 034import javax.xml.transform.stream.StreamResult; 035 036import org.xml.sax.Attributes; 037import org.xml.sax.InputSource; 038import org.xml.sax.SAXException; 039import org.xml.sax.XMLReader; 040import org.xml.sax.helpers.AttributesImpl; 041import org.xml.sax.helpers.DefaultHandler; 042import org.xml.sax.helpers.XMLReaderFactory; 043 044import pt.ua.dicoogle.sdk.Utils.Platform; 045 046/** 047 * 048 * @author Samuel da Costa Campos <samuelcampos@ua.pt> 049 */ 050public class XMLClientSupport extends DefaultHandler { 051 052 private String filePath; 053 054 private ClientSettings cs; 055 056 private boolean isViewer = false; 057 private boolean isHost = false; 058 private boolean isPort = false; 059 private boolean isTempDir = false; 060 private boolean isUsername = false; 061 private boolean isPassword = false; 062 private boolean isAutoConnect = false; 063 064 public XMLClientSupport() { 065 filePath = Platform.homePath() + "clientConfig.xml"; 066 067 cs = ClientSettings.getInstance(); 068 } 069 070 @Override 071 public void startElement(String uri, String localName, String qName, Attributes attribs) { 072 if (localName.equals("ExternalViewer")) { 073 isViewer = true; 074 } 075 else if(localName.equals("DefaultServerHost")){ 076 isHost = true; 077 } 078 else if(localName.equals("DefaultServerPort")){ 079 isPort = true; 080 } 081 else if(localName.equals("DefaultUsername")){ 082 isUsername = true; 083 } 084 else if(localName.equals("DefaultPassword")){ 085 isPassword = true; 086 } 087 else if(localName.equals("TempFilesDir")){ 088 isTempDir = true; 089 } 090 else if(localName.equals("AutoConnect")){ 091 isAutoConnect = true; 092 } 093 094 095 } 096 097 @Override 098 public void endElement(String uri, String localName, String qName) { 099 if (localName.equals("ExternalViewer")) { 100 isViewer = false; 101 } 102 else if(localName.equals("DefaultServerHost")){ 103 isHost = false; 104 } 105 else if(localName.equals("DefaultServerPort")){ 106 isPort = false; 107 } 108 else if(localName.equals("DefaultUsername")){ 109 isUsername = false; 110 } 111 else if(localName.equals("DefaultPassword")){ 112 isPassword = false; 113 } 114 else if(localName.equals("TempFilesDir")){ 115 isTempDir = false; 116 } 117 else if(localName.equals("AutoConnect")){ 118 isAutoConnect = false; 119 } 120 } 121 122 @Override 123 public void characters(char[] data, int start, int length) { 124 if (isViewer) { 125 String sView = new String(data, start, length); 126 cs.setExtV(sView); 127 return; 128 } 129 if(isHost){ 130 String sView = new String(data, start, length); 131 cs.setDefaultServerHost(sView); 132 return; 133 } 134 if(isPort){ 135 String sPort = new String(data, start, length); 136 cs.setDefaultServerPort(Integer.parseInt(sPort)); 137 return; 138 } 139 if(isUsername){ 140 String sUsername = new String(data, start, length); 141 cs.setDefaultUserName(sUsername); 142 return; 143 } 144 if(isPassword){ 145 String sPassword = new String(data, start, length); 146 cs.setDefaultPassword(sPassword); 147 return; 148 } 149 if(isTempDir){ 150 String sDir = new String(data, start, length); 151 cs.setTempFilesDir(sDir); 152 return; 153 } 154 if(isAutoConnect) 155 { 156 String sView = new String(data, start, length); 157 boolean result = false; 158 if (sView.compareToIgnoreCase("true") == 0) 159 result = true; 160 cs.setAutoConnect(result); 161 return; 162 } 163 } 164 165 public ClientSettings getXML() 166 { 167 try 168 { 169 File file = new File(filePath); 170 if (!file.exists()) 171 { 172 cs.setDefaultSettings(); 173 printXML(); 174 return cs; 175 } 176 InputSource src = new InputSource( new FileInputStream(file) ); 177 XMLReader r = XMLReaderFactory.createXMLReader(); 178 r.setContentHandler(this); 179 r.parse(src); 180 return cs; 181 } 182 catch (IOException ex) 183 { 184 185 } 186 catch (SAXException ex) 187 { 188 189 } 190 return null; 191 } 192 193 public void printXML() { 194 FileOutputStream out = null; 195 try { 196 out = new FileOutputStream(filePath); 197 PrintWriter pw = new PrintWriter(out); 198 StreamResult streamResult = new StreamResult(pw); 199 SAXTransformerFactory tf = (SAXTransformerFactory) TransformerFactory.newInstance(); 200 // SAX2.0 ContentHandler. 201 TransformerHandler hd = tf.newTransformerHandler(); 202 Transformer serializer = hd.getTransformer(); 203 serializer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); 204 serializer.setOutputProperty(OutputKeys.METHOD, "xml"); 205 serializer.setOutputProperty(OutputKeys.INDENT, "yes"); 206 serializer.setOutputProperty(OutputKeys.STANDALONE, "yes"); 207 hd.setResult(streamResult); 208 hd.startDocument(); 209 210 //Get a processing instruction 211 //hd.processingInstruction("xml-stylesheet", "type=\"text/xsl\" href=\"mystyle.xsl\""); 212 AttributesImpl atts = new AttributesImpl(); 213 214 String curTitle; 215 216 //root element 217 hd.startElement("", "", "Config", atts); 218 219 hd.startElement("", "", "DirectorySettings", atts); 220 221 curTitle = cs.getExtV(); 222 //external viewer 223 hd.startElement("", "", "ExternalViewer", atts); 224 hd.characters(curTitle.toCharArray(), 0, curTitle.length()); 225 hd.endElement("", "", "ExternalViewer"); 226 227 228 curTitle = cs.getTempFilesDir(); 229 //external viewer 230 hd.startElement("", "", "TempFilesDir", atts); 231 hd.characters(curTitle.toCharArray(), 0, curTitle.length()); 232 hd.endElement("", "", "TempFilesDir"); 233 234 hd.endElement("", "", "DirectorySettings"); 235 236 hd.startElement("", "", "DefaultGUIServer", atts); 237 238 curTitle = cs.getDefaultServerHost(); 239 //external viewer 240 hd.startElement("", "", "DefaultServerHost", atts); 241 hd.characters(curTitle.toCharArray(), 0, curTitle.length()); 242 hd.endElement("", "", "DefaultServerHost"); 243 244 curTitle = String.valueOf(cs.getDefaultServerPort()); 245 //external viewer 246 hd.startElement("", "", "DefaultServerPort", atts); 247 hd.characters(curTitle.toCharArray(), 0, curTitle.length()); 248 hd.endElement("", "", "DefaultServerPort"); 249 250 curTitle = cs.getDefaultUserName(); 251 //external viewer 252 hd.startElement("", "", "DefaultUsername", atts); 253 hd.characters(curTitle.toCharArray(), 0, curTitle.length()); 254 hd.endElement("", "", "DefaultUsername"); 255 256 curTitle = cs.getDefaultPassword(); 257 //external viewer 258 hd.startElement("", "", "DefaultPassword", atts); 259 hd.characters(curTitle.toCharArray(), 0, curTitle.length()); 260 hd.endElement("", "", "DefaultPassword"); 261 262 if (cs.getAutoConnect()) 263 curTitle = "true"; 264 else 265 curTitle = "false"; 266 267 //Enable P2P 268 hd.startElement("", "", "AutoConnect", atts); 269 hd.characters(curTitle.toCharArray(), 0, curTitle.length()); 270 hd.endElement("", "", "AutoConnect"); 271 272 hd.endElement("", "", "DefaultGUIServer"); 273 274 hd.endElement("", "", "Config"); 275 276 hd.endDocument(); 277 278 } catch (TransformerConfigurationException ex) { 279 } catch (SAXException ex) { 280 } catch (FileNotFoundException ex) { 281 } finally { 282 try { 283 out.close(); 284 } catch (IOException ex) { 285 } 286 } 287 } 288}