PhraseanetService.java
- /*
- * Copyright (c) 2002-2014, Mairie de Paris
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice
- * and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright notice
- * and the following disclaimer in the documentation and/or other materials
- * provided with the distribution.
- *
- * 3. Neither the name of 'Mairie de Paris' nor 'Lutece' nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- * License 1.0
- */
- package fr.paris.lutece.plugins.phraseanet.service;
- import fr.paris.lutece.plugins.phraseanet.business.databox.Collection;
- import fr.paris.lutece.plugins.phraseanet.business.databox.Databox;
- import fr.paris.lutece.plugins.phraseanet.business.record.Record;
- import fr.paris.lutece.plugins.phraseanet.service.api.PhraseanetApiCallService;
- import fr.paris.lutece.plugins.phraseanet.service.parsers.CollectionsJsonParser;
- import fr.paris.lutece.plugins.phraseanet.service.parsers.DataboxesJsonParser;
- import fr.paris.lutece.plugins.phraseanet.service.parsers.EmbedJsonParser;
- import fr.paris.lutece.plugins.phraseanet.service.parsers.MetadatasJsonParser;
- import fr.paris.lutece.plugins.phraseanet.service.parsers.RecordJsonParser;
- import fr.paris.lutece.plugins.phraseanet.service.parsers.SearchResultsJsonParser;
- import java.text.MessageFormat;
- import java.util.ArrayList;
- import java.util.StringTokenizer;
- import net.sf.json.JSONObject;
- import net.sf.json.JSONArray;
- import net.sf.json.JSONException;
- import fr.paris.lutece.plugins.phraseanet.business.account.Account;
- import fr.paris.lutece.plugins.phraseanet.business.embed.Embed;
- import fr.paris.lutece.plugins.phraseanet.business.record.Metadata;
- import fr.paris.lutece.plugins.phraseanet.business.search.SearchResults;
- import fr.paris.lutece.plugins.phraseanet.service.api.PhraseanetApiCallException;
- import fr.paris.lutece.portal.service.util.AppPropertiesService;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import org.apache.log4j.Logger;
- /**
- * PhraseanetService
- */
- public final class PhraseanetService
- {
- private static final String PROPERTY_ITEMS_PER_PAGE_VALUES = "phraseanet.itemsPerPageValues";
- private static final String PROPERTY_MEDIA_TYPE_VALUES = "phraseanet.mediaTypeValues";
- private static final String PATH_GET_RECORD = "/api/v1/records/{0}/{1}/";
- private static final String PATH_GET_DATABOXE_METADATAS = "/api/v1/databoxes/{0}/metadatas/";
- private static final String PATH_GET_RECORD_METADATAS = "/api/v1/records/{0}/{1}/metadatas/";
- private static final String PATH_SEARCH = "/api/v1/records/search/?";
- private static final String PATH_DATABOXES = "/api/v1/databoxes/list/";
- private static final String PATH_COLLECTIONS = "/api/v1/databoxes/{0}/collections/";
- private static final String PATH_EMBED = "/api/v1/records/{0}/{1}/embed/";
- private static final String PARAMETER_QUERY = "query";
- private static final String PARAMETER_PAGE = "page";
- private static final String PARAMETER_PER_PAGE = "per_page";
- private static final String PARAMETER_RECORD_TYPE = "record_type";
- private static final String PARAMETER_BASES = "bases[]";
- private static final String DELIMITER = ",";
- private static final String SEARCH_ALL = "< All >";
- private static List<String> _listItemsPerPageValues;
- private static List<String> _listMediaTypeValues;
- private static Logger _logger = Logger.getLogger( Constants.LOGGER );
-
- /** private constructor */
- private PhraseanetService()
- {
-
- }
-
- /**
- * Gets a record
- * @param nDataboxId The databox id
- * @param nRecordId The record id
- * @param account the user phraseanet account
- * @return The record
- * @throws PhraseanetApiCallException if an error occurs
- */
- public static Record getRecord( int nDataboxId, int nRecordId, Account account )
- throws PhraseanetApiCallException
- {
- _logger.debug( "getRecord" );
- Object[] arguments = { Integer.toString( nDataboxId ), Integer.toString( nRecordId ) };
- String url = account.getAccessURL( ) + MessageFormat.format( PATH_GET_RECORD, arguments );
- JSONObject jsonResponse = PhraseanetApiCallService.getResponse( url, account );
- JSONObject jsonRecord = jsonResponse.getJSONObject( "record" );
- return RecordJsonParser.parse( jsonRecord );
- }
-
- /**
- * Get metadatas for a given databoxe
- * @param nDataboxId The databox id
- * @param account the user phraseanet account
- * @return Metadatas
- * @throws PhraseanetApiCallException if an error occurs
- */
- public static List<Metadata> getDataboxeMetadatas( int nDataboxId, Account account )
- throws PhraseanetApiCallException
- {
- Object[] arguments = { Integer.toString( nDataboxId ) };
- String url = account.getAccessURL( ) + MessageFormat.format( PATH_GET_DATABOXE_METADATAS, arguments );
- _logger.debug("getDataboxeMetadatas : " + url ) ;
- JSONObject jsonResponse = PhraseanetApiCallService.getResponse( url, account );
- _logger.debug("getDataboxeMetadatas (response) : " + jsonResponse ) ;
- return MetadatasJsonParser.parseByDataboxe( jsonResponse );
- }
- /**
- * Get metadatas for a given record
- * @param nDataboxId The databox id
- * @param nRecordId The record id
- * @param account the user phraseanet account
- * @return Metadatas
- * @throws PhraseanetApiCallException if an error occurs
- */
- public static List<Metadata> getRecordMetadatas( int nDataboxId, int nRecordId, Account account )
- throws PhraseanetApiCallException
- {
- Object[] arguments = { Integer.toString( nDataboxId ), Integer.toString( nRecordId ) };
- String url = account.getAccessURL( ) + MessageFormat.format( PATH_GET_RECORD_METADATAS, arguments );
- JSONObject jsonResponse = PhraseanetApiCallService.getResponse( url, account );
-
- return MetadatasJsonParser.parse( jsonResponse );
- }
-
- /**
- * Searc results
- * @param strQuery Query terms
- * @param nPage Page number
- * @param nPerPage Number of items per page
- * @param criterias Criterias
- * @param account the user phraseanet account
- * @return search results
- * @throws PhraseanetApiCallException if an error occurs
- */
- public static SearchResults search( String strQuery, int nPage, int nPerPage, SearchCriterias criterias, Account account )
- throws PhraseanetApiCallException
- {
- String strUrl = account.getAccessURL( ) + PATH_SEARCH ;
- _logger.debug("URL de la reqette API : " + strUrl);
- Map<String, List<String>> mapParameters = new HashMap<String, List<String>>( );
- putParameter( mapParameters, PARAMETER_QUERY, strQuery );
- putParameter( mapParameters, PARAMETER_PAGE, String.valueOf( nPage ) );
- putParameter( mapParameters, PARAMETER_PER_PAGE, String.valueOf( nPerPage ) );
- _logger.debug("Parametres de la requette : " + mapParameters);
- if ( ( criterias.getRecordType( ) != null ) || !criterias.getRecordType( ).equals( SEARCH_ALL ) )
- {
- putParameter( mapParameters, PARAMETER_RECORD_TYPE, criterias.getRecordType( ) );
- }
- mapParameters.put( PARAMETER_BASES, criterias.getBases( ) );
- // TODO add other criterias
- JSONObject jsonResponse = PhraseanetApiCallService.getPostResponse( strUrl, mapParameters, account );
- return SearchResultsJsonParser.parse( jsonResponse );
- }
- /**
- * Get databoxes
- * @param account the user phraseanet account
- * @return The lis of databoxes
- * @throws PhraseanetApiCallException if an error occurs
- */
- public static List<Databox> getDataboxes( Account account ) throws PhraseanetApiCallException
- {
- String strUrl = account.getAccessURL( ) + PATH_DATABOXES;
- JSONObject jsonResponse = PhraseanetApiCallService.getResponse( strUrl, account );
- JSONObject jsonDataboxes;
-
- try
- {
- jsonDataboxes = jsonResponse.getJSONObject( "databoxes" );
- }
- catch ( JSONException e )
- {
- // maybe api_version 2
- JSONArray jsonDataboxesList = jsonResponse.getJSONArray( "databoxes" );
- jsonDataboxes = jsonDataboxesList.toJSONObject( jsonDataboxesList ) ;
- }
- return DataboxesJsonParser.parse( jsonDataboxes );
- }
- /**
- * Get all collections of databox
- * @param nDataboxId The databox id
- * @param account the user phraseanet account
- * @return a collection list
- * @throws PhraseanetApiCallException if an error occurs
- */
- public static List<Collection> getColletions( int nDataboxId, Account account )
- throws PhraseanetApiCallException
- {
- Object[] arguments = { nDataboxId };
- String strUrl = account.getAccessURL( ) + MessageFormat.format( PATH_COLLECTIONS, arguments );
- JSONObject jsonResponse = PhraseanetApiCallService.getResponse( strUrl, account );
- _logger.debug("Collections : " + jsonResponse);
- return CollectionsJsonParser.parse( jsonResponse );
- }
- /**
- * Get embed data of a record
- * @param nDataboxId The databox id
- * @param nRecordId The record id
- * @param account the user phraseanet account
- * @return embed data
- * @throws PhraseanetApiCallException if an error occurs
- */
- public static Embed getEmbed( int nDataboxId, int nRecordId, Account account )
- throws PhraseanetApiCallException
- {
- Object[] arguments = { Integer.toString( nDataboxId ), Integer.toString( nRecordId ) };
- String url = account.getAccessURL( ) + MessageFormat.format( PATH_EMBED, arguments );
- JSONObject jsonResponse = PhraseanetApiCallService.getResponse( url, account );
- JSONArray jsonEmbedList = jsonResponse.getJSONArray( "embed" );
- JSONObject jsonEmbed = jsonEmbedList.toJSONObject( jsonEmbedList ) ;
- return EmbedJsonParser.parse( jsonEmbed );
- }
- /**
- * Gets items per page values
- * @return items per page values
- */
- public static synchronized List<String> getItemsPerPageValues( )
- {
- if ( _listItemsPerPageValues == null )
- {
- _listItemsPerPageValues = new ArrayList<String>( );
- String strItemsPerPageValues = AppPropertiesService.getProperty( PROPERTY_ITEMS_PER_PAGE_VALUES );
- StringTokenizer st = new StringTokenizer( strItemsPerPageValues, DELIMITER );
- while ( st.hasMoreTokens( ) )
- {
- String strValue = st.nextToken( );
- _listItemsPerPageValues.add( strValue.trim( ) );
- }
- }
- return _listItemsPerPageValues;
- }
- /**
- * Get media types values
- * @return media types values
- */
- public static synchronized List<String> getMediaTypeValues( )
- {
- if ( _listMediaTypeValues == null )
- {
- _listMediaTypeValues = new ArrayList<String>( );
- String strMediaTypeValues = AppPropertiesService.getProperty( PROPERTY_MEDIA_TYPE_VALUES );
- StringTokenizer st = new StringTokenizer( strMediaTypeValues, DELIMITER );
- while ( st.hasMoreTokens( ) )
- {
- String strValue = st.nextToken( );
- _listMediaTypeValues.add( strValue.trim( ) );
- }
- }
- return _listMediaTypeValues;
- }
- /**
- * Add parameters to a map
- * @param map The map
- * @param strKey The parameter key
- * @param strValue The parameter value
- */
- private static void putParameter( Map<String, List<String>> map, String strKey, String strValue )
- {
- List<String> listValue = new ArrayList<String>( );
- listValue.add( strValue );
- map.put( strKey, listValue );
- }
-
- /**
- * Get embed data of a record
- * @param nDataboxId The databox id
- * @param nRecordId The record id
- * @return embed data
- * @throws PhraseanetApiCallException if an error occurs
- */
- /**
- public static Record getBasesRecords( List<Integer> listIdBases, Account account )
- throws PhraseanetApiCallException
- {
- Object[] arguments = { Integer.toString( nDataboxId ), Integer.toString( nRecordId ) };
- String url = account.getAccessURL( ) + PATH_SEARCH ;
- Map<String, List<String>> mapParameters = new HashMap<String, List<String>>( );
- putParameter( mapParameters, PARAMETER_QUERY, strQuery );
- JSONObject jsonResponse = PhraseanetApiCallService.getPostResponse( strUrl, mapParameters, account );
-
- return EmbedJsonParser.parse( jsonEmbed );
- }
- */
- }