001/*
002 * ModeShape (http://www.modeshape.org)
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 *       http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016package org.modeshape.sequencer.odf;
017
018import static org.hamcrest.core.Is.is;
019import static org.junit.Assert.assertThat;
020import static org.modeshape.sequencer.odf.OdfMetadataLexicon.CREATION_DATE;
021import static org.modeshape.sequencer.odf.OdfMetadataLexicon.CREATOR;
022import static org.modeshape.sequencer.odf.OdfMetadataLexicon.DESCRIPTION;
023import static org.modeshape.sequencer.odf.OdfMetadataLexicon.EDITING_CYCLES;
024import static org.modeshape.sequencer.odf.OdfMetadataLexicon.EDITING_TIME;
025import static org.modeshape.sequencer.odf.OdfMetadataLexicon.GENERATOR;
026import static org.modeshape.sequencer.odf.OdfMetadataLexicon.INITIAL_CREATOR;
027import static org.modeshape.sequencer.odf.OdfMetadataLexicon.KEYWORDS;
028import static org.modeshape.sequencer.odf.OdfMetadataLexicon.LANGUAGE;
029import static org.modeshape.sequencer.odf.OdfMetadataLexicon.MODIFICATION_DATE;
030import static org.modeshape.sequencer.odf.OdfMetadataLexicon.PAGES;
031import static org.modeshape.sequencer.odf.OdfMetadataLexicon.PRINTED_BY;
032import static org.modeshape.sequencer.odf.OdfMetadataLexicon.PRINT_DATE;
033import static org.modeshape.sequencer.odf.OdfMetadataLexicon.SHEETS;
034import static org.modeshape.sequencer.odf.OdfMetadataLexicon.SUBJECT;
035import static org.modeshape.sequencer.odf.OdfMetadataLexicon.TITLE;
036
037import java.util.Calendar;
038
039import javax.jcr.Node;
040
041import org.junit.Test;
042import org.modeshape.jcr.api.JcrConstants;
043import org.modeshape.jcr.sequencer.AbstractSequencerTest;
044
045/**
046 * Unit test for {@link OdfMetadataSequencer}.
047 */
048public class OdfMetadataSequencerTest extends AbstractSequencerTest {
049
050    @Test
051    public void shouldSequenceTextDocument() throws Exception {
052        // GIVEN
053        String filename = "text.odt";
054
055        // WHEN
056        createNodeWithContentFromFile(filename, filename);
057
058        // THEN
059        Node sequencedNode = getOutputNode(rootNode, "sequenced/odf/" + filename);
060        assertThat(sequencedNode.getProperty(JcrConstants.JCR_MIME_TYPE).getString(), is("application/vnd.oasis.opendocument.text"));
061        assertThat(sequencedNode.getProperty(PAGES).getLong(), is(2L));
062
063        assertCommonMetadata(sequencedNode);
064    }
065
066    @Test
067    public void shouldSequenceTextTemplate() throws Exception {
068        // GIVEN
069        String filename = "text.ott";
070
071        // WHEN
072        createNodeWithContentFromFile(filename, filename);
073
074        // THEN
075        Node sequencedNode = getOutputNode(rootNode, "sequenced/odf/" + filename);
076        assertThat(sequencedNode.getProperty(JcrConstants.JCR_MIME_TYPE).getString(), is("application/vnd.oasis.opendocument.text-template"));
077        assertThat(sequencedNode.getProperty(PAGES).getLong(), is(2L));
078
079        assertCommonMetadata(sequencedNode);
080    }
081
082    @Test
083    public void shouldSequencePresentation() throws Exception {
084        // GIVEN
085        String filename = "presentation.odp";
086
087        // WHEN
088        createNodeWithContentFromFile(filename, filename);
089
090        // THEN
091        Node sequencedNode = getOutputNode(rootNode, "sequenced/odf/" + filename);
092        assertThat(sequencedNode.getProperty(JcrConstants.JCR_MIME_TYPE).getString(), is("application/vnd.oasis.opendocument.presentation"));
093        assertThat(sequencedNode.getProperty(PAGES).getLong(), is(2L));
094
095        assertCommonMetadata(sequencedNode);
096    }
097
098    @Test
099    public void shouldSequencePresentationTemplate() throws Exception {
100        // GIVEN
101        String filename = "presentation.otp";
102
103        // WHEN
104        createNodeWithContentFromFile(filename, filename);
105
106        // THEN
107        Node sequencedNode = getOutputNode(rootNode, "sequenced/odf/" + filename);
108        assertThat(sequencedNode.getProperty(JcrConstants.JCR_MIME_TYPE).getString(), is("application/vnd.oasis.opendocument.presentation-template"));
109        assertThat(sequencedNode.getProperty(PAGES).getLong(), is(2L));
110
111        assertCommonMetadata(sequencedNode);
112    }
113
114    @Test
115    public void shouldSequenceSpreadsheet() throws Exception {
116        // GIVEN
117        String filename = "spreadsheet.ods";
118
119        // WHEN
120        createNodeWithContentFromFile(filename, filename);
121
122        // THEN
123        Node sequencedNode = getOutputNode(rootNode, "sequenced/odf/" + filename);
124        assertThat(sequencedNode.getProperty(JcrConstants.JCR_MIME_TYPE).getString(), is("application/vnd.oasis.opendocument.spreadsheet"));
125        assertThat(sequencedNode.getProperty(SHEETS).getLong(), is(1L));
126
127        assertCommonMetadata(sequencedNode);
128    }
129
130    @Test
131    public void shouldSequenceSpreadsheetTemplate() throws Exception {
132        // GIVEN
133        String filename = "spreadsheet.ots";
134
135        // WHEN
136        createNodeWithContentFromFile(filename, filename);
137
138        // THEN
139        Node sequencedNode = getOutputNode(rootNode, "sequenced/odf/" + filename);
140        assertThat(sequencedNode.getProperty(JcrConstants.JCR_MIME_TYPE).getString(), is("application/vnd.oasis.opendocument.spreadsheet-template"));
141        assertThat(sequencedNode.getProperty(SHEETS).getLong(), is(1L));
142
143        assertCommonMetadata(sequencedNode);
144    }
145
146    @Test
147    public void shouldSequenceDrawing() throws Exception {
148        // GIVEN
149        String filename = "drawing.odg";
150
151        // WHEN
152        createNodeWithContentFromFile(filename, filename);
153
154        // THEN
155        Node sequencedNode = getOutputNode(rootNode, "sequenced/odf/" + filename);
156        assertThat(sequencedNode.getProperty(JcrConstants.JCR_MIME_TYPE).getString(), is("application/vnd.oasis.opendocument.graphics"));
157
158        assertCommonMetadata(sequencedNode);
159    }
160
161    @Test
162    public void shouldSequenceDrawingTemplate() throws Exception {
163        // GIVEN
164        String filename = "drawing.otg";
165
166        // WHEN
167        createNodeWithContentFromFile(filename, filename);
168
169        // THEN
170        Node sequencedNode = getOutputNode(rootNode, "sequenced/odf/" + filename);
171        assertThat(sequencedNode.getProperty(JcrConstants.JCR_MIME_TYPE).getString(), is("application/vnd.oasis.opendocument.graphics-template"));
172
173        assertCommonMetadata(sequencedNode);
174    }
175
176    @Test
177    public void shouldSequenceChart() throws Exception {
178        // GIVEN
179        String filename = "chart.odc";
180
181        // WHEN
182        createNodeWithContentFromFile(filename, filename);
183
184        // THEN
185        Node sequencedNode = getOutputNode(rootNode, "sequenced/odf/" + filename);
186        assertThat(sequencedNode.getProperty(JcrConstants.JCR_MIME_TYPE).getString(), is("application/vnd.oasis.opendocument.chart"));
187
188        assertCommonMetadata(sequencedNode);
189    }
190
191    @Test
192    public void shouldSequenceChartTemplate() throws Exception {
193        // GIVEN
194        String filename = "chart.otc";
195
196        // WHEN
197        createNodeWithContentFromFile(filename, filename);
198
199        // THEN
200        Node sequencedNode = getOutputNode(rootNode, "sequenced/odf/" + filename);
201        assertThat(sequencedNode.getProperty(JcrConstants.JCR_MIME_TYPE).getString(), is("application/vnd.oasis.opendocument.chart-template"));
202
203        assertCommonMetadata(sequencedNode);
204    }
205
206    private void assertCommonMetadata( Node sequencedNode ) throws Exception {
207        assertThat(sequencedNode.getProperty(TITLE).getString(), is("Title"));
208        assertThat(sequencedNode.getProperty(SUBJECT).getString(), is("Subject"));
209        assertThat(sequencedNode.getProperty(DESCRIPTION).getString(), is("Description"));
210        assertThat(sequencedNode.getProperty(KEYWORDS).getValues()[0].getString(), is("Keyword"));
211        assertThat(sequencedNode.getProperty(KEYWORDS).getValues()[1].getString(), is("Second keyword"));
212        assertThat(sequencedNode.getProperty(GENERATOR).getString(), is("Generator"));
213        assertThat(sequencedNode.getProperty(CREATOR).getString(), is("Creator"));
214        assertThat(sequencedNode.getProperty(LANGUAGE).getString(), is("en"));
215        assertThat(sequencedNode.getProperty(PRINTED_BY).getString(), is("Printed by"));
216        assertThat(sequencedNode.getProperty(INITIAL_CREATOR).getString(), is("Initial creator"));
217        assertThat(sequencedNode.getProperty(EDITING_CYCLES).getLong(), is(2L));
218        assertThat(sequencedNode.getProperty(EDITING_TIME).getLong(), is(666L));
219        assertThat(sequencedNode.getProperty(CREATION_DATE).getDate().get(Calendar.YEAR), is(2000));
220        assertThat(sequencedNode.getProperty(MODIFICATION_DATE).getDate().get(Calendar.YEAR), is(2005));
221        assertThat(sequencedNode.getProperty(PRINT_DATE).getDate().get(Calendar.YEAR), is(2010));
222
223    }
224}