blob: 03331960f87d8c26b724a196384da0bf69f0e6aa [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 com.sun.star.wizards.text;
import com.sun.star.beans.XPropertySet;
import com.sun.star.container.XIndexAccess;
import com.sun.star.container.XNameAccess;
import com.sun.star.container.XNamed;
import com.sun.star.lang.IllegalArgumentException;
import com.sun.star.lang.XMultiServiceFactory;
import com.sun.star.text.ControlCharacter;
import com.sun.star.text.SectionFileLink;
import com.sun.star.text.XText;
import com.sun.star.text.XTextContent;
import com.sun.star.text.XTextCursor;
import com.sun.star.text.XTextDocument;
import com.sun.star.text.XTextSectionsSupplier;
import com.sun.star.uno.AnyConverter;
import com.sun.star.uno.Exception;
import com.sun.star.uno.UnoRuntime;
import com.sun.star.wizards.common.Helper;
import com.sun.star.wizards.common.PropertyNames;
public class TextSectionHandler
{
public XTextSectionsSupplier xTextSectionsSupplier;
private XMultiServiceFactory xMSFDoc;
private XTextDocument xTextDocument;
private XText xText;
/** Creates a new instance of TextSectionHandler */
public TextSectionHandler(XMultiServiceFactory xMSF, XTextDocument xTextDocument)
{
this.xMSFDoc = xMSF;
this.xTextDocument = xTextDocument;
xText = xTextDocument.getText();
xTextSectionsSupplier = UnoRuntime.queryInterface(XTextSectionsSupplier.class, xTextDocument);
}
public void removeTextSectionbyName(String SectionName)
{
try
{
XNameAccess xAllTextSections = xTextSectionsSupplier.getTextSections();
if (xAllTextSections.hasByName(SectionName))
{
Object oTextSection = xTextSectionsSupplier.getTextSections().getByName(SectionName);
removeTextSection(oTextSection);
}
}
catch (Exception exception)
{
exception.printStackTrace(System.out);
}
}
public boolean hasTextSectionByName(String SectionName)
{
com.sun.star.container.XNameAccess xAllTextSections = xTextSectionsSupplier.getTextSections();
return xAllTextSections.hasByName(SectionName);
}
public void removeLastTextSection()
{
try
{
XIndexAccess xAllTextSections = UnoRuntime.queryInterface(XIndexAccess.class, xTextSectionsSupplier.getTextSections());
Object oTextSection = xAllTextSections.getByIndex(xAllTextSections.getCount() - 1);
removeTextSection(oTextSection);
}
catch (Exception exception)
{
exception.printStackTrace(System.out);
}
}
public void removeTextSection(Object _oTextSection)
{
try
{
XTextContent xTextContentTextSection = UnoRuntime.queryInterface(XTextContent.class, _oTextSection);
xText.removeTextContent(xTextContentTextSection);
}
catch (Exception exception)
{
exception.printStackTrace(System.out);
}
}
public void removeInvisibleTextSections()
{
try
{
XIndexAccess xAllTextSections = UnoRuntime.queryInterface(XIndexAccess.class, xTextSectionsSupplier.getTextSections());
int TextSectionCount = xAllTextSections.getCount();
for (int i = TextSectionCount - 1; i >= 0; i--)
{
XTextContent xTextContentTextSection = UnoRuntime.queryInterface(XTextContent.class, xAllTextSections.getByIndex(i));
XPropertySet xTextSectionPropertySet = UnoRuntime.queryInterface(XPropertySet.class, xTextContentTextSection);
boolean bRemoveTextSection = (!AnyConverter.toBoolean(xTextSectionPropertySet.getPropertyValue("IsVisible")));
if (bRemoveTextSection)
{
xText.removeTextContent(xTextContentTextSection);
}
}
}
catch (Exception exception)
{
exception.printStackTrace(System.out);
}
}
public void removeAllTextSections()
{
try
{
XIndexAccess xAllTextSections = UnoRuntime.queryInterface(XIndexAccess.class, xTextSectionsSupplier.getTextSections());
int TextSectionCount = xAllTextSections.getCount();
for (int i = TextSectionCount - 1; i >= 0; i--)
{
XTextContent xTextContentTextSection = UnoRuntime.queryInterface(XTextContent.class, xAllTextSections.getByIndex(i));
XPropertySet xTextSectionPropertySet = UnoRuntime.queryInterface(XPropertySet.class, xTextContentTextSection);
xText.removeTextContent(xTextContentTextSection);
}
}
catch (Exception exception)
{
exception.printStackTrace(System.out);
}
}
public void breakLinkofTextSections()
{
try
{
Object oTextSection;
XIndexAccess xAllTextSections = UnoRuntime.queryInterface(XIndexAccess.class, xTextSectionsSupplier.getTextSections());
int iSectionCount = xAllTextSections.getCount();
SectionFileLink oSectionLink = new SectionFileLink();
oSectionLink.FileURL = PropertyNames.EMPTY_STRING;
for (int i = 0; i < iSectionCount; i++)
{
oTextSection = xAllTextSections.getByIndex(i);
Helper.setUnoPropertyValues(oTextSection, new String[]
{
"FileLink", "LinkRegion"
}, new Object[]
{
oSectionLink, PropertyNames.EMPTY_STRING
});
}
}
catch (Exception exception)
{
exception.printStackTrace(System.out);
}
}
public void breakLinkOfTextSection(Object oTextSection)
{
SectionFileLink oSectionLink = new SectionFileLink();
oSectionLink.FileURL = PropertyNames.EMPTY_STRING;
Helper.setUnoPropertyValues(oTextSection, new String[]
{
"FileLink", "LinkRegion"
}, new Object[]
{
oSectionLink, PropertyNames.EMPTY_STRING
});
}
public void linkSectiontoTemplate(String TemplateName, String SectionName)
{
try
{
Object oTextSection = xTextSectionsSupplier.getTextSections().getByName(SectionName);
linkSectiontoTemplate(oTextSection, TemplateName, SectionName);
}
catch (Exception e)
{
e.printStackTrace(System.out);
}
}
public void linkSectiontoTemplate(Object oTextSection, String TemplateName, String SectionName)
{
SectionFileLink oSectionLink = new SectionFileLink();
oSectionLink.FileURL = TemplateName;
Helper.setUnoPropertyValues(oTextSection, new String[]
{
"FileLink", "LinkRegion"
}, new Object[]
{
oSectionLink, SectionName
});
XNamed xSectionName = UnoRuntime.queryInterface(XNamed.class, oTextSection);
String NewSectionName = xSectionName.getName();
if (NewSectionName.compareTo(SectionName) != 0)
{
xSectionName.setName(SectionName);
}
}
public void insertTextSection(String GroupName, String TemplateName, boolean _bAddParagraph)
{
try
{
if (_bAddParagraph)
{
XTextCursor xTextCursor = xText.createTextCursor();
xText.insertControlCharacter(xTextCursor, ControlCharacter.PARAGRAPH_BREAK, false);
// Helper.setUnoPropertyValue(xTextCursor, "PageDescName", "First Page");
xTextCursor.collapseToEnd();
}
XTextCursor xSecondTextCursor = xText.createTextCursor();
xSecondTextCursor.gotoEnd(false);
insertTextSection(GroupName, TemplateName, xSecondTextCursor);
}
catch (IllegalArgumentException e)
{
e.printStackTrace(System.out);
}
}
public void insertTextSection(String sectionName, String templateName, XTextCursor position)
{
try
{
Object xTextSection;
if (xTextSectionsSupplier.getTextSections().hasByName(sectionName))
{
xTextSection = xTextSectionsSupplier.getTextSections().getByName(sectionName);
}
else
{
xTextSection = xMSFDoc.createInstance("com.sun.star.text.TextSection");
XTextContent xTextContentSection = UnoRuntime.queryInterface(XTextContent.class, xTextSection);
position.getText().insertTextContent(position, xTextContentSection, false);
}
linkSectiontoTemplate(xTextSection, templateName, sectionName);
}
catch (Exception exception)
{
exception.printStackTrace(System.out);
}
}
}