blob: b0f5594185fc3811a2640c9958a3bf4c15672e8e [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF 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 org.apache.openoffice.ooxml.viewer;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.Vector;
import javax.swing.JComponent;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTabbedPane;
import javax.swing.UIManager;
import org.apache.openoffice.ooxml.framework.part.OOXMLPackage;
import org.apache.openoffice.ooxml.framework.part.parser.ParserFactory;
import org.apache.openoffice.ooxml.parser.Log;
import org.apache.openoffice.ooxml.viewer.content.ContentView;
/** A simple viewer for the streams inside an OOXML file.
*/
public class OOXMLViewer
{
public static void main (final String[] aArguments)
{
try
{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch (Exception e)
{
e.printStackTrace();
}
Log.Dbg = null;
// Process options.
final Vector<String> aFilenames = new Vector<>();
for (int nIndex=0; nIndex<aArguments.length; ++nIndex)
{
if (aArguments[nIndex].startsWith("-"))
{
switch (aArguments[nIndex])
{
case "-t":
++nIndex;
if (nIndex >= aArguments.length)
{
System.err.printf("expecting argument after option '-t'");
System.exit(1);
}
ParserFactory.SetParserTableFilename(aArguments[nIndex]);
break;
default:
System.out.printf("unknown option '%s'\n", aArguments[nIndex]);
System.exit(1);;
break;
}
}
else
aFilenames.add(aArguments[nIndex]);
}
for (final String sFilename : aFilenames)
{
final OOXMLViewer aViewer = new OOXMLViewer();
aViewer.SetFile(new File(sFilename));
aViewer.maFrame.setVisible(true);
}
}
private OOXMLViewer ()
{
maFrame = new JFrame("OOXML Viewer");
maFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
maFrame.setSize(1024,768);
maContainer = new JPanel();
maFrame.add(maContainer, BorderLayout.CENTER);
maFrame.setJMenuBar(CreateMenuBar());
maFrame.addKeyListener(new KeyListener());
}
private void SetFile (final File aFile)
{
if ( ! aFile.exists())
{
JOptionPane.showMessageDialog(
maFrame,
"File '"+aFile.toString()+"' does not exist",
"File Error",
JOptionPane.ERROR_MESSAGE);
}
else if ( ! aFile.canRead())
{
JOptionPane.showMessageDialog(
maFrame,
"Can not open '"+aFile.toString()+"' for reading",
"File Error",
JOptionPane.ERROR_MESSAGE);
}
else
{
maContainer.removeAll();
maContainer.setLayout(new BorderLayout());
final OOXMLPackage aPackage = OOXMLPackage.Create(aFile);
final JScrollPane aDetailViewContainer = new JScrollPane(
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
aDetailViewContainer.getVerticalScrollBar().setUnitIncrement(10);
final DetailViewManager aDetailViewManager = new DetailViewManager(aDetailViewContainer, aPackage);
final JTabbedPane aLeftSidebar = new JTabbedPane();
final ContentView aContentView = new ContentView(aDetailViewManager, aPackage);
aLeftSidebar.addTab("Content", new JScrollPane(aContentView));
final StreamView aFragmentView = new StreamView(aDetailViewManager, aPackage);
aLeftSidebar.addTab("Streams", new JScrollPane(aFragmentView));
final PartsView aPartsView = new PartsView(aDetailViewManager, aPackage);
aLeftSidebar.addTab("Parts", new JScrollPane(aPartsView));
final JSplitPane aPane = new JSplitPane(
JSplitPane.HORIZONTAL_SPLIT,
aLeftSidebar,
aDetailViewContainer
);
aPane.setDividerLocation(200);
maContainer.add(aPane, BorderLayout.CENTER);
aFragmentView.ShowInitialPart();
}
}
private JMenuBar CreateMenuBar ()
{
final JMenuBar aMenuBar = new JMenuBar();
final JMenu aFileMenu = new JMenu("File");
aMenuBar.add(aFileMenu);
final JMenuItem aOpenItem = new JMenuItem("Open");
aOpenItem.addActionListener(new ActionListener()
{
@Override public void actionPerformed (final ActionEvent aEvent)
{
final JFileChooser aFileChooser = new JFileChooser();
final int nResult = aFileChooser.showOpenDialog(null);
if (nResult == JFileChooser.APPROVE_OPTION)
{
final OOXMLViewer aViewer = new OOXMLViewer();
aViewer.SetFile(aFileChooser.getSelectedFile());
}
}
});
aFileMenu.add(aOpenItem);
return aMenuBar;
}
private final JFrame maFrame;
private final JComponent maContainer;
}