View Javadoc
1   /*
2    * Copyright (c) 2002-2014, Mairie de Paris
3    * All rights reserved.
4    *
5    * Redistribution and use in source and binary forms, with or without
6    * modification, are permitted provided that the following conditions
7    * are met:
8    *
9    *  1. Redistributions of source code must retain the above copyright notice
10   *     and the following disclaimer.
11   *
12   *  2. Redistributions in binary form must reproduce the above copyright notice
13   *     and the following disclaimer in the documentation and/or other materials
14   *     provided with the distribution.
15   *
16   *  3. Neither the name of 'Mairie de Paris' nor 'Lutece' nor the names of its
17   *     contributors may be used to endorse or promote products derived from
18   *     this software without specific prior written permission.
19   *
20   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23   * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
24   * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25   * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26   * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27   * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28   * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30   * POSSIBILITY OF SUCH DAMAGE.
31   *
32   * License 1.0
33   */
34  package fr.paris.lutece.plugins.directory.modules.rest.service.formatters;
35  
36  import fr.paris.lutece.plugins.directory.business.Directory;
37  import fr.paris.lutece.plugins.directory.modules.rest.util.constants.DirectoryRestConstants;
38  import fr.paris.lutece.plugins.directory.utils.DirectoryUtils;
39  import fr.paris.lutece.plugins.rest.service.formatters.IFormatter;
40  import fr.paris.lutece.plugins.rest.util.json.JSONUtil;
41  
42  import net.sf.json.JSONArray;
43  import net.sf.json.JSONObject;
44  
45  import org.apache.commons.lang.StringUtils;
46  
47  import java.util.List;
48  
49  
50  /**
51   *
52   * Format directory output to the JSON format
53   * Example of the formatted directories list JSON :
54   * <br />
55   * <code>
56   * [
57   *         {
58   *                 "Id":1,
59   *                 "Title":"directoryTitle",
60   *                 "Description":"directoryDescription",
61   *                 "IsEnable":true,
62   *                 "Role":"none",
63   *                 "Workgroup":"all",
64   *                 "IdWorkflow":1
65   *         },
66   *         {
67   *                 ...
68   *         },
69   *         ...
70   * ]
71   * </code>
72   *
73   */
74  public class DirectoryFormatterJson implements IFormatter<Directory>
75  {
76      /**
77      * {@inheritDoc }
78      */
79      @Override
80      public String formatError( String strCode, String strMessage )
81      {
82          return JSONUtil.formatError( strMessage, DirectoryUtils.convertStringToInt( strCode ) );
83      }
84  
85      /**
86       * {@inheritDoc }
87       */
88      @Override
89      public String format( Directory directory )
90      {
91          JSONObject jsonObject = new JSONObject(  );
92  
93          if ( directory != null )
94          {
95              jsonObject.element( DirectoryRestConstants.TAG_ID, directory.getIdDirectory(  ) );
96              jsonObject.element( DirectoryRestConstants.TAG_TITLE, directory.getTitle(  ) );
97              jsonObject.element( DirectoryRestConstants.TAG_DESCRIPTION, directory.getDescription(  ) );
98              jsonObject.element( DirectoryRestConstants.TAG_IS_ENABLE, directory.isEnabled(  ) );
99  
100             if ( StringUtils.isNotBlank( directory.getRoleKey(  ) ) )
101             {
102                 jsonObject.element( DirectoryRestConstants.TAG_ROLE, directory.getRoleKey(  ) );
103             }
104 
105             if ( StringUtils.isNotBlank( directory.getWorkgroup(  ) ) )
106             {
107                 jsonObject.element( DirectoryRestConstants.TAG_WORKGROUP, directory.getWorkgroup(  ) );
108             }
109 
110             if ( directory.getIdWorkflow(  ) != DirectoryUtils.CONSTANT_ID_NULL )
111             {
112                 jsonObject.element( DirectoryRestConstants.TAG_ID_WORKFLOW, directory.getIdWorkflow(  ) );
113             }
114         }
115 
116         return jsonObject.toString(  );
117     }
118 
119     /**
120      * {@inheritDoc}
121      */
122     @Override
123     public String format( List<Directory> listDirectories )
124     {
125         JSONArray jsonArray = new JSONArray(  );
126 
127         for ( Directory directory : listDirectories )
128         {
129             jsonArray.element( format( directory ) );
130         }
131 
132         return jsonArray.toString(  );
133     }
134 }