blob: 2fc5e67c47ab68c54045cdacb0e119a147834d6a [file] [log] [blame]
/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
*
* Copyright 2008, 2010 Oracle and/or its affiliates. All rights reserved.
*
* Use is subject to license terms.
*
* Licensed 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. You can also
* obtain a copy of the License at http://odftoolkit.org/docs/license.txt
*
* 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.odftoolkit.odfdom.dom.element;
import org.odftoolkit.odfdom.pkg.OdfFileDom;
import org.odftoolkit.odfdom.pkg.OdfName;
import org.odftoolkit.odfdom.dom.OdfDocumentNamespace;
import org.odftoolkit.odfdom.dom.style.OdfStyleFamily;
import org.w3c.dom.Attr;
/**
* This class decides upon the shape style attribute, whether the style family is
* of type 'graphic' or 'presentation'.
*
*
* Why do have ODF shapes two alternatives for their style:family attribute?
*
* In ODF a style (ie. style:style) is always identified not alone by its name,
* but as well by its style:family. Elements are in general predefined to one style:family.
* For instance, a paragraph (text:p) will have a style from the style:family="paragraph",
* a span (text:span) would have a style:family="text".
*
* Only ODF shapes (e.g. draw:frame) can choose between two different style:family values,
* ie. 'presentation' and 'graphic'.
*
* The idea behind is that 'graphic' family shapes have a style that belong to the document
* similar as all other styles, but 'presentation' family shapes have a style that belongs
* to a master page.
*
* The difference:
* Whenever in an application the master page of a page is being changed, all 'graphic'
* shapes look the same, only the 'presentation' shapes will get a new look-and-feel
* from the new master page.
*/
abstract public class OdfStyleableShapeElement extends OdfStylableElement {
private static final long serialVersionUID = 3604813885619852184L;
private static OdfName PresStyleAttrName = OdfName.newName(OdfDocumentNamespace.PRESENTATION, "style-name");
private static OdfName DrawStyleAttrName = OdfName.newName(OdfDocumentNamespace.DRAW, "style-name");
public OdfStyleableShapeElement(OdfFileDom ownerDocument, OdfName name) {
super(ownerDocument, name, OdfStyleFamily.Graphic, DrawStyleAttrName);
}
/**
* When the style-name prefix is changed between draw: and presentation:
* the style:family is adjusted as well
*
* @param uri the namespace uri of the attribute to be changed
* @param localname of the attribute to be changed
*/
protected void adjustStyleNameAttrib(String uri, String localname) {
if (DrawStyleAttrName.equals(uri, localname)) {
mStyleNameAttrib = DrawStyleAttrName;
mFamily = OdfStyleFamily.Graphic;
} else if (PresStyleAttrName.equals(uri, localname)) {
mStyleNameAttrib = PresStyleAttrName;
mFamily = OdfStyleFamily.Presentation;
}
}
@Override
public void setAttributeNS(String uri, String localname, String value) {
if ((value != null) && (value.length() != 0)) {
adjustStyleNameAttrib(uri, localname);
}
super.setAttributeNS(uri, localname, value);
}
@Override
public Attr setAttributeNodeNS(Attr newAttr) {
String uri = newAttr.getNamespaceURI();
String localname = newAttr.getName();
adjustStyleNameAttrib(uri, localname);
return super.setAttributeNodeNS(newAttr);
}
}