xflaimbackend can query dictionary container,
[opensuse:sxkeeper.git] / src / de / suse / backends / XFlaimIndexes.java
1 /*
2  * Copyright (c) - 2007 by Thomas Schmidt <tschmidt@suse.de>
3  * 
4  * This file is part of the SUSE XML (SX) project. 
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of version 2 of the GNU General Public License as
8  * published by the Free Software Foundation.
9  */
10 package de.suse.backends;
11
12 import java.io.*;
13 import java.util.*;
14 import java.util.regex.*;
15
16 import org.apache.log4j.*;
17 import org.jdom.*;
18 import org.jdom.input.*;
19
20 import xflaim.*;
21
22 import de.suse.backends.*;
23 import de.suse.security.*;
24 import de.suse.xml.*;
25
26
27 /**
28  * Adding indexes to the xflaim feature container
29  * @author tschmidt
30  */
31
32 public class XFlaimIndexes {
33
34     private String containerName = "feature";
35     private Db indexDb;
36     private SxBackendIface backend = null;
37     private final Logger log = Logger.getLogger("de.suse.backends");
38     
39     
40     public XFlaimIndexes() throws Exception {
41         backend = DataManager.getInstance().getBackend();
42         
43     }
44     
45     
46     public static void main(String[] args) throws Exception {
47         XFlaimIndexes indexCreator = new XFlaimIndexes();
48     }
49     
50       
51     /**
52      * Add index on an element. 
53      * @param type - "value" or "presence"
54      */
55     public void addIndexElement(String elementName, String type) throws Exception {
56         String indexName = "element:" + type + ":" + elementName;
57         List res = ((XflaimBackend) backend).queryDocuments(new SXDocumentType(containerName), 
58                 "/xflaim:Index[@xflaim:name=\"" + indexName + "\"]", xflaim.Collections.DICTIONARY);
59         if (res.size() > 0)
60             throw new Exception("Index: " + indexName + " already exists.");
61         
62         log.debug("adding index: " + indexName);
63         indexDb = ((XflaimBackend) backend).getContainer(containerName);
64         indexDb.transBegin(TransactionType.UPDATE_TRANS, 10, 0);
65         String doc = "<xflaim:Index xmlns:xflaim=\"http://www.novell.com/XMLDatabase/Schema\" xflaim:name=\"" + 
66         indexName + "\" >" + "<xflaim:ElementComponent xflaim:name=\"" + elementName + "\" xflaim:KeyComponent=\"1\" " + 
67         "xflaim:IndexOn=\"" + type + "\"/></xflaim:Index>";      
68         IStream jIStream = ((XflaimBackend) backend).getDbSystem().openBufferIStream(doc);
69         indexDb.Import(jIStream, xflaim.Collections.DICTIONARY);
70         indexDb.transCommit();        
71     }
72
73
74     
75     public String getContainerName() {
76         return containerName;
77     }
78
79     public void setContainerName(String containerName) {
80         this.containerName = containerName;
81     }
82  
83  }