/*
* eXist Open Source Native XML Database
* Copyright (C) 2010-2012 The eXist Project
* http://exist-db.org
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*
* $Id$
*/
package org.exist.collections.triggers;
import java.util.HashSet;
import java.util.Set;
import java.util.StringTokenizer;
/**
* @author <a href="mailto:shabanovd@gmail.com">Dmitriy Shabanov</a>
*
*/
public class TriggerEvents {
//3 bits?
public static short CREATE = 1;
public static short UPDATE = 2;
public static short COPY = 3;
public static short MOVE = 4;
public static short DELETE = 5;
//1 bit
public static short BEFORE = -1;
public static short AFTER = 1;
//2 bits (because of metadata?)
public static short COLLECTION = 0;
public static short DOCUMENT = 10;
// -1 (BEFORE) * 1 (CREATE) + 1 (COLLECTION) //TODO: bit it
public static short BEFORE_CREATE_COLLECTION = -1;
public static short AFTER_CREATE_COLLECTION = 1;
public static short BEFORE_UPDATE_COLLECTION = -2;
public static short AFTER_UPDATE_COLLECTION = 2;
public static short BEFORE_COPY_COLLECTION = -3;
public static short AFTER_COPY_COLLECTION = 3;
public static short BEFORE_MOVE_COLLECTION = -4;
public static short AFTER_MOVE_COLLECTION = 4;
public static short BEFORE_DELETE_COLLECTION = -5;
public static short AFTER_DELETE_COLLECTION = 5;
public static short BEFORE_CREATE_DOCUMENT = -11;
public static short AFTER_CREATE_DOCUMENT = 11;
public static short BEFORE_UPDATE_DOCUMENT = -12;
public static short AFTER_UPDATE_DOCUMENT = 12;
public static short BEFORE_COPY_DOCUMENT = -13;
public static short AFTER_COPY_DOCUMENT = 13;
public static short BEFORE_MOVE_DOCUMENT = -14;
public static short AFTER_MOVE_DOCUMENT = 14;
public static short BEFORE_DELETE_DOCUMENT = -15;
public static short AFTER_DELETE_DOCUMENT = 15;
public enum EVENTS {
CREATE_COLLECTION,
UPDATE_COLLECTION,
COPY_COLLECTION,
MOVE_COLLECTION,
DELETE_COLLECTION,
CREATE_DOCUMENT,
UPDATE_DOCUMENT,
COPY_DOCUMENT,
MOVE_DOCUMENT,
DELETE_DOCUMENT
}
private final static String EVENTS_STRING [] = {
"CREATE-COLLECTION",
"UPDATE-COLLECTION",
"COPY-COLLECTION",
"MOVE-COLLECTION",
"DELETE-COLLECTION",
"CREATE-DOCUMENT",
"UPDATE-DOCUMENT",
"COPY-DOCUMENT",
"MOVE-DOCUMENT",
"DELETE-DOCUMENT"
};
private final static EVENTS _EVENTS_ [] = {
EVENTS.CREATE_COLLECTION,
EVENTS.UPDATE_COLLECTION,
EVENTS.COPY_COLLECTION,
EVENTS.MOVE_COLLECTION,
EVENTS.DELETE_COLLECTION,
EVENTS.CREATE_DOCUMENT,
EVENTS.UPDATE_DOCUMENT,
EVENTS.COPY_DOCUMENT,
EVENTS.MOVE_DOCUMENT,
EVENTS.DELETE_DOCUMENT
};
public static Set<EVENTS> convertFromString(String events) throws TriggerException {
final Set<EVENTS> result = new HashSet<EVENTS>();
final StringTokenizer tok = new StringTokenizer(events, ", ");
String event;
while(tok.hasMoreTokens()) {
event = tok.nextToken();
int i=0;
while (i < EVENTS_STRING.length){
if (event.equalsIgnoreCase(EVENTS_STRING[i])){
result.add(_EVENTS_[i]);
break;
}
i++;
}
if ( i > EVENTS_STRING.length){
throw new TriggerException(
"Unknown event type '" + event);
}
}
return result;
}
public final static String OLD_EVENTS_STRING [] = {
"STORE",
"UPDATE",
"REMOVE",
};
public static Set<EVENTS> convertFromOldDesign(String events) throws TriggerException {
final Set<EVENTS> result = new HashSet<EVENTS>();
final StringTokenizer tok = new StringTokenizer(events, ", ");
String event;
while(tok.hasMoreTokens()) {
event = tok.nextToken();
int i=0;
while (i<OLD_EVENTS_STRING.length){
if (event.equalsIgnoreCase(OLD_EVENTS_STRING[i])){
break;
}
i++;
}
switch (i) {
case 0:
result.add(EVENTS.CREATE_DOCUMENT);
break;
case 1:
result.add(EVENTS.UPDATE_DOCUMENT);
break;
case 2:
result.add(EVENTS.DELETE_DOCUMENT);
break;
default:
// throw new CollectionConfigurationException(
// "Unknown event type '" + event);
}
}
return result;
}
}