Pastebin launched a little side project called VERYVIRAL.com, check it out ;-) Want more features on Pastebin? Sign Up, it's FREE!
Guest

Untitled

By: a guest on Nov 30th, 2011  |  syntax: Java  |  size: 11.44 KB  |  views: 75  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. package fr.univNantes.geodoc.services.inner;
  2.  
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import java.net.MalformedURLException;
  6. import java.net.URL;
  7. import java.util.ArrayList;
  8. import java.util.List;
  9. import java.util.Properties;
  10.  
  11. import javax.xml.bind.JAXBElement;
  12. import javax.xml.bind.JAXBException;
  13. import javax.xml.bind.Unmarshaller;
  14. import javax.xml.namespace.QName;
  15.  
  16. import junit.framework.AssertionFailedError;
  17.  
  18. import org.geotoolkit.csw.CatalogServicesServer;
  19. import org.geotoolkit.csw.GetRecordsRequest;
  20. import org.geotoolkit.csw.TransactionRequest;
  21. import org.geotoolkit.csw.xml.ElementSetType;
  22. import org.geotoolkit.csw.xml.GetRecordsResponse;
  23. import org.geotoolkit.csw.xml.ResultType;
  24. import org.geotoolkit.csw.xml.v202.DeleteType;
  25. import org.geotoolkit.csw.xml.v202.InsertType;
  26. import org.geotoolkit.csw.xml.v202.QueryConstraintType;
  27. import org.geotoolkit.csw.xml.v202.TransactionResponseType;
  28. import org.geotoolkit.csw.xml.v202.UpdateType;
  29. import org.geotoolkit.ebrim.xml.EBRIMClassesContext;
  30. import org.geotoolkit.ogc.xml.v110.FilterType;
  31. import org.geotoolkit.ogc.xml.v110.LiteralType;
  32. import org.geotoolkit.ogc.xml.v110.PropertyIsEqualToType;
  33. import org.geotoolkit.ogc.xml.v110.PropertyIsLikeType;
  34. import org.geotoolkit.ogc.xml.v110.PropertyNameType;
  35. import org.geotoolkit.ows.xml.v100.ExceptionReport;
  36. import org.geotoolkit.xml.MarshallerPool;
  37. import org.opengis.metadata.Metadata;
  38.  
  39. import fr.univNantes.geodoc.exceptions.BaseAppException;
  40. import fr.univNantes.geodoc.exceptions.CswException;
  41.  
  42. public class CswRequester {
  43.     private Unmarshaller unmarshaller;
  44.    
  45.     private CatalogServicesServer cswServer;
  46.    
  47.     public CswRequester(Properties configuration) throws JAXBException, MalformedURLException {
  48.         MarshallerPool pool = new MarshallerPool(EBRIMClassesContext.getAllClasses());
  49.         unmarshaller = pool.acquireUnmarshaller();
  50.        
  51.         cswServer = new CatalogServicesServer(
  52.             new URL(configuration.getProperty("csw-server-url")), "2.0.2"
  53.         );
  54.     }
  55.  
  56.     public List<Metadata> getRecords(Integer maxRecords,
  57.                                      Integer startPosition,
  58.                                      double[] boundingBox)
  59.       throws BaseAppException {
  60.         GetRecordsRequest request = cswServer.createGetRecords();
  61.        
  62.         if (maxRecords == null || maxRecords < 1) {
  63.             maxRecords = 10;
  64.         }
  65.  
  66.         if (maxRecords == null || maxRecords < 1) {
  67.             maxRecords = 1;
  68.         }
  69.  
  70.         request.setMaxRecords(maxRecords);
  71.         request.setStartPosition(startPosition);
  72.         request.setResultType(ResultType.RESULTS);
  73.         request.setOutputFormat("application/xml");
  74.         request.setOutputSchema("http://www.isotc211.org/2005/gmd");
  75.         request.setElementSetName(ElementSetType.FULL);
  76.         request.setTypeNames("csw:Record");
  77.         request.setDistributedSearch(false);
  78.        
  79.         if (boundingBox != null) {
  80.             request.setConstraint(
  81.                 String.format("BBOX(ows:BoundingBox, %d, %d, %d, %d)",
  82.                               boundingBox[0], boundingBox[1], boundingBox[2], boundingBox[3])
  83.             );
  84.         }
  85.        
  86.         List<Metadata> records = new ArrayList<Metadata>();
  87.        
  88.         try {
  89.             InputStream stream = request.getResponseStream();
  90.            
  91.             Object response = unmarshaller.unmarshal(stream);
  92.            
  93.             if (response instanceof JAXBElement) {
  94.                 response = ((JAXBElement<?>)response).getValue();
  95.             }
  96.            
  97.             if (response instanceof GetRecordsResponse) {
  98.                 GetRecordsResponse getRecordsResponse = (GetRecordsResponse) response;
  99.                                
  100.                 for (Object record : getRecordsResponse.getSearchResults().getAny()) {
  101.                     if (record instanceof Metadata) {
  102.                         records.add((Metadata) record);
  103.                     }
  104.                 }
  105.             }
  106.             else if (response instanceof ExceptionReport) {
  107.                 throw new CswException((ExceptionReport) response);
  108.             }
  109.         } catch (JAXBException e) {
  110.             throw new CswException();
  111.         } catch (IOException e) {
  112.             throw new CswException();
  113.         }
  114.    
  115.         return records;
  116.     }
  117.    
  118.     public void insertMetadata(Metadata metadata)
  119.       throws BaseAppException {
  120.  
  121.         InsertType insert = new InsertType(metadata);
  122.        
  123.         TransactionRequest request = cswServer.createTransaction();
  124.         request.setInsert(insert);
  125.  
  126.         try {
  127.             InputStream stream = request.getResponseStream();
  128.  
  129.             Object response = unmarshaller.unmarshal(stream);
  130.  
  131.             if (response instanceof JAXBElement) {
  132.                 response = ((JAXBElement<?>)response).getValue();
  133.             }
  134.            
  135.             if (response instanceof TransactionResponseType) {
  136.                 /*
  137.                 ===> LOG ERROR
  138.                
  139.                 TransactionResponseType transactionResponse = (TransactionResponseType) response;
  140.                
  141.                 assertEquals(1, transactionResponse.getTransactionSummary().getTotalInserted());
  142.                 */
  143.             }
  144.             else if (response instanceof ExceptionReport) {
  145.                 throw new CswException((ExceptionReport) response);
  146.             }
  147.         } catch (JAXBException e) {
  148.             throw new CswException();
  149.         } catch (IOException e) {
  150.             throw new CswException();
  151.         } catch (AssertionFailedError e) {
  152.             throw new CswException();
  153.         }
  154.     }
  155.    
  156.     public void updateMetadata(Metadata metadata)
  157.       throws BaseAppException {
  158.         String identifier = metadata.getFileIdentifier();
  159.        
  160.         QueryConstraintType queryConstraint
  161.             = buildIdentifierEqualToConstraint(identifier);
  162.        
  163.         UpdateType update = new UpdateType(metadata, queryConstraint);
  164.        
  165.         TransactionRequest request = cswServer.createTransaction();
  166.         request.setUpdate(update);
  167.        
  168.         try {
  169.             InputStream stream = request.getResponseStream();
  170.  
  171.             Object response = unmarshaller.unmarshal(stream);
  172.  
  173.             if (response instanceof JAXBElement) {
  174.                 response = ((JAXBElement<?>)response).getValue();
  175.             }
  176.            
  177.             if (response instanceof TransactionResponseType) {
  178.                 /*
  179.                 ===> LOG ERROR
  180.                
  181.                 TransactionResponseType transactionResponse = (TransactionResponseType) response;
  182.                
  183.                 assertEquals(1, transactionResponse.getTransactionSummary().getTotalUpdated());
  184.                 */
  185.             }
  186.             else if (response instanceof ExceptionReport) {
  187.                 throw new CswException((ExceptionReport) response);
  188.             }
  189.         } catch (JAXBException e) {
  190.             throw new CswException();
  191.         } catch (IOException e) {
  192.             throw new CswException();
  193.         }
  194.     }
  195.    
  196.     public void deleteMetadata(String identifier)
  197.       throws BaseAppException {
  198.         QueryConstraintType queryConstraint
  199.             = buildIdentifierEqualToConstraint(identifier);
  200.        
  201.         DeleteType delete = new DeleteType();
  202.         delete.setConstraint(queryConstraint);
  203.        
  204.         TransactionRequest request = cswServer.createTransaction();
  205.         request.setDelete(delete);
  206.  
  207.         try {
  208.             InputStream stream = request.getResponseStream();
  209.  
  210.             Object response = unmarshaller.unmarshal(stream);
  211.  
  212.             if (response instanceof JAXBElement) {
  213.                 response = ((JAXBElement<?>)response).getValue();
  214.             }
  215.            
  216.             if (response instanceof TransactionResponseType) {
  217.                 /*
  218.                 ===> LOG ERROR
  219.                
  220.                 TransactionResponseType transactionResponse = (TransactionResponseType) response;
  221.                
  222.                 assertEquals(1, transactionResponse.getTransactionSummary().getTotalDeleted());
  223.                 */
  224.             }
  225.             else if (response instanceof ExceptionReport) {
  226.                 throw new CswException((ExceptionReport) response);
  227.             }
  228.         } catch (JAXBException e) {
  229.             throw new CswException();
  230.         } catch (IOException e) {
  231.             throw new CswException();
  232.         } catch (AssertionFailedError e) {
  233.             throw new CswException();
  234.         }
  235.     }
  236.    
  237.     public void deleteAllMetadata()
  238.       throws BaseAppException {
  239.         QueryConstraintType queryConstraint
  240.             = buildIdentifierAnyConstraint();
  241.        
  242.         DeleteType delete = new DeleteType();
  243.         delete.setConstraint(queryConstraint);
  244.        
  245.         TransactionRequest request = cswServer.createTransaction();
  246.         request.setDelete(delete);
  247.    
  248.         try {
  249.             InputStream stream = request.getResponseStream();
  250.    
  251.             Object response = unmarshaller.unmarshal(stream);
  252.    
  253.             if (response instanceof JAXBElement) {
  254.                 response = ((JAXBElement<?>)response).getValue();
  255.             }
  256.            
  257.             if (response instanceof TransactionResponseType) {
  258.                 /*
  259.                 ===> LOG ERROR
  260.                
  261.                 TransactionResponseType transactionResponse = (TransactionResponseType) response;
  262.                
  263.                 assertEquals(1, transactionResponse.getTransactionSummary().getTotalDeleted());
  264.                 */
  265.             }
  266.             else if (response instanceof ExceptionReport) {
  267.                 throw new CswException((ExceptionReport) response);
  268.             }
  269.         } catch (JAXBException e) {
  270.             throw new CswException();
  271.         } catch (IOException e) {
  272.             throw new CswException();
  273.         } catch (AssertionFailedError e) {
  274.             throw new CswException();
  275.         }
  276.     }
  277.    
  278.     private QueryConstraintType buildIdentifierEqualToConstraint(String identifier) {
  279.         PropertyIsEqualToType propertyIsEqualTo = new PropertyIsEqualToType();
  280.         propertyIsEqualTo.setLiteral(new LiteralType(identifier));
  281.         propertyIsEqualTo.setPropertyName(
  282.             // new PropertyNameType(new QName("http://www.opengis.net/cat/csw/apiso/1.0", "Identifier", "apiso"))
  283.             new PropertyNameType(new QName("apiso:Identifier"))
  284.         );
  285.        
  286.         FilterType filter = new FilterType(propertyIsEqualTo);
  287.  
  288.         QueryConstraintType queryConstraint = new QueryConstraintType();
  289.         queryConstraint.setVersion("1.1.0");
  290.         queryConstraint.setFilter(filter);
  291.        
  292.         return queryConstraint;
  293.     }
  294.    
  295.     private QueryConstraintType buildIdentifierAnyConstraint() {
  296.         PropertyIsLikeType propertyIsLike = new PropertyIsLikeType();
  297.         propertyIsLike.setEscapeChar("\\");
  298.         propertyIsLike.setSingleChar("?");
  299.         propertyIsLike.setWildCard("*");
  300.         propertyIsLike.setLiteral(propertyIsLike.getWildCard());
  301.         propertyIsLike.setPropertyName(
  302.             new PropertyNameType(new QName("apiso:Identifier"))
  303.         );
  304.        
  305.         FilterType filter = new FilterType(propertyIsLike);
  306.  
  307.         QueryConstraintType queryConstraint = new QueryConstraintType();
  308.         queryConstraint.setVersion("1.1.0");
  309.         queryConstraint.setFilter(filter);
  310.        
  311.         return queryConstraint;
  312.     }
  313. }
  314.  
  315.