Ignore:
Timestamp:
2010-12-14T17:15:30+13:00 (14 years ago)
Author:
sjb48
Message:

Working on saving a format statement to the config file. This looks like it should work but changes in FormatAction have caused major issues with Document/Node violations. This is because saving required the format statement as a Document rather than a string (which did work). Added a check to GSXML for xmlNodeToString to check that attrs is not null (attrs will be null unless the node is an element).

Location:
main/trunk/greenstone3/src/java/org/greenstone/gsdl3
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • main/trunk/greenstone3/src/java/org/greenstone/gsdl3/action/FormatAction.java

    r23405 r23489  
    5555   
    5656    String coll = (String)params.get(GSParams.COLLECTION); //SYSTEM_CLUSTER);
     57    //String subaction = (String)params.get(GSParams.SUBACTION);
    5758    String service = (String)params.get(GSParams.SERVICE);
    5859    String classifier = (String)params.get("cl");
     
    6061
    6162    logger.error("Collection="+coll);
     63    logger.error("Subaction="+subaction);
    6264    logger.error("Service="+service);
    6365    logger.error("Classifier="+classifier);
     
    7274    Element mr_request = GSXML.createBasicRequest(this.doc, GSXML.REQUEST_TYPE_FORMAT_STRING, to, lang, uid);
    7375
    74     request.setAttribute("service", service);
    75     if(classifier != null)
    76         request.setAttribute("classifier", classifier);
     76    mr_request.setAttribute("service", service);
     77    mr_request.setAttribute("subaction", subaction);
     78    //if(classifier != null)
     79    mr_request.setAttribute("classifier", classifier);
    7780
    7881    mr_request_message.appendChild(mr_request);
     
    98101            InputSource is = new InputSource( new StringReader( input ) );
    99102            Document d = (Document) builder.parse( is );
    100             //Element e = d.getDocumentElement();
    101             //Node d2 = this.doc.importNode(e,true);
     103            //Node n1 = d.getFirstChild();           
     104            //Document d2 = (Document) this.doc.importNode(e, true);
    102105
    103             //Document format_doc = this.converter.newDOM();
    104             //doc.appendChild(d2);
    105 
    106             //File interface_config_file = new File(GSFile.interfaceConfigFile(GSFile.interfaceHome(GlobalProperties.getGSDL3Home(), (String)this.config_params.get(GSConstants.INTERFACE_NAME))));
    107             //if (!interface_config_file.exists()) {
    108             //  logger.error(" interface config file: "+interface_config_file.getPath()+" not found!");
    109             //}
    110             //Document config_doc = this.converter.getDOM(interface_config_file, "utf-8");
    111             //if (config_doc == null) {
    112             //  logger.error(" could not parse interface config file: "+interface_config_file.getPath());
    113             //}
    114        
    115             //Element config_elem = config_doc.getDocumentElement();
    116             //String base_interface = config_elem.getAttribute("baseInterface");
    117 
     106            //Element format_statement = this.doc.importNode(d, true);
    118107
    119108            // Call XSLT to transform document to xml format string
    120109            XMLTransformer transformer = new XMLTransformer();
    121             //String stylesheet = GSFile.stylesheetFile(GlobalProperties.getGSDL3Home(), (String)this.config_params.get(GSConstants.SITE_NAME), coll, (String)this.config_params.get(GSConstants.INTERFACE_NAME), "oran", "FormatAction");
    122             //logger.error(stylesheet);
     110            // HOW DO I DO THIS PROPERLY?
    123111            Document style_doc = this.converter.getDOM(new File("/home/sam/greenstone3/web/interfaces/oran/transform/formatString.xsl"), "UTF-8");
    124112
     
    127115
    128116            // not sure what to do here - some code from Transforming Receptionist
    129             String transformed = transformer.transformToString(style_doc, d);
    130             //Node transformed = transformer.transform(style_doc, d);
    131            
     117            //String transformed = transformer.transformToString(style_doc, d);
     118            logger.error("About to transform");
     119            Node transformed = (Node) transformer.transform(style_doc, d);  // Failing org.w3c.dom.DOMException: HIERARCHY_REQUEST_ERR: An attempt was made to insert a node where it is not permitted. ; SystemID: file:///home/sam/greenstone3/packages/tomcat/bin/dummy.xsl
     120
     121            logger.error("Transform successful?");
     122         
     123            if(transformed==null)  // not null
     124                logger.error("TRANSFORMED IS NULL");
     125
     126            logger.error("begin import");
     127            Node imported = this.doc.importNode(transformed, true); // There was an exception org.w3c.dom.DOMException: NOT_SUPPORTED_ERR: The implementation does not support the requested type of object or operation.
     128            logger.error("finished import");
     129
     130            String format_string2 = GSXML.xmlNodeToString(imported); // null pointer exception occuring here
     131            logger.error("format string="+format_string2);
     132 
    132133            Element format = this.doc.createElement(GSXML.FORMAT_STRING_ELEM);
    133             GSXML.setNodeText(format, transformed);
    134             //format.appendChild(this.doc.createTextNode(transformed));
     134            //GSXML.setNodeText(format, transformed);
     135            format.appendChild(transformed);
    135136            //format.setNodeValue(transformed);
    136137            mr_request.appendChild(format);
  • main/trunk/greenstone3/src/java/org/greenstone/gsdl3/collection/Collection.java

    r21771 r23489  
    3030import org.w3c.dom.NodeList;
    3131
     32import java.io.*;
    3233import java.io.File;
    3334import java.util.HashMap;
     
    299300    }
    300301
     302 /** handles requests made to the ServiceCluster itself
     303     *
     304     * @param req - the request Element- <request>
     305     * @return the result Element - should be <response>
     306     */
     307    protected Element processMessage(Element request) {
     308
     309    Element response = this.doc.createElement(GSXML.RESPONSE_ELEM);
     310    response.setAttribute(GSXML.FROM_ATT, this.cluster_name);
     311    String type = request.getAttribute(GSXML.TYPE_ATT);
     312    String lang = request.getAttribute(GSXML.LANG_ATT);
     313    response.setAttribute(GSXML.TYPE_ATT, type);
     314
     315    if (type.equals(GSXML.REQUEST_TYPE_FORMAT_STRING)) {
     316        logger.error("Received format string request");
     317
     318        String subaction = request.getAttribute("subaction");
     319        logger.error("Subaction is " + subaction);
     320
     321        String service = request.getAttribute("service");
     322        logger.error("Service is " + service);
     323
     324        String classifier = null;
     325        if(service.equals("ClassifierBrowse"))
     326        {
     327            classifier = request.getAttribute("classifier");
     328            logger.error("Classifier is " + classifier);
     329        }
     330
     331        Element format_element = (Element) GSXML.getChildByTagName(request, GSXML.FORMAT_STRING_ELEM);
     332        //String format_string = GSXML.getNodeText(format_element);
     333        Element format_statement = (Element) format_element.getFirstChild();
     334
     335        //logger.error("Format string: " + format_string);
     336        logger.error("Config file location = " + GSFile.collectionConfigFile(this.site_home, this.cluster_name));
     337
     338        // check for version file
     339
     340        String directory = new File(GSFile.collectionConfigFile(this.site_home, this.cluster_name)).getParent() + File.separator;
     341        logger.error("Directory is " + directory);
     342
     343        String version_filename = "";
     344        if(service.equals("ClassifierBrowse"))
     345            version_filename = directory + "browse_"+classifier+"_format_statement_version.txt";
     346        else
     347            version_filename = directory + "query_format_statement_version.txt";
     348
     349        File version_file = new File(version_filename);
     350        logger.error("Version filename is " + version_filename);
     351
     352
     353        if(subaction.equals("update"))
     354        {
     355            String version_number = "1";
     356            BufferedWriter writer;
     357
     358            try{
     359
     360                if(version_file.exists())
     361                {
     362                    // Read version
     363                    BufferedReader reader = new BufferedReader(new FileReader(version_filename));
     364                    version_number = reader.readLine();
     365                    int aInt = Integer.parseInt(version_number) + 1;
     366                    version_number = Integer.toString(aInt);
     367                    reader.close();
     368                }
     369                else{
     370                    // Create
     371                    version_file.createNewFile();
     372                    writer = new BufferedWriter(new FileWriter(version_filename));
     373                    writer.write(version_number);
     374                    writer.close();
     375                }
     376
     377                // Write version file
     378                String format_statement_filename = "";
     379
     380                if(service.equals("ClassifierBrowse"))
     381                    format_statement_filename = directory + "browse_"+classifier+"_format_statement_v" + version_number + ".txt";
     382                else
     383                    format_statement_filename = directory + "query_format_statement_v" + version_number + ".txt";
     384
     385                logger.error("Format statement filename is " + format_statement_filename);
     386
     387                // Write format statement
     388                String format_string = GSXML.xmlNodeToString(format_statement);
     389                writer = new BufferedWriter(new FileWriter(format_statement_filename));
     390                writer.write(format_string);
     391                writer.close();
     392
     393                // Update version number
     394                writer = new BufferedWriter(new FileWriter(version_filename));
     395                writer.write(version_number);
     396                writer.close();
     397
     398            } catch (IOException e) {
     399                logger.error("IO Exception "+e);
     400            }
     401        }
     402
     403        if(subaction.equals("save"))
     404        {
     405            logger.error("SAVE format statement");
     406
     407            // open collectionConfig.xml and read in to w3 Document
     408            String collection_config = directory + "collectionConfig.xml";
     409            Document config = this.converter.getDOM(new File(collection_config), "UTF-8");
     410           
     411            //String tag_name = "";
     412            int k;
     413            int index;
     414            Element elem;
     415            Node current_node = GSXML.getChildByTagName(config, "CollectionConfig");
     416            NodeList current_node_list;
     417
     418            if(service.equals("ClassifierBrowse"))
     419            {
     420                //tag_name = "browse";
     421                // if CLX then need to look in <classifier> X then <format>
     422                // default is <browse><format>
     423
     424                current_node = GSXML.getChildByTagName(current_node, "browse");
     425
     426                // find CLX
     427                if(classifier != null)
     428                {
     429                    current_node_list = GSXML.getChildrenByTagName(current_node, "classifier");
     430                    index = Integer.parseInt(classifier.substring(2)) - 1;
     431                    // index should be given by X-1
     432                    current_node = current_node_list.item(index);
     433                    current_node = GSXML.getChildByTagName(current_node, "format");
     434                }
     435                else{
     436                    current_node = GSXML.getChildByTagName(current_node, "format");
     437                }
     438            }
     439            else
     440            {
     441                // look in <format> with no attributes
     442           
     443                current_node_list = GSXML.getChildrenByTagName(current_node, "search");
     444                for(k=0; k<current_node_list.getLength(); k++)
     445                {
     446                    current_node = current_node_list.item(k);
     447                    // if current_node has no attributes then break
     448                    elem = (Element) current_node;
     449                    if(elem.hasAttribute("name")==false)
     450                        break;
     451                }
     452            }
     453
     454            // Current_node should be a format tag
     455            elem = (Element) current_node;
     456
     457            logger.error("Current_node = " + elem.getNodeName());
     458
     459            // seems we want to remove current child/ren and replace with format_statement's child/ren?
     460
     461            // remove existing
     462            current_node_list = elem.getChildNodes();
     463            for(k=0; k<current_node_list.getLength(); k++)
     464            {
     465                current_node = elem.removeChild(current_node_list.item(k));
     466            }
     467
     468            // append new
     469            current_node_list = format_statement.getChildNodes();
     470            for(k=0; k<current_node_list.getLength(); k++)
     471            {
     472                current_node = elem.appendChild(current_node_list.item(k));
     473            }
     474
     475            //String text = GSXML.getNodeText(elem);
     476            //logger.error(text);
     477            //text = text.replaceAll("_httpsite_", http_site);
     478            //text = text.replaceAll("_httpcollection_", http_collection);
     479            //GSXML.setNodeText(d, text);
     480
     481            // Now convert config document to string for writing to file
     482            String new_config = GSXML.xmlNodeToString(config);
     483
     484            // Write to file (not original! for now)
     485            try{
     486                BufferedWriter writer = new BufferedWriter(new FileWriter(collection_config+".new"));
     487                writer.write(new_config);
     488                writer.close();
     489            } catch (IOException e) {
     490                logger.error("IO Exception "+e);
     491            }
     492        }
     493    }
     494    else { // unknown type
     495        super.processMessage(request);
     496
     497    }
     498    return response;
     499    }
     500
    301501}
    302502
  • main/trunk/greenstone3/src/java/org/greenstone/gsdl3/collection/ServiceCluster.java

    r23417 r23489  
    3434import java.io.*;
    3535import java.io.File;
     36import java.io.RandomAccessFile;
    3637import java.util.HashMap;
    3738import java.util.Iterator;
     
    510511        return response;
    511512    }
    512 
     513    /*
    513514    if (type.equals(GSXML.REQUEST_TYPE_FORMAT_STRING)) {
    514515        logger.error("Received format string request");
     
    528529        // check for version file
    529530
    530         String directory = new File(GSFile.collectionConfigFile(this.site_home, this.cluster_name)).getParent() + "/";
     531        String directory = new File(GSFile.collectionConfigFile(this.site_home, this.cluster_name)).getParent() + File.pathSeparator;
    531532        logger.error("Directory is " + directory);
    532533
     
    540541        File version_file = new File(version_filename);
    541542        logger.error("Version filename is " + version_filename);
     543
    542544        String version_number = "1";
     545        BufferedWriter writer; // = new BufferedWriter(new FileWriter(version_filename));
     546        //RandomAccessFile version_file_random_access;
    543547
    544548        try{
     
    548552                // Read version
    549553                 BufferedReader reader = new BufferedReader(new FileReader(version_filename));
     554                 //version_file_random_access = new RandomAccessFile(version_file, "r");
     555                 //logger.error("
     556                 //version_number = version_file_random_access.readInt();
    550557                 version_number = reader.readLine();
    551558                 int aInt = Integer.parseInt(version_number) + 1;
    552559                 version_number = Integer.toString(aInt);
    553560                 reader.close();
     561                 //version_file_random_access.close();
    554562            }
    555563            else{
     
    557565                version_file.createNewFile();
    558566                // write 1 to file
    559                 BufferedWriter writer = new BufferedWriter(new FileWriter(version_filename));
     567                writer = new BufferedWriter(new FileWriter(version_filename));
     568                //version_file_random_access = new RandomAccessFile(version_file, "w");
     569                //version_file_random_access.writeInt(version_number);
    560570                writer.write(version_number);
    561571                writer.close();
     572                //version_file_random_access.close();
    562573            }
    563574
     
    572583            logger.error("Format statement filename is " + format_statement_filename);
    573584
    574             BufferedWriter writer = new BufferedWriter(new FileWriter(format_statement_filename));
     585            writer = new BufferedWriter(new FileWriter(format_statement_filename));
    575586            writer.write(format_string);
    576587            writer.close();
    577588
    578589            // Update version number
     590            //version_file_random_access = new RandomAccessFile(version_file, "w");
     591            //version_file_random_access.writeInt(version_number);
     592            //version_file_random_access.close();
     593
     594            writer = new BufferedWriter(new FileWriter(version_filename));
     595            //version_file_random_access = new RandomAccessFile(version_file, "w");
     596            //version_file_random_access.writeInt(version_number);
     597            writer.write(version_number);
     598            writer.close();
     599
     600
    579601
    580602        } catch (IOException e) {
     
    584606
    585607
    586     }
     608    }*/
    587609    if (type.equals(GSXML.REQUEST_TYPE_SYSTEM)) {
    588610        response = processSystemRequest(request);
  • main/trunk/greenstone3/src/java/org/greenstone/gsdl3/util/GSXML.java

    r23360 r23489  
    921921    sb.append(e.getNodeName());
    922922    NamedNodeMap attrs = e.getAttributes();
    923     for (int i = 0; i < attrs.getLength(); i++) {
    924       Node attr = attrs.item(i);
    925       sb.append(' ');
    926       sb.append(attr.getNodeName());
    927       sb.append("=\"");
    928       sb.append(attr.getNodeValue());
    929       sb.append('"');
     923    if(attrs != null)
     924    {
     925        for (int i = 0; i < attrs.getLength(); i++) {
     926            Node attr = attrs.item(i);
     927            sb.append(' ');
     928            sb.append(attr.getNodeName());
     929            sb.append("=\"");
     930            sb.append(attr.getNodeValue());
     931            sb.append('"');
     932        }
    930933    }
    931934   
  • main/trunk/greenstone3/src/java/org/greenstone/gsdl3/util/XMLTransformer.java

    r23405 r23489  
    177177            // Use the TransformerFactory to process the stylesheet Source and generate a Transformer.
    178178            Transformer transformer = this.t_factory.newTransformer(new DOMSource(stylesheet));
     179            logger.error("XMLTransformer transformer is " + transformer);
    179180            transformer.setErrorListener(new TransformErrorListener());
    180181            if (parameters != null) {
Note: See TracChangeset for help on using the changeset viewer.