/**
* Copyright 2014
* SMEdit https://github.com/StarMade/SMEdit
* SMTools https://github.com/StarMade/SMTools
*
* 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
*
* 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 jo.sm.factories.ship.filter;
import java.io.File;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import jo.sm.logic.StarMadeLogic;
import jo.sm.logic.utils.IntegerUtils;
import jo.sm.logic.utils.ResourceUtils;
import jo.sm.logic.utils.ShortUtils;
import jo.sm.logic.utils.StringUtils;
import jo.sm.logic.utils.XMLUtils;
import jo.sm.mods.IStarMadePlugin;
import jo.sm.mods.IStarMadePluginFactory;
import jo.sm.ui.BlockTypeColors;
import jo.util.Paths;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
/**
* @Auther Jo Jaquinta for SMEdit Classic - version 1.0
**/
public class ViewFilterFactory implements IStarMadePluginFactory {
private final List<FilterDefinition> mDefs;
private final List<IStarMadePlugin> mPlugins;
public ViewFilterFactory() {
this.mPlugins = new ArrayList<>();
this.mDefs = new ArrayList<>();
loadDefinitions();
loadPlugins();
}
@Override
public IStarMadePlugin[] getPlugins() {
return mPlugins.toArray(new IStarMadePlugin[0]);
}
private void loadPlugins() {
for (FilterDefinition fd : mDefs) {
mPlugins.add(new SelectFilterPlugin(fd));
}
}
private void loadDefinitions() {
File plugins = new File(Paths.getPluginsDirectory());
File viewFilters = new File(plugins, "ViewFilters.xml");
Document xml;
if (viewFilters.exists()) {
xml = XMLUtils.readFile(viewFilters);
} else {
xml = XMLUtils.readStream(ResourceUtils.loadSystemResourceStream("ViewFilters.xml", ViewFilterFactory.class));
}
loadDefinitions(xml);
}
private void loadDefinitions(Document xml) {
BlockTypeColors.loadBlockIcons();
Node fs = XMLUtils.findFirstNode(xml, "filters");
String baseAuthor = XMLUtils.getAttribute(fs, "author");
for (Node f : XMLUtils.findNodes(fs, "filter")) {
String title = XMLUtils.getAttribute(f, "title");
String desc = XMLUtils.getAttribute(f, "descriptions");
String author = XMLUtils.getAttribute(f, "author");
int priority = IntegerUtils.parseInt(XMLUtils.getAttribute(f, "priority"));
if (StringUtils.isTrivial(author)) {
author = baseAuthor;
}
Set<Short> ids = new HashSet<>();
for (Node b : XMLUtils.findNodes(f, "block")) {
String id = XMLUtils.getAttribute(b, "type");
if (BlockTypeColors.mBlockTypes.containsKey(id)) {
ids.add(ShortUtils.parseShort(BlockTypeColors.mBlockTypes.get(id)));
} else {
short val = ShortUtils.parseShort(id);
if (val > 0) {
ids.add(val);
}
}
}
if (!StringUtils.isTrivial(title)) {
FilterDefinition def = new FilterDefinition();
def.setTitle(title);
def.setDescription(desc);
def.setAuthor(author);
def.setPriority(priority);
def.setBlocks(ids);
mDefs.add(def);
}
}
}
}