Project

General

Profile

1 522 berkley
/**
2
 *  '$RCSfile$'
3 669 jones
 *    Purpose: A class that handles xml messages passed by the
4
 *             replication handler
5 522 berkley
 *  Copyright: 2000 Regents of the University of California and the
6
 *             National Center for Ecological Analysis and Synthesis
7
 *    Authors: Chad Berkley
8
 *    Release: @release@
9
 *
10
 *   '$Author$'
11
 *     '$Date$'
12
 * '$Revision$'
13 669 jones
 *
14
 * This program is free software; you can redistribute it and/or modify
15
 * it under the terms of the GNU General Public License as published by
16
 * the Free Software Foundation; either version 2 of the License, or
17
 * (at your option) any later version.
18
 *
19
 * This program is distributed in the hope that it will be useful,
20
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
21
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
22
 * GNU General Public License for more details.
23
 *
24
 * You should have received a copy of the GNU General Public License
25
 * along with this program; if not, write to the Free Software
26
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
27 522 berkley
 */
28
29
package edu.ucsb.nceas.metacat;
30
31 2608 tao
32 522 berkley
import java.util.Vector;
33
34
import org.xml.sax.Attributes;
35
import org.xml.sax.SAXException;
36
import org.xml.sax.helpers.DefaultHandler;
37
38
/**
39 561 berkley
 * A Class implementing callback bethods for the SAX parser to
40 522 berkley
 * call when processing the XML messages from the replication handler
41
 */
42
public class ReplMessageHandler extends DefaultHandler
43
{
44
  private Vector updates = new Vector();
45
  private Vector indivUpdate = new Vector();
46 554 berkley
  private Vector indivDelete = new Vector();
47 2608 tao
  private Vector indivRevision = new Vector();
48 554 berkley
  private Vector deletes = new Vector();
49 2608 tao
  private Vector revisions = new Vector();
50 532 berkley
  private String server;
51 1036 tao
  private String dataFile;
52 554 berkley
  private boolean update = false;
53
  private boolean delete = false;
54 2608 tao
  private boolean revision = false;
55 522 berkley
  String currentTag = new String();
56 1584 tao
  StringBuffer textBuffer = null;
57 522 berkley
58
  public ReplMessageHandler()
59
  {
60
  }
61
62
  /**
63
   * This method starts a new vector for each updatedDocument tag.
64
   */
65
  public void startElement(String uri, String localName, String qName,
66
                           Attributes attributes) throws SAXException
67
  {
68 1584 tao
    textBuffer = new StringBuffer();
69 522 berkley
    currentTag = localName;
70
    if(localName.equals("updatedDocument"))
71
    {
72
      indivUpdate = new Vector();
73 554 berkley
      update = true;
74 522 berkley
    }
75 554 berkley
    else if(localName.equals("deletedDocument"))
76
    {
77
      indivDelete = new Vector();
78
      delete = true;
79
    }
80 2608 tao
    else if (localName.equals("revisionDocument"))
81
    {
82
      indivRevision = new Vector();
83
      revision = true;
84
    }
85
86 522 berkley
  }
87
88
  /**
89
   * This method write the indivUpdate to updates when it finds the end of
90
   */
91
  public void endElement(String uri, String localName, String qName)
92
              throws SAXException
93
  {
94 2608 tao
    if(currentTag.equals("docid") && update)
95 522 berkley
    {
96 1584 tao
      indivUpdate.add(textBuffer.toString());
97 522 berkley
    }
98 554 berkley
    else if(currentTag.equals("docid") && delete)
99 522 berkley
    {
100 1584 tao
      indivDelete.add(textBuffer.toString());
101 554 berkley
    }
102 2608 tao
    else if (currentTag.equals("docid") && revision)
103
    {
104
      indivRevision.add(textBuffer.toString());
105
    }
106 554 berkley
107 577 berkley
    if(currentTag.equals("rev") && update)
108
    {
109 1584 tao
      indivUpdate.add(textBuffer.toString());
110 577 berkley
      indivUpdate.add(server);
111
    }
112
    else if(currentTag.equals("rev") && delete)
113
    {
114 1584 tao
      indivDelete.add(textBuffer.toString());
115 577 berkley
      indivDelete.add(server);
116
    }
117 2608 tao
    else if(currentTag.equals("rev") && revision)
118
    {
119
      indivRevision.add(textBuffer.toString());
120
      indivRevision.add(server);
121
    }
122 577 berkley
123 554 berkley
    if(currentTag.equals("date_updated") && update)
124
    {
125 1584 tao
      indivUpdate.add(textBuffer.toString());
126 532 berkley
      indivUpdate.add(server);
127 522 berkley
    }
128 554 berkley
    else if(currentTag.equals("date_updated") && delete)
129
    {
130 1584 tao
      indivDelete.add(textBuffer.toString());
131 554 berkley
      indivDelete.add(server);
132
    }
133 2608 tao
    else if(currentTag.equals("date_updated") && revision)
134
    {
135
      indivRevision.add(textBuffer.toString());
136
      indivRevision.add(server);
137
    }
138 554 berkley
139 532 berkley
    if(currentTag.equals("server"))
140
    {
141 1584 tao
      server = textBuffer.toString();
142 532 berkley
    }
143 1036 tao
144
    //Adding data file attribute into indivUpdate vector
145
    if (currentTag.equals("datafile"))
146
    {
147 1584 tao
      dataFile = textBuffer.toString();
148 2608 tao
      if (update)
149
      {
150
        indivUpdate.add(dataFile);
151
      }
152
      else if (revision)
153
      {
154
        indivRevision.add(dataFile);
155
      }
156
157
158 1036 tao
    }
159 1584 tao
160
    if(localName.equals("updatedDocument"))
161
    {
162
      updates.add(new Vector(indivUpdate));
163
      update = false;
164
    }
165
    else if(localName.equals("deletedDocument"))
166
    {
167
      deletes.add(new Vector(indivDelete));
168
      delete = false;
169
    }
170 2608 tao
    else if (localName.equals("revisionDocument"))
171
    {
172
       revisions.add(new Vector(indivRevision));
173
       revision = false;
174
    }
175 522 berkley
  }
176
177 1584 tao
  /**
178
   * Take the data out of the docid and date_updated fields
179
   */
180
  public void characters(char[] ch, int start, int length) throws SAXException
181
  {
182
    textBuffer.append(new String(ch, start,length));
183
  }
184
185 554 berkley
  public Vector getUpdatesVect()
186 522 berkley
  {
187
    return updates;
188
  }
189
190 554 berkley
  public Vector getDeletesVect()
191
  {
192
    return deletes;
193
  }
194 2608 tao
195
  public Vector getRevisionsVect()
196
  {
197
     return revisions;
198
  }
199 522 berkley
}