package org.korsakow.services.conversion;
import java.awt.Color;
import java.util.UUID;
import javax.xml.xpath.XPathException;
import org.korsakow.domain.interchange.ddg.DynamicPropertiesDDG;
import org.korsakow.domain.interf.ISnu.BackgroundSoundMode;
import org.korsakow.ide.resources.WidgetType;
import org.korsakow.ide.resources.widget.FontStyle;
import org.korsakow.ide.resources.widget.FontWeight;
import org.korsakow.ide.resources.widget.PlayMode;
import org.korsakow.ide.resources.widget.ScalingPolicy;
import org.korsakow.ide.resources.widget.TextDecoration;
import org.korsakow.services.util.ColorFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
public class ConvertUpTo22_4 extends ConversionModule
{
public ConvertUpTo22_4(Document document)
{
super(document);
}
@Override
public void convert() throws ConversionException
{
try {
document.getDocumentElement().setAttribute("versionMajor", "5.0.5");
document.getDocumentElement().setAttribute("versionMinor", "22.4");
for (Node node : helper.xpathAsList("//Snu")) {
if (helper.getBoolean((Element)node, "backgroundSoundLooping") == null)
helper.setBoolean((Element)node, "backgroundSoundLooping", true);
if (helper.getString((Element)node, "backgroundSoundMode") == null)
helper.setString((Element)node, "backgroundSoundMode", BackgroundSoundMode.KEEP.getId());
}
for (Node node : helper.xpathAsList("//Project")) {
if (helper.getBoolean((Element)node, "backgroundSoundLooping") == null)
helper.setBoolean((Element)node, "backgroundSoundLooping", true);
if (helper.getString((Element)node, "uuid") == null)
helper.setString((Element)node, "uuid", UUID.randomUUID().toString());
helper.setLong((Element)node, "defaultInterface", helper.xpathAsLong("//Interface[1]/id"));
}
// interchange format
for (Node node : helper.xpathAsList("//Widget")) {
if (helper.getString((Element)node, "widgetType") == null) {
helper.setString((Element)node, "widgetType", helper.getString((Element)node, "type"));
helper.setString((Element)node, "type", null);
}
}
helper.removeNodes("//Widget//fontBackgroundColor");
for (Node node : helper.xpathAsList("//Widget[widgetType=?]", WidgetType.MediaArea.getId())) {
if (helper.getString((Element)node, "playMode") == null)
helper.setString((Element)node, "playMode", PlayMode.Always.getId())
.setAttribute(DynamicPropertiesDDG.DYNAMIC_ATTRIBUTE, DynamicPropertiesDDG.DYNAMIC_ATTRIBUTE_TRUE);
if (helper.getString((Element)node, "looping") == null)
helper.setBoolean((Element)node, "looping", Boolean.FALSE)
.setAttribute(DynamicPropertiesDDG.DYNAMIC_ATTRIBUTE, DynamicPropertiesDDG.DYNAMIC_ATTRIBUTE_TRUE);
}
for (Node node : helper.xpathAsList("//Widget[widgetType=?]", WidgetType.MainMedia.getId())) {
if (helper.getString((Element)node, "scalingPolicy") == null)
helper.setString((Element)node, "scalingPolicy", ScalingPolicy.ScaleDownMaintainAspectRatio.getId())
.setAttribute(DynamicPropertiesDDG.DYNAMIC_ATTRIBUTE, DynamicPropertiesDDG.DYNAMIC_ATTRIBUTE_TRUE);
}
for (Node node : helper.xpathAsList("//Widget[widgetType=? or widgetType=?]",
WidgetType.SnuAutoLink.getId(),
WidgetType.SnuFixedLink.getId()
)) {
if (helper.getString((Element)node, "scalingPolicy") == null)
helper.setString((Element)node, "scalingPolicy", ScalingPolicy.MaintainAspectRatio.getId())
.setAttribute(DynamicPropertiesDDG.DYNAMIC_ATTRIBUTE, DynamicPropertiesDDG.DYNAMIC_ATTRIBUTE_TRUE);
}
boolean addedMediaControlsWarning = false;
for (Node node : helper.xpathAsList("//Widget[widgetType=?]", WidgetType.MediaArea.getId())) {
if (!addedMediaControlsWarning) {
addedMediaControlsWarning = true;
addWarning("The MediaControls widget has been replaced by individual widgets for each control");
}
node.getParentNode().removeChild(node);
}
for (Node node : helper.xpathAsList("//Widget[widgetType=? or widgetType=? or widgetType=? or widgetType=? or widgetType=?]",
WidgetType.SnuAutoLink.getId(),
WidgetType.SnuAutoMultiLink.getId(),
WidgetType.SnuFixedLink.getId(),
WidgetType.InsertText.getId(),
WidgetType.Subtitles.getId()
)) {
if (helper.getString((Element)node, "fontWeight") == null)
helper.setString((Element)node, "fontWeight", FontWeight.Normal.getId())
.setAttribute(DynamicPropertiesDDG.DYNAMIC_ATTRIBUTE, DynamicPropertiesDDG.DYNAMIC_ATTRIBUTE_TRUE);
if (helper.getString((Element)node, "fontStyle") == null)
helper.setString((Element)node, "fontStyle", FontStyle.Normal.getId())
.setAttribute(DynamicPropertiesDDG.DYNAMIC_ATTRIBUTE, DynamicPropertiesDDG.DYNAMIC_ATTRIBUTE_TRUE);
if (helper.getString((Element)node, "textDecoration") == null)
helper.setString((Element)node, "textDecoration", TextDecoration.None.getId())
.setAttribute(DynamicPropertiesDDG.DYNAMIC_ATTRIBUTE, DynamicPropertiesDDG.DYNAMIC_ATTRIBUTE_TRUE);
}
for (Node node : helper.xpathAsList("//Interface")) {
if (helper.getString((Element)node, "backgroundColor") == null)
helper.setString((Element)node, "backgroundColor", ColorFactory.toString(Color.black));
}
} catch (XPathException e) {
throw new ConversionException(e);
} catch (NumberFormatException e) {
throw new ConversionException(e);
}
}
}