Package com.esri.gpt.catalog.context

Source Code of com.esri.gpt.catalog.context.CatalogIndexAdapter

/* See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* Esri Inc. licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License.  You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.esri.gpt.catalog.context;
import com.esri.gpt.catalog.arcims.GetDocumentRequest;
import com.esri.gpt.catalog.arcims.ImsMetadataAdminDao;
import com.esri.gpt.catalog.arcims.ImsServiceException;
import com.esri.gpt.catalog.schema.MetadataDocument;
import com.esri.gpt.catalog.schema.Schema;
import com.esri.gpt.catalog.schema.SchemaException;
import com.esri.gpt.framework.context.RequestContext;
import com.esri.gpt.framework.security.principal.Publisher;
import com.esri.gpt.framework.sql.BaseDao;
import com.esri.gpt.framework.util.Val;

import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.logging.Logger;
import javax.xml.transform.TransformerException;


/**
* Super-class for an adapter that maintains and searches an index of
* metadata documents.
*/
public abstract class CatalogIndexAdapter extends BaseDao {
 
// class variables =============================================================
 
/** Logger */
private static final Logger LOGGER = Logger.getLogger(CatalogIndexAdapter.class.getName());
 
// instance variables ==========================================================
 
// constructors ================================================================

/**
* Constructs with an associated request context.
* @param requestContext the request context
*/
public CatalogIndexAdapter(RequestContext requestContext) {
  super(requestContext);
}

// properties ==================================================================

/**
* Gets the logger.
* @return the logger
*/
protected Logger getLogger() {
  return LOGGER;
}

// methods =====================================================================

/**
* Counts the documents within the index.
* @throws CatalogIndexException if an exception occurs
*/
public abstract int countDocuments() throws CatalogIndexException;

/**
* Deletes a  document from the index.
* @param uuid the document UUID to delete
* @throws CatalogIndexException if an exception occurs
*/
public void deleteDocument(String uuid) throws CatalogIndexException {
  String[] uuids = {uuid};
  deleteDocuments(uuids);
}

/**
* Deletes a collection of documents from the index.
* @param uuids the collection of document UUIDS to delete
* @throws CatalogIndexException if an exception occurs 
*/
public abstract void deleteDocuments(String[] uuids)
  throws CatalogIndexException;

/**
* Publishes a document to the index, first reading it's XML from the
* metadata server.
* <br/>The document will not be written if the UUID is null or zero-length.
* <br/>Existing documents that match the supplied UUID will be replaced.
* @param uuid the document's UUID
* @param publisher a publisher who has read access to the document
* @return the raw XML associated with the document being published
* @throws CatalogIndexException if an exception occurs
*/
public String publishDocument(String uuid, Publisher publisher)
  throws CatalogIndexException {
  uuid = Val.chkStr(uuid);
  if (uuid.length() == 0) {
    throw new IllegalArgumentException("The supplied document UUID was empty.");
  } else {
    try {
     
      /*
       CatalogIndexAdapter: 108
       LuceneIndexAdapter:  294
       ImsMetadataAdminDao: updaterecord, add queryAcl(uuid)
       CSW discovery servlet -> check credentials before returning xml
       Rest -> credentials
       */
     
      // determine the acl
      ImsMetadataAdminDao adminDao = new ImsMetadataAdminDao(getRequestContext());
      String acl = adminDao.queryAclByUUID(uuid);
     
      // determine the xml and update date
      GetDocumentRequest ims = new GetDocumentRequest(getRequestContext(),publisher);
      ims.executeGet(uuid);
      Timestamp updateDate = ims.getUpdateDate();
      String xml = ims.getXml();
     
      // build the schema
      MetadataDocument mdDoc = new MetadataDocument();
      Schema schema = mdDoc.prepareForView(getRequestContext(),xml);
     
      // publish
      publishDocument(uuid,updateDate,schema,acl);
     
      return xml;
    } catch (SQLException e) {
      String sMsg = "Error indexing document:\n "+Val.chkStr(e.getMessage());
      throw new CatalogIndexException(sMsg,e);
    } catch (ImsServiceException e) {
      String sMsg = "Error indexing document:\n "+Val.chkStr(e.getMessage());
      throw new CatalogIndexException(sMsg,e);
    } catch (TransformerException e) {
      String sMsg = "Error indexing document:\n "+Val.chkStr(e.getMessage());
      throw new CatalogIndexException(sMsg,e);
    } catch (SchemaException e) {
      String sMsg = "Error indexing document:\n "+Val.chkStr(e.getMessage());
      throw new CatalogIndexException(sMsg,e);
    }
  }
}

/**
* Publishes a document to the index based upon a metadata schema.
* <br/>The document will not be written if the UUID is null or zero-length.
* <br/>Existing documents that match the supplied UUID will be replaced.
* @param uuid the document's UUID
* @param updateDate the document's update date
* @param schema the evaluated schema associated with the document to be indexed
* @param acl an XML string represent the access control information associated
*        the document (if null, no ACL information is indexed)
* @throws CatalogIndexException if an exception occurs 
*/
public abstract void publishDocument(String uuid,
                                     Timestamp updateDate,
                                     Schema schema,
                                     String acl)
  throws CatalogIndexException;

/**
* Purges the entire catalog index.
* @throws CatalogIndexException if an exception occurs
*/
public abstract void purgeIndex() throws CatalogIndexException;

/**
* Queries the ACL values indexed for a document.
* @param uuid the document UUID
* @return the ACL values (can be null)
* @throws CatalogIndexException if an exception occurs
*/
public abstract String[] queryAcls(String uuid)
  throws CatalogIndexException;

/**
* Queries the system modified date associated with an indexed document.
* @param uuid the document UUID
* @return the update date (null if none was found)
* @throws CatalogIndexException if an exception occurs
*/
public abstract Timestamp queryModifiedDate(String uuid)
  throws CatalogIndexException;

}
TOP

Related Classes of com.esri.gpt.catalog.context.CatalogIndexAdapter

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.