/** * Copyright (c) 2011-2014, OpenIoT * * This file is part of OpenIoT. * * OpenIoT is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, version 3 of the License. * * OpenIoT is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with OpenIoT. If not, see <http://www.gnu.org/licenses/>. * * Contact: OpenIoT mailto: info@openiot.eu */ package org.openiot.ui.request.definition.web.sparql.nodes.base; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import org.apache.commons.lang3.StringUtils; import org.openiot.commons.util.PropertyManagement; public abstract class AbstractSparqlNode implements Serializable{ public static int DEPTH_SPACES = 2; public static String GRAPH_META_URI = ""; public static String GRAPH_DATA_URI = ""; private static final long serialVersionUID = 1L; private List<AbstractSparqlNode> scopedItems; private int depth = 0; static { PropertyManagement propertyManagement = new PropertyManagement(); GRAPH_META_URI = "<"+propertyManagement.getSchedulerLsmMetaGraph()+">"; GRAPH_DATA_URI = "<"+propertyManagement.getSchedulerLsmDataGraph()+">"; } public AbstractSparqlNode() { this.scopedItems = new ArrayList<AbstractSparqlNode>(); } protected boolean existsInScope( AbstractSparqlNode node ){ for( AbstractSparqlNode child : scopedItems ){ if( child.equals(node) ){ return true; } } return false; } public AbstractSparqlNode appendToScope( AbstractSparqlNode node ){ if( existsInScope(node) ){ return node; } this.scopedItems.add(node); node.setDepth(depth+1); return node; } public AbstractSparqlNode prependToScope( AbstractSparqlNode node ){ if( existsInScope(node) ){ return node; } this.scopedItems.add(0, node); node.setDepth(depth+1); return node; } public void setDepth( int depth ){ this.depth = depth; } public int getDepth(){ return this.depth; } public void removeFromScope(AbstractSparqlNode node){ this.scopedItems.remove(node); } public int getChildrenCount(){ return this.scopedItems.size(); } public List<String> generateChildren(){ List<String> out = new ArrayList<String>(scopedItems.size()); for( AbstractSparqlNode child : scopedItems ){ child.setDepth(depth+1); String childBlock = child.generate(); if( childBlock != null && !childBlock.isEmpty()){ out.add( childBlock ); } } return out; } public String generatePad( int padDepth ){ return StringUtils.leftPad("", DEPTH_SPACES * padDepth); } public abstract String generate(); }