KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > gjt > sp > jedit > JEditRegisterSaver


1 /*
2  * JEditRegisterSaver.java - Handles services.xml files in plugins
3  * :tabSize=8:indentSize=8:noTabs=false:
4  * :folding=explicit:collapseFolds=1:
5  *
6  * Copyright (C) 2006 Matthieu Casanova
7  *
8  * This program is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU General Public License
10  * as published by the Free Software Foundation; either version 2
11  * of the License, or any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software
20  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
21  */

22 package org.gjt.sp.jedit;
23
24 import org.gjt.sp.util.Log;
25 import org.gjt.sp.util.XMLUtilities;
26 import org.gjt.sp.util.IOUtilities;
27 import org.xml.sax.helpers.DefaultHandler JavaDoc;
28 import org.xml.sax.InputSource JavaDoc;
29 import org.xml.sax.Attributes JavaDoc;
30
31 import java.io.*;
32
33 /**
34  * @author Matthieu Casanova
35  * @version $Id: FoldHandler.java 5568 2006-07-10 20:52:23Z kpouer $
36  */

37 public class JEditRegisterSaver implements RegisterSaver
38 {
39     //{{{ loadRegisters() method
40
public void loadRegisters()
41     {
42         String JavaDoc settingsDirectory = jEdit.getSettingsDirectory();
43         if(settingsDirectory == null)
44             return;
45
46         File registerFile = new File(MiscUtilities.constructPath(
47             jEdit.getSettingsDirectory(),"registers.xml"));
48         if(!registerFile.exists())
49             return;
50
51         registersModTime = registerFile.lastModified();
52
53         Log.log(Log.MESSAGE,jEdit.class,"Loading registers.xml");
54
55         RegistersHandler handler = new RegistersHandler();
56         try
57         {
58             Registers.setLoading(true);
59             XMLUtilities.parseXML(new FileInputStream(registerFile),
60                         handler);
61         }
62         catch (IOException ioe)
63         {
64             Log.log(Log.ERROR, Registers.class, ioe);
65         }
66         finally
67         {
68             Registers.setLoading(false);
69         }
70     } //}}}
71

72     //{{{ saveRegisters() method
73
public void saveRegisters()
74     {
75
76         Log.log(Log.MESSAGE,Registers.class,"Saving registers.xml");
77         File file1 = new File(MiscUtilities.constructPath(
78             jEdit.getSettingsDirectory(), "#registers.xml#save#"));
79         File file2 = new File(MiscUtilities.constructPath(
80             jEdit.getSettingsDirectory(), "registers.xml"));
81         if(file2.exists() && file2.lastModified() != registersModTime)
82         {
83             Log.log(Log.WARNING,Registers.class,file2 + " changed"
84                 + " on disk; will not save registers");
85             return;
86         }
87
88         jEdit.backupSettingsFile(file2);
89
90         String JavaDoc lineSep = System.getProperty("line.separator");
91
92         BufferedWriter out = null;
93
94         boolean ok = false;
95
96         try
97         {
98             out = new BufferedWriter(new FileWriter(file1));
99
100             out.write("<?xml version=\"1.0\"?>");
101             out.write(lineSep);
102             out.write("<!DOCTYPE REGISTERS SYSTEM \"registers.dtd\">");
103             out.write(lineSep);
104             out.write("<REGISTERS>");
105             out.write(lineSep);
106
107             Registers.Register[] registers = Registers.getRegisters();
108             for(int i = 0; i < registers.length; i++)
109             {
110                 Registers.Register register = registers[i];
111                 if(register == null ||
112                                    i == '$' ||
113                                    i == '%' ||
114                                    register.toString().length() == 0
115                                   )
116                     continue;
117
118                 out.write("<REGISTER NAME=\"");
119                 if(i == '"')
120                     out.write("&quot;");
121                 else
122                     out.write((char)i);
123                 out.write("\">");
124
125                 out.write(XMLUtilities.charsToEntities(
126                     register.toString(), false));
127
128                 out.write("</REGISTER>");
129                 out.write(lineSep);
130             }
131
132             out.write("</REGISTERS>");
133             out.write(lineSep);
134
135             ok = true;
136         }
137         catch(Exception JavaDoc e)
138         {
139             Log.log(Log.ERROR,Registers.class,e);
140         }
141         finally
142         {
143             IOUtilities.closeQuietly(out);
144         }
145
146         if(ok)
147         {
148             /* to avoid data loss, only do this if the above
149              * completed successfully */

150             file2.delete();
151             file1.renameTo(file2);
152         }
153
154         registersModTime = file2.lastModified();
155     } //}}}
156

157     private static long registersModTime;
158
159     //{{{ RegistersHandler class
160
static class RegistersHandler extends DefaultHandler JavaDoc
161         {
162         //{{{ resolveEntity() method
163
public InputSource JavaDoc resolveEntity(String JavaDoc publicId, String JavaDoc systemId)
164         {
165             return XMLUtilities.findEntity(systemId, "registers.dtd", getClass());
166         } //}}}
167

168         //{{{ startElement() method
169
public void startElement(String JavaDoc uri, String JavaDoc localName,
170                      String JavaDoc qName, Attributes JavaDoc attrs)
171         {
172             registerName = attrs.getValue("NAME");
173             inRegister = "REGISTER".equals(qName);
174         } //}}}
175

176         //{{{ endElement() method
177
public void endElement(String JavaDoc uri, String JavaDoc localName, String JavaDoc name)
178         {
179             if(name.equals("REGISTER"))
180             {
181                 if(registerName == null || registerName.length() != 1)
182                     Log.log(Log.ERROR,this,"Malformed NAME: " + registerName);
183                 else
184                     Registers.setRegister(registerName.charAt(0),charData.toString());
185                 inRegister = false;
186                 charData.setLength(0);
187             }
188         } //}}}
189

190         //{{{ characters() method
191
public void characters(char[] ch, int start, int length)
192         {
193             if (inRegister)
194                 charData.append(ch, start, length);
195         } //}}}
196

197         //{{{ Private members
198
private String JavaDoc registerName;
199         private StringBuffer JavaDoc charData = new StringBuffer JavaDoc();
200         private boolean inRegister;
201         //}}}
202
} //}}}
203
}
204
Popular Tags