You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@clerezza.apache.org by re...@apache.org on 2015/04/14 15:12:55 UTC
[20/87] [abbrv] [partial] clerezza git commit: CLEREZZA-966: removed
platform. prefix of folder names
http://git-wip-us.apache.org/repos/asf/clerezza/blob/70220239/platform/language/platform.language.core/src/main/java/org/apache/clerezza/platform/language/LanguageDescription.java
----------------------------------------------------------------------
diff --git a/platform/language/platform.language.core/src/main/java/org/apache/clerezza/platform/language/LanguageDescription.java b/platform/language/platform.language.core/src/main/java/org/apache/clerezza/platform/language/LanguageDescription.java
new file mode 100644
index 0000000..498dbbb
--- /dev/null
+++ b/platform/language/platform.language.core/src/main/java/org/apache/clerezza/platform/language/LanguageDescription.java
@@ -0,0 +1,115 @@
+/*
+ * 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 org.apache.clerezza.platform.language;
+
+import java.util.Iterator;
+import java.util.concurrent.locks.Lock;
+import org.apache.clerezza.rdf.core.Language;
+import org.apache.clerezza.rdf.core.Literal;
+import org.apache.clerezza.rdf.core.PlainLiteral;
+import org.apache.clerezza.rdf.core.Resource;
+import org.apache.clerezza.rdf.core.TripleCollection;
+import org.apache.clerezza.rdf.core.access.LockableMGraph;
+import org.apache.clerezza.rdf.ontologies.LINGVOJ;
+import org.apache.clerezza.rdf.ontologies.RDFS;
+import org.apache.clerezza.rdf.utils.GraphNode;
+
+/**
+ * An object of this class keeps information about a language.
+ *
+ * @author mir
+ */
+public class LanguageDescription {
+
+ private GraphNode resource;
+ private Language language;
+
+ LanguageDescription(GraphNode resource) {
+ this.resource = resource;
+ Literal iso1Literal = null;
+ TripleCollection configGraph = resource.getGraph();
+ if (configGraph instanceof LockableMGraph) {
+ LockableMGraph lockableConfigGraph = (LockableMGraph)configGraph;
+ Lock readLock = lockableConfigGraph.getLock().readLock();
+ readLock.lock();
+ try {
+ iso1Literal = (Literal) resource.getObjects(LINGVOJ.iso1).next();
+ } finally {
+ readLock.unlock();
+ }
+ } else {
+ iso1Literal = (Literal) resource.getObjects(LINGVOJ.iso1).next();
+ }
+ if (iso1Literal == null) {
+ throw new RuntimeException("No iso1 code for " +resource.getNode());
+ }
+ String iso1 = iso1Literal.getLexicalForm();
+ this.language = new Language(iso1);
+ }
+
+ /**
+ * Returns a <code>Language</code> object which represents the language
+ * described by this object.
+ * @return the described language
+ */
+ public Language getLanguage() {
+ return language;
+ }
+
+ /**
+ * Returns a graph node in the content graph which leads to further
+ * information about the language described by this object.
+ * The information are those provided by http://www.lingvoj.org/lingvoj.rdf.
+ * @return the graph node leading to further information about the described
+ * language
+ */
+ public GraphNode getResource() {
+ return resource;
+ }
+
+ /**
+ * Returns the label of the language described by this object in the
+ * specified language, or null if no lable is available in that language
+ * @param lang the language in which the label should be.
+ * @return
+ */
+ public String getLabel(Language lang) {
+ Lock readLock = null;
+ TripleCollection configGraph = resource.getGraph();
+ if (configGraph instanceof LockableMGraph) {
+ LockableMGraph lockableConfigGraph = (LockableMGraph)configGraph;
+ readLock = lockableConfigGraph.getLock().readLock();
+ readLock.lock();
+ }
+ try {
+ Iterator<Resource> labels = resource.getObjects(RDFS.label);
+ while (labels.hasNext()) {
+ PlainLiteral label = (PlainLiteral) labels.next();
+ if (label.getLanguage().equals(lang)) {
+ return label.getLexicalForm();
+ }
+ }
+ return null;
+ } finally {
+ if (readLock != null) {
+ readLock.unlock();
+ }
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/clerezza/blob/70220239/platform/language/platform.language.core/src/main/java/org/apache/clerezza/platform/language/LanguageService.java
----------------------------------------------------------------------
diff --git a/platform/language/platform.language.core/src/main/java/org/apache/clerezza/platform/language/LanguageService.java b/platform/language/platform.language.core/src/main/java/org/apache/clerezza/platform/language/LanguageService.java
new file mode 100644
index 0000000..883a9c9
--- /dev/null
+++ b/platform/language/platform.language.core/src/main/java/org/apache/clerezza/platform/language/LanguageService.java
@@ -0,0 +1,328 @@
+/*
+ * 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 org.apache.clerezza.platform.language;
+
+import java.io.IOException;
+import java.lang.ref.SoftReference;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+import java.util.concurrent.locks.Lock;
+import org.apache.clerezza.platform.config.PlatformConfig;
+import org.apache.clerezza.platform.config.SystemConfig;
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Reference;
+import org.apache.felix.scr.annotations.Service;
+import org.apache.clerezza.rdf.core.BNode;
+import org.apache.clerezza.rdf.core.Graph;
+import org.apache.clerezza.rdf.core.Language;
+import org.apache.clerezza.rdf.core.MGraph;
+import org.osgi.service.component.ComponentContext;
+import org.apache.clerezza.rdf.core.NonLiteral;
+import org.apache.clerezza.rdf.core.PlainLiteral;
+import org.apache.clerezza.rdf.core.Resource;
+import org.apache.clerezza.rdf.core.Triple;
+import org.apache.clerezza.rdf.core.UriRef;
+import org.apache.clerezza.rdf.core.access.LockableMGraph;
+import org.apache.clerezza.rdf.core.access.SecuredMGraph;
+import org.apache.clerezza.rdf.core.access.TcManager;
+import org.apache.clerezza.rdf.core.impl.SimpleMGraph;
+import org.apache.clerezza.rdf.core.impl.TripleImpl;
+import org.apache.clerezza.rdf.core.serializedform.ParsingProvider;
+import org.apache.clerezza.rdf.core.serializedform.SupportedFormat;
+import org.apache.clerezza.rdf.ontologies.LINGVOJ;
+import org.apache.clerezza.rdf.ontologies.PLATFORM;
+import org.apache.clerezza.rdf.ontologies.RDF;
+import org.apache.clerezza.rdf.ontologies.RDFS;
+import org.apache.clerezza.rdf.utils.GraphNode;
+import org.apache.clerezza.rdf.utils.RdfList;
+
+/**
+ * This class provides a OSGi service for managing languages in the Clerezza
+ * platform.
+ *
+ * @author mir
+ */
+@Component(immediate=true, enabled= true)
+@Service(LanguageService.class)
+public class LanguageService {
+
+ @Reference
+ private TcManager tcManager;
+
+ /**
+ * this is linked to the system-graph, accessing requires respective
+ * permission
+ */
+ private List<Resource> languageList;
+ /**
+ * no permission on the system graph required to access this
+ */
+ private List<Resource> languageListCache;
+
+ private static final String PARSER_FILTER =
+ "(supportedFormat=" + SupportedFormat.RDF_XML +")";
+
+ @Reference(target=PARSER_FILTER)
+ private ParsingProvider parser;
+
+ @Reference(target = SystemConfig.SYSTEM_GRAPH_FILTER)
+ private MGraph securedSystemGraph;
+
+ @Reference(target = PlatformConfig.CONFIG_GRAPH_FILTER)
+ private MGraph securedConfigGraph;
+
+ private SoftReference<Graph> softLingvojGraph = new SoftReference<Graph>(null);
+
+
+ private LockableMGraph getSystemGraph() {
+ return ((SecuredMGraph) securedSystemGraph).getUnsecuredMGraph();
+ }
+
+ private LockableMGraph getConfigGraph() {
+ return ((SecuredMGraph) securedConfigGraph).getUnsecuredMGraph();
+ }
+
+ /**
+ * Returns a <code>List</code> of <code>LanguageDescription</code>s which
+ * describe the languages which are supported by the platform. The first
+ * entry describes the default language of the platform.
+ * @return a list containing all language descriptions.
+ */
+ public List<LanguageDescription> getLanguages() {
+ List<LanguageDescription> langList = new ArrayList<LanguageDescription>();
+ Iterator<Resource> languages = languageListCache.iterator();
+ while (languages.hasNext()) {
+ UriRef language = (UriRef) languages.next();
+ langList.add(new LanguageDescription(new GraphNode(language, getConfigGraph())));
+ }
+ return langList;
+ }
+
+ /**
+ * Returns the <code>LanguageDescription</code> of the default language
+ * of the platform.
+ * @return the language description of the default language.
+ */
+ public LanguageDescription getDefaultLanguage() {
+ return new LanguageDescription(
+ new GraphNode(languageListCache.get(0), getConfigGraph()));
+ }
+
+ /**
+ * Returns a set containg all language uris which are in the
+ * <http://www.lingvoj.org/lingvoj> graph which is included in this bundle.
+ * @return a set containing all language uris. This uris can be used to
+ * add the language to Clerezza over the addLanguage()-method in this class.
+ */
+ public Set<UriRef> getAllLanguages() {
+ Set<UriRef> result = new HashSet<UriRef>();
+ Graph lingvojGraph = getLingvojGraph();
+ Iterator<Triple> languages = lingvojGraph.filter(null, RDFS.isDefinedBy,
+ null);
+ while (languages.hasNext()) {
+ UriRef languageUri = (UriRef) languages.next().getSubject();
+ result.add(languageUri);
+ }
+ return result;
+ }
+
+ /**
+ * Returns a language uri of a language which has a label containing the
+ * specified languageName. The label itself is in the language specified through
+ * inLanguage. If inLanguage is null, then all labels of a language of searched.
+ * If no language was found in the <http://www.lingvoj.org/lingvoj>
+ * graph, then null is returned. The returned uri can be used to
+ * add the language to Clerezza over the addLanguage()-method in this class.
+ * @return a language uris
+ */
+ public UriRef getLanguage(String languageName, Language inLanguage) {
+ Graph lingvojGraph = getLingvojGraph();
+ Iterator<Triple> languages = lingvojGraph.filter(null, RDFS.isDefinedBy, null);
+ while (languages.hasNext()) {
+ GraphNode languageNode = new GraphNode((UriRef) languages.next().getSubject(), lingvojGraph);
+ Iterator<Resource> labels = languageNode.getObjects(RDFS.label);
+ while (labels.hasNext()) {
+ PlainLiteral label = (PlainLiteral) labels.next();
+ if (label.getLanguage().equals(inLanguage) || inLanguage == null) {
+ if (label.getLexicalForm().contains(languageName)) {
+ return (UriRef) languageNode.getNode();
+ }
+ }
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Get the language as <code>GraphNode</code> specified through languageUri.
+ * The languageUri has to be a <http://www.lingvoj.org/ontology#Lingvo>
+ * according to the graph <http://www.lingvoj.org/lingvoj> included in this
+ * bundle., e.g. "http://www.lingvoj.org/lang/de".
+ *
+ * @param languageUri The language uri which specifies the language
+ */
+ public GraphNode getLanguageNode(NonLiteral langUri) {
+ Graph lingvojRdf = getLingvojGraph();
+ return new GraphNode(langUri, lingvojRdf);
+ }
+
+ /**
+ * Adds the language specified through languageUri to the Clerezza
+ * platform. The languageUri has to be a <http://www.lingvoj.org/ontology#Lingvo>
+ * according to the graph <http://www.lingvoj.org/lingvoj> included in this
+ * bundle., e.g. "http://www.lingvoj.org/lang/de" adds German.
+ * The uri is added to the system graph and its context to the config graph.
+ * The context added is the context provided by lingvoj.rdf.
+ * @param languageUri The language uri which specifies the language to be
+ * added to the platform.
+ */
+ public void addLanguage(UriRef languageUri) {
+ if (!languageListCache.contains(languageUri)) {
+ LockableMGraph systemGraph = getSystemGraph();
+ Lock writeLock = systemGraph.getLock().writeLock();
+ writeLock.lock();
+ try {
+ if (languageList.add(languageUri)) {
+ addToLanguageConfigGraph(languageUri);
+ }
+ } finally {
+ writeLock.unlock();
+ }
+ languageListCache.add(languageUri);
+ }
+ }
+
+ private void synchronizeContentGraph() {
+ for (Resource resource : languageListCache) {
+ addToLanguageConfigGraph((UriRef)resource);
+ }
+ }
+ /**
+ * Adds the language information of the language specified through
+ * languageUri to the config graph. The languageUri has to be of type
+ * <http://www.lingvoj.org/ontology#Lingvo> according to the graph
+ * <http://www.lingvoj.org/lingvoj> included in this
+ * bundle., e.g. "http://www.lingvoj.org/lang/de" adds German.
+ *
+ * The added language will not be a platform language.
+ *
+ * @param languageUri
+ */
+ public void addToLanguageConfigGraph(NonLiteral languageUri) {
+ LockableMGraph configGraph = getConfigGraph();
+ Lock writeLock = configGraph.getLock().writeLock();
+ writeLock.lock();
+ try {
+ if (!configGraph.filter(languageUri, LINGVOJ.iso1, null).hasNext()) {
+ configGraph.addAll(getLanguageContext(languageUri));
+ }
+ } finally {
+ writeLock.unlock();
+ }
+ }
+
+ private Graph getLanguageContext(NonLiteral langUri) {
+ Graph lingvojRdf = getLingvojGraph();
+ GraphNode languageNode = new GraphNode(langUri, lingvojRdf);
+ return languageNode.getNodeContext();
+ }
+
+ private Graph getLingvojGraph() {
+ Graph lingvojGraph = softLingvojGraph.get();
+ if (lingvojGraph != null) {
+ return lingvojGraph;
+ }
+ URL config = getClass().getResource("lingvoj.rdf");
+ if (config == null) {
+ throw new RuntimeException("no file found");
+ }
+ try {
+ MGraph lingvojMGraph = new SimpleMGraph();
+ parser.parse(lingvojMGraph, config.openStream(), SupportedFormat.RDF_XML, null);
+ lingvojGraph = lingvojMGraph.getGraph();
+ softLingvojGraph = new SoftReference<Graph>(lingvojGraph);
+ return lingvojGraph;
+ } catch (IOException ex) {
+ throw new RuntimeException(ex);
+ }
+ }
+
+ /**
+ * The activate method is called when SCR activates the component configuration.
+ *
+ * @param componentContext
+ */
+ protected void activate(ComponentContext componentContext) {
+ LockableMGraph systemGraph = getSystemGraph();
+ NonLiteral listNode = getListNode(systemGraph);
+
+ Lock writeLock = systemGraph.getLock().writeLock();
+ writeLock.lock();
+ try {
+ // the constructor of RdfList might write to the graph! => requires a write lock
+ final RdfList rdfList = new RdfList(listNode, systemGraph);
+ languageList = Collections.synchronizedList(rdfList);
+ //access to languages should not require access to system graph,
+ //so copying the resources to an ArrayList
+ languageListCache = Collections.synchronizedList(
+ new ArrayList<Resource>(rdfList));
+ if (languageListCache.size() == 0) {
+ addLanguage(new UriRef("http://www.lingvoj.org/lang/en"));
+ }
+ //this is to make sure the content graph contains the relevant data
+ synchronizeContentGraph();
+ } finally {
+ writeLock.unlock();
+ }
+ }
+
+ private NonLiteral getListNode(LockableMGraph systemGraph) {
+ NonLiteral instance = null;
+ Lock readLock = systemGraph.getLock().readLock();
+ readLock.lock();
+ try {
+ Iterator<Triple> instances = systemGraph.filter(null, RDF.type, PLATFORM.Instance);
+ if (!instances.hasNext()) {
+ throw new RuntimeException("No Platform:Instance in system graph.");
+ }
+ instance = instances.next().getSubject();
+ Iterator<Triple> langListIter = systemGraph.filter(instance,
+ PLATFORM.languages, null);
+ if (langListIter.hasNext()) {
+ return (NonLiteral) langListIter.next().getObject();
+ }
+ } finally {
+ readLock.unlock();
+ }
+ BNode listNode = new BNode();
+ Lock writeLock = systemGraph.getLock().writeLock();
+ writeLock.lock();
+ try {
+ systemGraph.add(new TripleImpl(instance, PLATFORM.languages, listNode));
+ } finally {
+ writeLock.unlock();
+ }
+ return listNode;
+ }
+}
http://git-wip-us.apache.org/repos/asf/clerezza/blob/70220239/platform/language/platform.language.core/src/main/java/org/apache/clerezza/platform/language/LanguageWidget.java
----------------------------------------------------------------------
diff --git a/platform/language/platform.language.core/src/main/java/org/apache/clerezza/platform/language/LanguageWidget.java b/platform/language/platform.language.core/src/main/java/org/apache/clerezza/platform/language/LanguageWidget.java
new file mode 100644
index 0000000..a403a08
--- /dev/null
+++ b/platform/language/platform.language.core/src/main/java/org/apache/clerezza/platform/language/LanguageWidget.java
@@ -0,0 +1,185 @@
+/*
+ * 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 org.apache.clerezza.platform.language;
+
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.security.AccessControlException;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+import java.util.List;
+import java.util.concurrent.locks.Lock;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.core.MediaType;
+import org.apache.clerezza.platform.Constants;
+import org.apache.clerezza.platform.config.PlatformConfig;
+
+import org.apache.clerezza.rdf.utils.GraphNode;
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Property;
+import org.apache.felix.scr.annotations.Reference;
+import org.apache.felix.scr.annotations.Service;
+import org.osgi.service.component.ComponentContext;
+import org.apache.clerezza.platform.language.ontologies.LANGUAGE;
+import org.apache.clerezza.platform.typerendering.RenderletManager;
+import org.apache.clerezza.platform.typerendering.UserContextProvider;
+import org.apache.clerezza.platform.typerendering.scalaserverpages.ScalaServerPagesRenderlet;
+import org.apache.clerezza.rdf.core.BNode;
+import org.apache.clerezza.rdf.core.NonLiteral;
+import org.apache.clerezza.rdf.core.TripleCollection;
+import org.apache.clerezza.rdf.core.UriRef;
+import org.apache.clerezza.rdf.core.access.LockableMGraph;
+import org.apache.clerezza.rdf.core.access.TcManager;
+import org.apache.clerezza.rdf.core.impl.TripleImpl;
+import org.apache.clerezza.rdf.ontologies.PLATFORM;
+import org.apache.clerezza.rdf.ontologies.RDF;
+import org.apache.clerezza.rdf.utils.RdfList;
+import org.apache.clerezza.rdf.utils.UnionMGraph;
+import org.apache.clerezza.web.fileserver.BundlePathNode;
+import org.apache.clerezza.web.fileserver.FileServer;
+import org.apache.felix.scr.annotations.Services;
+import org.osgi.framework.Bundle;
+import org.wymiwyg.commons.util.dirbrowser.PathNode;
+
+/**
+ * Use the LanguageWidget service to store an RDF list of
+ * languages in a triple collection and retrieve the root node of the list. The widget
+ * can be rendered by using the render method. Via javascript function
+ * LanguageList.getLanguage() the currently selected language can be retrieved.
+ *
+ * @author tio
+ */
+@Component(enabled=true, immediate=true)
+@Services({
+ @Service(Object.class),
+ @Service(UserContextProvider.class)
+})
+@Property(name = "javax.ws.rs", boolValue = true)
+
+@Path("/language-widget")
+public class LanguageWidget implements UserContextProvider {
+
+ private FileServer fileServer;
+
+ @Reference
+ private TcManager tcManager;
+
+ @Reference
+ private PlatformConfig platformConfig;
+
+ @Reference
+ private RenderletManager renderletManager;
+
+ @Reference
+ private LanguageService languageService;
+
+ protected void activate(ComponentContext context) throws IOException, URISyntaxException {
+ Bundle bundle = context.getBundleContext().getBundle();
+ URL resourceDir = getClass().getResource("staticweb");
+ PathNode pathNode = new BundlePathNode(bundle, resourceDir.getPath());
+
+ fileServer = new FileServer(pathNode);
+
+ URL template = getClass().getResource("language-list.ssp");
+ renderletManager.registerRenderlet(ScalaServerPagesRenderlet.class.getName(),
+ new UriRef(template.toURI().toString()),
+ LANGUAGE.LanguageList, "naked",
+ MediaType.APPLICATION_XHTML_XML_TYPE, true);
+
+ }
+
+ private LockableMGraph getConfigGraph() {
+ return tcManager.getMGraph(Constants.CONFIG_GRAPH_URI);
+ }
+
+ /**
+ *
+ * @param node The graph of the specified GraphNode will not be locked, neither for reading nor writing.
+ * It is the responsibility of the calling function to set the write lock, if necessary.
+ * @return
+ */
+ @Override
+ public GraphNode addUserContext(final GraphNode node) {
+ final NonLiteral platformInstance = AccessController.doPrivileged(
+ new PrivilegedAction<NonLiteral>() {
+ @Override
+ public NonLiteral run() {
+ return (NonLiteral) platformConfig.getPlatformInstance().getNode();
+ }
+ });
+ try {
+ return addLanguages(node, platformInstance, languageService.getLanguages(), false);
+
+ } catch (AccessControlException ex) {
+ return AccessController.doPrivileged(
+ new PrivilegedAction<GraphNode>() {
+ @Override
+ public GraphNode run() {
+ return addLanguages(node, platformInstance, languageService.getLanguages(), true);
+ }
+ });
+ }
+ }
+
+ private GraphNode addLanguages(GraphNode node, NonLiteral platformInstance, List<LanguageDescription> languages,
+ boolean copyToNode) {
+ TripleCollection graph = node.getGraph();
+ BNode listNode = new BNode();
+ RdfList list = new RdfList(listNode, graph);
+ LockableMGraph configGraph = getConfigGraph();
+ Lock readLock = configGraph.getLock().readLock();
+ for (LanguageDescription languageDescription : languages) {
+ NonLiteral languageUri = (NonLiteral) languageDescription.getResource().getNode();
+ list.add(languageUri);
+ if (copyToNode) {
+ readLock.lock();
+ try {
+ graph.addAll(new GraphNode(languageUri, configGraph).getNodeContext());
+ } finally {
+ readLock.unlock();
+ }
+ }
+ }
+ node.addProperty(PLATFORM.instance, platformInstance);
+ graph.add(new TripleImpl(platformInstance, RDF.type, PLATFORM.Instance));
+ graph.add(new TripleImpl(platformInstance, PLATFORM.languages, listNode));
+ graph.add(new TripleImpl(listNode, RDF.type, LANGUAGE.LanguageList));
+ if (!copyToNode) {
+ node = new GraphNode(node.getNode(), new UnionMGraph(graph, configGraph));
+ }
+ return node;
+ }
+
+ /**
+ * Returns a PathNode of a static file from the staticweb folder.
+ *
+ * @param path specifies the path param of a URI
+ *
+ * @return {@link PathNode}
+ */
+ @GET
+ @Path("{path:.+}")
+ public PathNode getStaticFile(@PathParam("path") String path) {
+ return fileServer.getNode(path);
+ }
+}
http://git-wip-us.apache.org/repos/asf/clerezza/blob/70220239/platform/language/platform.language.core/src/main/resources/org/apache/clerezza/platform/language/language-list.ssp
----------------------------------------------------------------------
diff --git a/platform/language/platform.language.core/src/main/resources/org/apache/clerezza/platform/language/language-list.ssp b/platform/language/platform.language.core/src/main/resources/org/apache/clerezza/platform/language/language-list.ssp
new file mode 100644
index 0000000..362009b
--- /dev/null
+++ b/platform/language/platform.language.core/src/main/resources/org/apache/clerezza/platform/language/language-list.ssp
@@ -0,0 +1,50 @@
+/*
+ *
+ * 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.
+ *
+*/
+
+import org.apache.clerezza.rdf.scala.utils.RichGraphNode
+def lingvoj(s: Any) = new UriRef("http://www.lingvoj.org/ontology#"+s)
+def rdfs(s: Any) = new UriRef("http://www.w3.org/2000/01/rdf-schema#"+s)
+def getLabel(language:Language, node:RichGraphNode) : String = {
+ val matchingLabels = for (label <- node/rdfs("label");
+ val labelLiteral = label.getNode.asInstanceOf[PlainLiteral];
+ if (labelLiteral.getLanguage.equals(language))
+ ) yield {
+ label*
+ }
+ if (matchingLabels.length == 0) {
+ "no label"
+ } else {
+ matchingLabels.apply(0)
+ }
+}
+resultDocModifier.addScriptReference("/language-widget/scripts/language-list.js")
+val defaultLanguage:Language = new Language(res%!!(0)/lingvoj("iso1")*)
+
+<select name="availablelanguages" id="availablelanguages">
+ <option value={defaultLanguage.toString} selected="selected">{getLabel(defaultLanguage, res%!!(0))}</option>
+ {
+ for(language <- res!!;
+ val iso1 = language/lingvoj("iso1")*;
+ if (!iso1.equals(defaultLanguage.toString))) yield {
+ <option value={iso1}>{getLabel(defaultLanguage,language)}</option>
+ }
+ }
+</select>