[Yanel-commits] rev 43203 - in public/yanel/trunk/src/realms/from-scratch-realm-template: . res-types res-types/layoutselector res-types/layoutselector/src res-types/layoutselector/src/build res-types/layoutselector/src/java res-types/layoutselector/src/java/org res-types/layoutselector/src/java/org/wyona res-types/layoutselector/src/java/org/wyona/yanel res-types/layoutselector/src/java/org/wyona/yanel/impl res-types/layoutselector/src/java/org/wyona/yanel/impl/resources res-types/layoutselector/src/java/org/wyona/yanel/impl/resources/layoutselector res-types/layoutselector/src/test res-types/layoutselector/src/test/htmlunit res-types/layoutselector/src/test/htmlunit/org res-types/layoutselector/src/test/htmlunit/org/wyona res-types/layoutselector/src/test/htmlunit/org/wyona/yanel res-types/layoutselector/src/test/htmlunit/org/wyona/yanel/impl res-types/layoutselector/src/test/htmlunit/org/wyona/yanel/impl/resources res-types/layoutselector/src/test/htmlunit/org/wyona/yanel/impl/r! esources/layoutselector res-types/layoutselector/src/test/junit res-types/layoutselector/src/test/junit/org res-types/layoutselector/src/test/junit/org/wyona res-types/layoutselector/src/test/junit/org/wyona/yanel res-types/layoutselector/src/test/junit/org/wyona/yanel/impl res-types/layoutselector/src/test/junit/org/wyona/yanel/impl/resources res-types/layoutselector/src/test/junit/org/wyona/yanel/impl/resources/layoutselector res-types/layoutselector/yanel-htdocs res-types/layoutselector/yanel-htdocs/doc res-types/layoutselector/yanel-htdocs/icons res-types/layoutselector/yanel-htdocs/icons/16x16 res-types/layoutselector/yanel-htdocs/icons/22x22 res-types/layoutselector/yanel-htdocs/icons/32x32 res-types/layoutselector/yanel-htdocs/icons/scalable

michi at wyona.com michi at wyona.com
Thu Jun 11 11:40:54 CEST 2009


Author: michi
Date: 2009-06-11 11:40:54 +0200 (Thu, 11 Jun 2009)
New Revision: 43203

Added:
   public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/
   public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/
   public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/build.xml
   public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/resource.xml
   public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/src/
   public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/src/build/
   public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/src/build/build.properties
   public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/src/build/dependencies.xml
   public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/src/java/
   public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/src/java/org/
   public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/src/java/org/wyona/
   public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/src/java/org/wyona/yanel/
   public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/src/java/org/wyona/yanel/impl/
   public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/src/java/org/wyona/yanel/impl/resources/
   public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/src/java/org/wyona/yanel/impl/resources/layoutselector/
   public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/src/java/org/wyona/yanel/impl/resources/layoutselector/LayoutSelector.java
   public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/src/test/
   public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/src/test/htmlunit/
   public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/src/test/htmlunit/org/
   public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/src/test/htmlunit/org/wyona/
   public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/src/test/htmlunit/org/wyona/yanel/
   public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/src/test/htmlunit/org/wyona/yanel/impl/
   public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/src/test/htmlunit/org/wyona/yanel/impl/resources/
   public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/src/test/htmlunit/org/wyona/yanel/impl/resources/layoutselector/
   public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/src/test/htmlunit/org/wyona/yanel/impl/resources/layoutselector/LayoutSelectorWebTest.java
   public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/src/test/junit/
   public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/src/test/junit/org/
   public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/src/test/junit/org/wyona/
   public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/src/test/junit/org/wyona/yanel/
   public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/src/test/junit/org/wyona/yanel/impl/
   public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/src/test/junit/org/wyona/yanel/impl/resources/
   public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/src/test/junit/org/wyona/yanel/impl/resources/layoutselector/
   public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/src/test/junit/org/wyona/yanel/impl/resources/layoutselector/LayoutSelectorTest.java
   public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/yanel-htdocs/
   public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/yanel-htdocs/doc/
   public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/yanel-htdocs/doc/index.html
   public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/yanel-htdocs/icons/
   public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/yanel-htdocs/icons/16x16/
   public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/yanel-htdocs/icons/16x16/rt-icon.png
   public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/yanel-htdocs/icons/22x22/
   public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/yanel-htdocs/icons/22x22/rt-icon.png
   public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/yanel-htdocs/icons/32x32/
   public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/yanel-htdocs/icons/32x32/rt-icon.png
   public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/yanel-htdocs/icons/scalable/
   public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/yanel-htdocs/icons/scalable/rt-icon.svg
Log:
layout selector resource type added

Added: public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/build.xml
===================================================================
--- public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/build.xml	                        (rev 0)
+++ public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/build.xml	2009-06-11 09:40:54 UTC (rev 43203)
@@ -0,0 +1,3 @@
+<project name="yanel-layoutselector-resource-type">
+  <import file="${yanel.source.home}/src/build/resource-types/resource-type.build.xml"/>
+</project>

Added: public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/resource.xml
===================================================================
--- public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/resource.xml	                        (rev 0)
+++ public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/resource.xml	2009-06-11 09:40:54 UTC (rev 43203)
@@ -0,0 +1,17 @@
+<?xml version="1.0"?>
+
+<resource xmlns="http://www.wyona.org/yanel/1.0"
+  name="layoutselector"
+  namespace="http://www.wyona.org/yanel/resource/1.0"
+  class="org.wyona.yanel.impl.resources.layoutselector.LayoutSelector"
+  >
+<description>
+layout selector
+</description>
+
+<rtd>
+<!--
+  <property name="foo" default-value="bar"/>
+-->
+</rtd>
+</resource>

Added: public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/src/build/build.properties
===================================================================
--- public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/src/build/build.properties	                        (rev 0)
+++ public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/src/build/build.properties	2009-06-11 09:40:54 UTC (rev 43203)
@@ -0,0 +1,2 @@
+resource.name=layoutselector
+resource.version=0.0.1-dev-rXXX

Added: public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/src/build/dependencies.xml
===================================================================
--- public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/src/build/dependencies.xml	                        (rev 0)
+++ public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/src/build/dependencies.xml	2009-06-11 09:40:54 UTC (rev 43203)
@@ -0,0 +1,23 @@
+<?xml version="1.0"?>
+
+<project name="layoutselector-dependencies" xmlns:artifact="antlib:org.apache.maven.artifact.ant">
+
+  <target name="dependencies" description="Dependencies">
+    <artifact:remoteRepository id="wyona.remote.repository" url="${maven.url}"/>
+
+    <artifact:dependencies pathId="maven2.classpath" filesetId="maven2.fileset">
+      <remoteRepository refid="wyona.remote.repository"/>
+      <dependency groupId="wyona-org-yanel" artifactId="yanel-core" version="${yanel.source.version}"/>
+      <dependency groupId="javax.servlet" artifactId="servlet-api" version="2.3"/>
+    </artifact:dependencies>
+
+    <artifact:dependencies pathId="maven2.resource.classpath" filesetId="maven2.resource.fileset">
+      <remoteRepository refid="wyona.remote.repository"/>
+      <!-- No resource specific libs yet -->
+    </artifact:dependencies>
+
+    <property name="maven2.cp" refid="maven2.classpath"/>
+    <!--<echo>Maven2 classpath: ${maven2.cp}</echo>-->
+  </target>
+
+</project>

Added: public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/src/java/org/wyona/yanel/impl/resources/layoutselector/LayoutSelector.java
===================================================================
--- public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/src/java/org/wyona/yanel/impl/resources/layoutselector/LayoutSelector.java	                        (rev 0)
+++ public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/src/java/org/wyona/yanel/impl/resources/layoutselector/LayoutSelector.java	2009-06-11 09:40:54 UTC (rev 43203)
@@ -0,0 +1,588 @@
+/*
+ * Copyright 2007 Wyona
+ */
+
+package org.wyona.yanel.impl.resources.layoutselector;
+
+import org.wyona.yanel.core.Resource;
+import org.wyona.yanel.core.api.attributes.CreatableV2;
+import org.wyona.yanel.core.api.attributes.IntrospectableV1;
+import org.wyona.yanel.core.api.attributes.ModifiableV2;
+import org.wyona.yanel.core.api.attributes.VersionableV2;
+import org.wyona.yanel.core.api.attributes.ViewableV2;
+import org.wyona.yanel.core.api.attributes.WorkflowableV1;
+import org.wyona.yanel.core.attributes.versionable.RevisionInformation;
+import org.wyona.yanel.core.attributes.viewable.View;
+import org.wyona.yanel.core.attributes.viewable.ViewDescriptor;
+import org.wyona.yanel.core.workflow.WorkflowException;
+import org.wyona.yanel.core.workflow.WorkflowHelper;
+
+
+import org.wyona.yarep.core.Node;
+import org.wyona.yarep.core.Repository;
+import org.wyona.yarep.core.Revision;
+
+import javax.servlet.http.HttpServletRequest;
+
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.io.Reader;
+import java.io.Writer;
+import java.util.Date;
+import java.util.Enumeration;
+
+import org.apache.log4j.Logger;
+
+
+/**
+ *  The purpose of this class is to provide a resource which will select the
+ *  right template for the user based on the query string passed in the URL. i.e.
+ *  http://127.0.0.1:8080/yanel/from-scratch-realm/en/index.html?xslt-version=2 will
+ *  will store the version number in the session and call the /appVERSION/xslt/global.xsl
+ *  template
+ */
+public class LayoutSelector extends Resource implements ViewableV2 {
+    
+    private static Logger log = Logger.getLogger(LayoutSelector.class);
+    private String uploadMimeType; 
+    private String nodeVersionChecker ="";
+    
+
+    /**
+     * Constructor
+     * 
+     */
+    public LayoutSelector() {
+    	try {
+    		nodeVersionChecker =  getRealm().getName() + ":" + getResourceConfigProperty("layout_name") + ":xslt-version";
+    	} catch(Exception ex) {
+    		log.error("error initializing template version checker session string");
+    	}
+    };
+
+    /**
+     *
+     */
+    public ViewDescriptor[] getViewDescriptors() {
+        return null;
+    }
+
+    public View getView(String viewId, String revisionName) throws Exception {
+        View view = new View();
+        //try {
+        	view.setInputStream(getNode(nodeVersionChecker).getRevision(revisionName).getInputStream());
+        //} catch(Exception ex) {
+        //	log.error("unable to set input stream");
+        //	throw(new Exception(ex));
+        //}
+        view.setMimeType(getMimeType(viewId));
+        view.setEncoding(getResourceConfigProperty("encoding"));
+
+        return view;
+    }
+
+    /**
+     *
+     */
+    public View getView(String viewId) throws Exception {
+        View view = new View();
+        //try {
+        view.setInputStream(getNode(nodeVersionChecker).getInputStream());
+        //} catch(Exception ex) {
+        //	log.error("unable to set input stream");
+        //	throw(new Exception(ex));
+        //}
+        view.setMimeType(getMimeType(viewId));
+        view.setEncoding(getResourceConfigProperty("encoding"));
+
+        return view;
+    }
+
+    /**
+     *
+     */
+    public String getMimeType(String viewId) throws Exception {
+        // TODO: Also check mime type of data repository node
+
+        String mimeType = getResourceConfigProperty("mime-type");
+
+        if (mimeType != null) return mimeType;
+
+        // TODO: Load config mime.types ...
+        String suffix = org.wyona.commons.io.PathUtil.getSuffix(getPath());
+        if (suffix != null) {
+            log.debug("SUFFIX: " + suffix);
+            mimeType = getMimeTypeBySuffix(suffix);
+        } else {
+            log.warn("mime-type will be set to application/octet-stream, because no suffix for " + getPath());
+            mimeType = "application/octet-stream";
+        }
+        return mimeType;
+    }
+
+    /**
+     *
+     */
+    public Reader getReader() throws Exception {
+        return new InputStreamReader(getInputStream(), "UTF-8");
+    }
+
+    /**
+     *
+     */
+    public InputStream getInputStream() throws Exception {
+        return getNode(nodeVersionChecker).getInputStream();
+    }
+
+    /**
+     *
+     */
+    public Writer getWriter() throws Exception {
+        log.error("Not implemented yet!");
+        return null;
+    }
+
+    /**
+     *
+     */
+    public OutputStream getOutputStream() throws Exception {
+        log.error("TODO: Use existsNode() method!");
+        if (!getRealm().getRepository().existsNode(getPath())) {
+            // TODO: create node recursively ...
+            log.error("TODO: Use getNode() method!");
+            getRealm().getRepository().getNode(new org.wyona.commons.io.Path(getPath()).getParent().toString()).addNode(new org.wyona.commons.io.Path(getPath()).getName().toString(), org.wyona.yarep.core.NodeType.RESOURCE);
+        }
+        return getNode(nodeVersionChecker).getOutputStream();
+    }
+
+    /**
+     *
+     */
+    public void write(InputStream in) throws Exception {
+        log.warn("Not implemented yet!");
+    }
+
+    /**
+     *
+     */
+    public long getLastModified() throws Exception {
+       Node node = getNode(nodeVersionChecker);
+       long lastModified;
+       if (node.isResource()) {
+           lastModified = node.getLastModified();
+       } else {
+           lastModified = 0;
+       }
+
+       return lastModified;
+   }
+
+    /**
+     * Delete data of node resource
+     */
+    public boolean delete() throws Exception {
+        log.warn("TODO: Check if this node is referenced by other nodes!");
+        getNode(nodeVersionChecker).delete();
+        return true;
+    }
+
+    /**
+     * @see org.wyona.yanel.core.api.attributes.VersionableV2#getRevisions()
+     */
+    public RevisionInformation[] getRevisions() throws Exception {
+        Revision[] revisions = getNode(nodeVersionChecker).getRevisions();
+
+        if (revisions != null) {
+            RevisionInformation[] revisionInfos = new RevisionInformation[revisions.length];
+
+            for (int i = 0; i < revisions.length; i++) {
+                revisionInfos[i] = new RevisionInformation(revisions[i]);
+            }
+            if (revisions.length > 0) {
+                log.warn("Node \"" + getPath() + "\" does not seem to have any revisions! The repository \"" + getRealm().getRepository() + "\"  might not support revisions!");
+            }
+            return revisionInfos;
+        }
+        log.warn("Node '" + getNode(nodeVersionChecker).getPath() + "' has no revisions!");
+        return null;
+    }
+
+    public void checkin(String comment) throws Exception {
+        Node node = getNode(nodeVersionChecker);
+        node.checkin(comment);
+        /*
+        if (node.isCheckedOut()) {
+            String checkoutUserID = node.getCheckoutUserID();
+            if (checkoutUserID.equals(userID)) {
+                node.checkin();
+            } else {
+                throw new Exception("Resource is checked out by another user: " + checkoutUserID);
+            }
+        } else {
+            throw new Exception("Resource is not checked out.");
+        }
+        */
+    }
+
+    public void checkout(String userID) throws Exception {
+        Node node = getNode(nodeVersionChecker);
+        node.checkout(userID);
+        /*
+        if (node.isCheckedOut()) {
+            String checkoutUserID = node.getCheckoutUserID();
+            if (checkoutUserID.equals(userID)) {
+                log.warn("Resource " + getPath() + " is already checked out by this user: " + checkoutUserID);
+            } else {
+                throw new Exception("Resource is already checked out by another user: " + checkoutUserID);
+            }
+        } else {
+            node.checkout(userID);
+        }
+        */
+    }
+
+    /**
+     * Cancel checkout or rather release the lock
+     */
+    public void cancelCheckout() throws Exception {
+        Node node = getNode(nodeVersionChecker);
+        log.warn("Release the lock of '" + node.getPath() + "'");
+        node.cancelCheckout();
+    }
+
+    public void restore(String revisionName) throws Exception {
+        getNode(nodeVersionChecker).restore(revisionName);
+    }
+
+    public Date getCheckoutDate() throws Exception {
+        log.warn("Get checkout date not implemented yet!");
+        // Node node = getNode();
+        // return node.getCheckoutDate();
+        return null;
+    }
+
+    public String getCheckoutUserID() throws Exception {
+        Node node = getNode(nodeVersionChecker);
+        return node.getCheckoutUserID();
+    }
+
+    public boolean isCheckedOut() throws Exception {
+        Node node = getNode(nodeVersionChecker);
+        return node.isCheckedOut();
+    }
+
+    public boolean exists() throws Exception {
+        return getRealm().getRepository().existsNode(getPath());
+    }
+
+    /**
+     *
+     */
+    public long getSize() throws Exception {
+        Node node = getNode(nodeVersionChecker);
+        long size;
+        if (node.isResource()) {
+            size = node.getSize();
+        } else {
+            size = 0;
+        }
+        return size;
+    }
+
+    /**
+     *
+     */
+    public Object getProperty(String name) {
+        log.warn("No implemented yet!");
+        return null;
+    }
+
+    /**
+     *
+     */
+    public String[] getPropertyNames() {
+        String[] props = {"data"};
+        return props;
+    }
+
+    /**
+     *
+     */
+    public void setProperty(String name, Object value) {
+        log.warn("No implemented yet!");
+    }
+
+       
+    
+    /**
+     *
+     */
+    public java.util.HashMap createRTIProperties(HttpServletRequest request) {
+        java.util.HashMap map = new java.util.HashMap();
+        String mimeType = request.getParameter("rp.mime-type");
+        if (mimeType == null) {
+            log.warn("No mime type has been set explicitely! Use content type of upload request: " + this.uploadMimeType);
+            mimeType = this.uploadMimeType;
+        }
+        map.put("mime-type", mimeType);
+        map.put("encoding", request.getParameter("rp.encoding"));
+        return map;
+    }
+    /**
+     *
+     */
+    public String getPropertyType(String name) {
+        return CreatableV2.TYPE_UPLOAD;
+    }
+
+    /**
+     * Get introspection document
+     */
+    public String getIntrospection() throws Exception {
+        String name = org.wyona.commons.io.PathUtil.getName(getPath());
+        StringBuffer buf = new StringBuffer();
+        buf.append("<?xml version=\"1.0\"?>");
+        buf.append("<introspection xmlns=\"http://www.wyona.org/neutron/2.0\">");
+
+        buf.append("<navigation>");
+        buf.append("  <sitetree href=\"./\" method=\"PROPFIND\"/>");
+        buf.append("</navigation>");
+
+        buf.append("<resource name=\"" + name + "\">");
+        buf.append("<edit mime-type=\"" + this.getMimeType(null) + "\">");
+        buf.append("<checkout url=\"?yanel.resource.usecase=checkout\" method=\"GET\"/>");
+        buf.append("<checkin  url=\"?yanel.resource.usecase=checkin\"  method=\"PUT\"/>");
+        buf.append("<release-lock url=\"?yanel.resource.usecase=release-lock\" method=\"GET\"/>");
+        buf.append("</edit>");
+
+        buf.append(getWorkflowIntrospection());
+
+        buf.append("</resource>");
+        buf.append("</introspection>");
+        return buf.toString();
+    }
+
+
+    /**
+     *
+     */
+    public String getMimeTypeBySuffix(String suffix) {
+        // TODO: use MimeTypeUtil
+        if (suffix.equals("html")) {
+            return "text/html";
+        } else if (suffix.equals("htm")) {
+            return "text/html";
+        } else if (suffix.equals("xhtml")) {
+            return "application/xhtml+xml";
+        } else if (suffix.equals("xml")) {
+            return "application/xml";
+        } else if (suffix.equals("xsd")) {
+            return "application/xml";
+            // TODO: Clarify ...
+            //return "application/xsd+xml";
+        } else if (suffix.equals("xsl")) {
+            return "application/xml";
+            // TODO: Clarify ...
+            //return "application/xslt+xml";
+        } else if (suffix.equals("css")) {
+            return "text/css";
+        } else if (suffix.equals("js")) {
+            return "application/x-javascript";
+        } else if (suffix.equals("png")) {
+            return "image/png";
+        } else if (suffix.equals("jpg")) {
+            return "image/jpeg";
+        } else if (suffix.equals("gif")) {
+            return "image/gif";
+        } else if (suffix.equals("pdf")) {
+            return "application/pdf";
+        } else if (suffix.equals("doc")) {
+            return "application/msword";
+        } else if (suffix.equals("odt")) {
+            return "application/vnd.oasis.opendocument.text";
+        } else if (suffix.equals("sxc")) {
+            return "application/vnd.sun.xml.calc";
+        } else if (suffix.equals("xpi")) {
+            return "application/x-xpinstall";
+        } else if (suffix.equals("zip")) {
+            return "application/zip";
+        } else if (suffix.equals("jar")) { // http://en.wikipedia.org/wiki/Jar_(file_format)
+            return "application/java-archive";
+        } else if (suffix.equals("war")) {
+            return "application/java-archive";
+        } else if (suffix.equals("flv")) {
+            return "video/x-flv";
+        } else if (suffix.equals("swf")) {
+            return "application/x-shockwave-flash";
+        } else if (suffix.equals("txt")) {
+            return "text/plain";
+        } else if (suffix.equals("mov")) {
+            return "video/quicktime";
+        } else if (suffix.equals("mp3")) {
+            return "audio/mpeg";
+        } else if (suffix.equals("svg")) {
+            return "image/svg+xml";
+        } else if (suffix.equals("ico")) {
+            return "image/x-icon";
+        } else {
+            log.warn("Could not determine mime-type from suffix '" + suffix + "' (path: " + getPath() + "). Return application/octet-stream!");
+            return "application/octet-stream";
+        }
+    }
+
+    /**
+     *
+     */
+    public String getWorkflowIntrospection() throws WorkflowException {
+        return WorkflowHelper.getWorkflowIntrospection(this);
+    }
+
+    /**
+     *
+     */
+    public void removeWorkflowVariable(String name) throws WorkflowException {
+        WorkflowHelper.removeWorkflowVariable(this, name);
+    }
+
+    /**
+     *
+     */
+    public void setWorkflowVariable(String name, String value) throws WorkflowException {
+        WorkflowHelper.setWorkflowVariable(this, name, value);
+    }
+
+    /**
+     *
+     */
+    public String getWorkflowVariable(String name) throws WorkflowException {
+        return WorkflowHelper.getWorkflowVariable(this, name);
+    }
+
+    /**
+     *
+     */
+    public Date getWorkflowDate(String revision) throws WorkflowException {
+        return WorkflowHelper.getWorkflowDate(this, revision);
+    }
+
+    /**
+     *
+     */
+    public void setWorkflowState(String state, String revision) throws WorkflowException {
+        WorkflowHelper.setWorkflowState(this, state, revision);
+    }
+
+    /**
+     *
+     */
+    public String getWorkflowState(String revision) throws WorkflowException {
+        return WorkflowHelper.getWorkflowState(this, revision);
+    }
+
+    /**
+     *
+     */
+    public View getLiveView(String viewid) throws Exception {
+        return WorkflowHelper.getLiveView(this, viewid);
+    }
+
+    /**
+     *
+     */
+    public boolean isLive() throws WorkflowException {
+        return WorkflowHelper.isLive(this);
+    }
+
+    /**
+     *
+     */
+    public void doTransition(String transitionID, String revision) throws WorkflowException {
+        WorkflowHelper.doTransition(this, transitionID, revision);
+    }
+
+    protected String fixAssetName(String name) {
+        // some browsers may send the whole path:
+        int i = name.lastIndexOf("\\");
+        if (i > -1) {
+            name = name.substring(i + 1);
+        }
+        i = name.lastIndexOf("/");
+        if (i > -1) {
+            name = name.substring(i + 1);
+        }
+        name = name.replaceAll(" |&|%|\\?", "_");
+        return name;
+    }
+
+    /**
+     *  This method is a left over from the NodeResource class. Not sure if still need this
+     *  in the present context.
+     */
+    private Node getNode() throws org.wyona.yanel.core.ResourceNotFoundException {
+        try {
+            String path = getPath();
+            if (getResourceConfigProperty("src") != null) {
+                path = getResourceConfigProperty("src");
+            }
+            try {
+                return getRealm().getRepository().getNode(path);
+            } catch (org.wyona.yarep.core.NoSuchNodeException e) {
+                throw new org.wyona.yanel.core.ResourceNotFoundException(path);
+                //throw new org.wyona.yanel.core.ResourceNotFoundException(path, getRealm(), getRealm().getRepository());
+            }
+        } catch (Exception e) {
+            throw new org.wyona.yanel.core.ResourceNotFoundException(e);
+        }
+    }
+    
+    /**
+    *  The purpose of this method is to get the Node based on the xslt version.
+    *  xslt version could be requested via the query string on retrieved from the config
+    *  template.
+    *  @param sessionVerTag   This is formatted session version tag realm:templatename:xslt-version
+    */
+   private Node getNode(String sessionVerTag) throws org.wyona.yanel.core.ResourceNotFoundException {
+       try {
+           	String path = getPath();
+           	if (getResourceConfigProperty("src") != null) {
+               path = getResourceConfigProperty("src");
+               javax.servlet.http.HttpServletRequest request = getEnvironment().getRequest();
+               // get query string version number
+               String ver = getRequest().getParameter("xslt-version");
+       
+               javax.servlet.http.HttpSession session = getRequest().getSession();
+               if (ver !=null && !ver.equals("")) {
+            	 // if version number received from query string set it in session
+                 session.setAttribute(sessionVerTag, (String)ver);
+               } else {
+            	   // else check if there is a session variable set for version
+            	   String presentSessVer = (String)session.getAttribute(sessionVerTag);
+            	   if (presentSessVer != null && !presentSessVer.equals("")) {
+            		   // if already version set in session then use that value
+            		   ver = presentSessVer;            		   
+            	   } else {
+            		   // else get it from the config file
+	            	   String defaultVer = getResourceConfigProperty("default-layout-version");
+	            	   if(defaultVer !=null) {
+	            		   session.setAttribute(sessionVerTag, defaultVer);
+	            		   ver = defaultVer;
+	            	   }	            	   
+            	   }
+               }
+               if(path.indexOf("xslt-version")>-1) {                 
+                 path = path.replaceFirst("[{][$]xslt[-]version[}]", ver);
+               }                
+           	}
+	            try {
+	                return getRealm().getRepository().getNode(path);
+	            } catch (org.wyona.yarep.core.NoSuchNodeException e) {
+	                throw new org.wyona.yanel.core.ResourceNotFoundException(path);
+	                //throw new org.wyona.yanel.core.ResourceNotFoundException(path, getRealm(), getRealm().getRepository());
+	            }
+       } catch (Exception e) {
+           throw new org.wyona.yanel.core.ResourceNotFoundException(e);
+       }
+   }
+       
+}

Added: public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/src/test/htmlunit/org/wyona/yanel/impl/resources/layoutselector/LayoutSelectorWebTest.java
===================================================================
--- public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/src/test/htmlunit/org/wyona/yanel/impl/resources/layoutselector/LayoutSelectorWebTest.java	                        (rev 0)
+++ public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/src/test/htmlunit/org/wyona/yanel/impl/resources/layoutselector/LayoutSelectorWebTest.java	2009-06-11 09:40:54 UTC (rev 43203)
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2006 Wyona
+ *
+ *  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.wyona.org/licenses/APACHE-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 foo.bar.yanel.impl.resources;
+
+import org.wyona.yanel.htmlunit.AbstractHtmlUnitTest;
+
+/**
+ * Please add a test to ensure your functionality.
+ * how to write tests see: http://yanel.wyona.org/en/documentation/testing-framework.html
+ */
+public class LayoutSelectorWebTest extends AbstractHtmlUnitTest {
+
+    protected void setUp() throws Exception {
+        this.testName = "!NOT IMPLEMENTED YET! PLEASE IMPLEMENT! LayoutSelector Web Test";
+        super.setUp();
+    }
+
+    /**
+     * Loads a page and verifies its title.
+     */
+    public void testXMLResource() throws Exception {
+        //TODO: implement your test.
+    }
+
+}

Added: public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/src/test/junit/org/wyona/yanel/impl/resources/layoutselector/LayoutSelectorTest.java
===================================================================
--- public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/src/test/junit/org/wyona/yanel/impl/resources/layoutselector/LayoutSelectorTest.java	                        (rev 0)
+++ public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/src/test/junit/org/wyona/yanel/impl/resources/layoutselector/LayoutSelectorTest.java	2009-06-11 09:40:54 UTC (rev 43203)
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2006 Wyona
+ *
+ *  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.wyona.org/licenses/APACHE-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 foo.bar.yanel.impl.resources;
+
+import org.wyona.yanel.junit.AbstractYanelTest;
+import org.wyona.yanel.impl.resources.layoutselector.LayoutSelector;
+
+/**
+ * Test for the XML Resource.
+ */
+public class LayoutSelectorTest extends AbstractYanelTest {
+
+    protected LayoutSelector resource;
+
+    public void setUp() throws Exception {
+        super.setUp();
+        this.testName = "!NOT IMPLEMENTED YET! PLEASE IMPLEMENT! LayoutSelector JUnit Test";
+    }
+
+    public void testWriteRead() throws Exception {
+        //TODO: implement your test.
+    }
+
+}

Added: public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/yanel-htdocs/doc/index.html
===================================================================
--- public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/yanel-htdocs/doc/index.html	                        (rev 0)
+++ public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/yanel-htdocs/doc/index.html	2009-06-11 09:40:54 UTC (rev 43203)
@@ -0,0 +1,58 @@
+<?xml version="1.0"?>
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <title>layoutselector</title>
+
+<!-- TODO: Reference this style globally -->
+    <style>
+h2 {
+  font-size: 130%;
+  color:     #ffffff;
+  background-color: #525D76;
+}
+pre {
+  background-color: efefef;
+}
+td {
+  background-color: eeeeee;
+  color:            000000;
+}
+
+/* first row */
+table tr:first-child td {
+  background-color: cccccc;
+  color:            000000;
+}
+
+/* or th as first row */
+table th {
+  background-color: cccccc;
+  color:            000000;
+}
+    </style>
+  </head>
+  <body>
+    <h1>layoutselector</h1>
+
+    <h2>Overview</h2>
+    <dl>
+      <dt>Name:</dt>
+      <dd>layoutselector</dd>
+      <dt>Namespace:</dt>
+      <dd>http://www.wyona.org/yanel/resource/1.0</dd>
+      <dt>Universal Name:</dt>
+      <dd>&lt;{http://www.wyona.org/yanel/resource/1.0}layoutselector/&gt;</dd>
+      <dt>Description:</dt>
+      <dd>layout selector</dd>
+      <dt>Java Class:</dt>
+      <dd>org.wyona.yanel.impl.resources.layoutselector.LayoutSelector</dd>
+    </dl>
+
+    <h2>Views</h2>
+    <p>TODO</p>
+
+    <h2>Examples</h2>
+    <p>TODO</p>
+  </body>
+</html>

Added: public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/yanel-htdocs/icons/16x16/rt-icon.png
===================================================================
(Binary files differ)


Property changes on: public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/yanel-htdocs/icons/16x16/rt-icon.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/yanel-htdocs/icons/22x22/rt-icon.png
===================================================================
(Binary files differ)


Property changes on: public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/yanel-htdocs/icons/22x22/rt-icon.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/yanel-htdocs/icons/32x32/rt-icon.png
===================================================================
(Binary files differ)


Property changes on: public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/yanel-htdocs/icons/32x32/rt-icon.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/yanel-htdocs/icons/scalable/rt-icon.svg
===================================================================
--- public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/yanel-htdocs/icons/scalable/rt-icon.svg	                        (rev 0)
+++ public/yanel/trunk/src/realms/from-scratch-realm-template/res-types/layoutselector/yanel-htdocs/icons/scalable/rt-icon.svg	2009-06-11 09:40:54 UTC (rev 43203)
@@ -0,0 +1,526 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://web.resource.org/cc/"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   inkscape:export-ydpi="240.00000"
+   inkscape:export-xdpi="240.00000"
+   inkscape:export-filename="/home/jimmac/gfx/novell/pdes/trunk/docs/BIGmime-text.png"
+   sodipodi:docname="yanel-resource-type.svg"
+   sodipodi:docbase="/home/simon/office/wyona/yanel/img/icons/scalable"
+   inkscape:version="0.43"
+   sodipodi:version="0.32"
+   id="svg249"
+   height="48.000000px"
+   width="48.000000px">
+  <defs
+     id="defs3">
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5060"
+       id="radialGradient6719"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
+       cx="605.71429"
+       cy="486.64789"
+       fx="605.71429"
+       fy="486.64789"
+       r="117.14286" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient5060">
+      <stop
+         style="stop-color:black;stop-opacity:1;"
+         offset="0"
+         id="stop5062" />
+      <stop
+         style="stop-color:black;stop-opacity:0;"
+         offset="1"
+         id="stop5064" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5060"
+       id="radialGradient6717"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
+       cx="605.71429"
+       cy="486.64789"
+       fx="605.71429"
+       fy="486.64789"
+       r="117.14286" />
+    <linearGradient
+       id="linearGradient5048">
+      <stop
+         style="stop-color:black;stop-opacity:0;"
+         offset="0"
+         id="stop5050" />
+      <stop
+         id="stop5056"
+         offset="0.5"
+         style="stop-color:black;stop-opacity:1;" />
+      <stop
+         style="stop-color:black;stop-opacity:0;"
+         offset="1"
+         id="stop5052" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5048"
+       id="linearGradient6715"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
+       x1="302.85715"
+       y1="366.64789"
+       x2="302.85715"
+       y2="609.50507" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3082">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop3084" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop3086" />
+    </linearGradient>
+    <linearGradient
+       id="aigrd1"
+       gradientUnits="userSpaceOnUse"
+       x1="99.7773"
+       y1="15.4238"
+       x2="153.0005"
+       y2="248.6311">
+      <stop
+         offset="0"
+         style="stop-color:#464646;stop-opacity:1"
+         id="stop53300" />
+      <stop
+         offset="1"
+         style="stop-color:#cdcdcd;stop-opacity:1"
+         id="stop53302" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient4542">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop4544" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop4546" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient15662">
+      <stop
+         id="stop15664"
+         offset="0.0000000"
+         style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+      <stop
+         id="stop15666"
+         offset="1.0000000"
+         style="stop-color:#f8f8f8;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <radialGradient
+       id="aigrd3"
+       cx="20.8921"
+       cy="64.5679"
+       r="5.257"
+       fx="20.8921"
+       fy="64.5679"
+       gradientUnits="userSpaceOnUse">
+      <stop
+         offset="0"
+         style="stop-color:#F0F0F0"
+         id="stop15573" />
+      <stop
+         offset="1.0000000"
+         style="stop-color:#9a9a9a;stop-opacity:1.0000000;"
+         id="stop15575" />
+    </radialGradient>
+    <radialGradient
+       id="aigrd2"
+       cx="20.8921"
+       cy="114.5684"
+       r="5.256"
+       fx="20.8921"
+       fy="114.5684"
+       gradientUnits="userSpaceOnUse">
+      <stop
+         offset="0"
+         style="stop-color:#F0F0F0"
+         id="stop15566" />
+      <stop
+         offset="1.0000000"
+         style="stop-color:#9a9a9a;stop-opacity:1.0000000;"
+         id="stop15568" />
+    </radialGradient>
+    <linearGradient
+       id="linearGradient269">
+      <stop
+         id="stop270"
+         offset="0.0000000"
+         style="stop-color:#a3a3a3;stop-opacity:1.0000000;" />
+      <stop
+         id="stop271"
+         offset="1.0000000"
+         style="stop-color:#4c4c4c;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient259">
+      <stop
+         id="stop260"
+         offset="0.0000000"
+         style="stop-color:#fafafa;stop-opacity:1.0000000;" />
+      <stop
+         id="stop261"
+         offset="1.0000000"
+         style="stop-color:#bbbbbb;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient269"
+       id="radialGradient15656"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.968273,0.000000,0.000000,1.032767,3.353553,0.646447)"
+       cx="8.8244190"
+       cy="3.7561285"
+       fx="8.8244190"
+       fy="3.7561285"
+       r="37.751713" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient259"
+       id="radialGradient15658"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(0.960493,1.041132)"
+       cx="33.966679"
+       cy="35.736916"
+       fx="33.966679"
+       fy="35.736916"
+       r="86.708450" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient15662"
+       id="radialGradient15668"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.968273,0.000000,0.000000,1.032767,3.353553,0.646447)"
+       cx="8.1435566"
+       cy="7.2678967"
+       fx="8.1435566"
+       fy="7.2678967"
+       r="38.158695" />
+    <radialGradient
+       r="5.256"
+       fy="114.5684"
+       fx="20.8921"
+       cy="114.5684"
+       cx="20.8921"
+       gradientTransform="matrix(0.229703,0.000000,0.000000,0.229703,4.613529,3.979808)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient2283"
+       xlink:href="#aigrd2"
+       inkscape:collect="always" />
+    <radialGradient
+       r="5.257"
+       fy="64.5679"
+       fx="20.8921"
+       cy="64.5679"
+       cx="20.8921"
+       gradientTransform="matrix(0.229703,0.000000,0.000000,0.229703,4.613529,3.979808)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient2285"
+       xlink:href="#aigrd3"
+       inkscape:collect="always" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4542"
+       id="radialGradient4548"
+       cx="24.306795"
+       cy="42.07798"
+       fx="24.306795"
+       fy="42.07798"
+       r="15.821514"
+       gradientTransform="matrix(1.000000,0.000000,0.000000,0.284916,0.000000,30.08928)"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3082"
+       id="linearGradient5876"
+       gradientUnits="userSpaceOnUse"
+       x1="44.592766"
+       y1="9.9124937"
+       x2="65.862885"
+       y2="43.31715"
+       gradientTransform="matrix(0.703833,0,0,0.703833,59.94701,5.314359)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#aigrd1"
+       id="linearGradient5881"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.141249,0,0,0.141249,77.77723,7.536622)"
+       x1="99.7773"
+       y1="15.4238"
+       x2="153.0005"
+       y2="248.6311" />
+  </defs>
+  <sodipodi:namedview
+     inkscape:window-y="0"
+     inkscape:window-x="0"
+     inkscape:window-height="721"
+     inkscape:window-width="1024"
+     inkscape:document-units="px"
+     inkscape:grid-bbox="true"
+     showgrid="false"
+     inkscape:current-layer="layer5"
+     inkscape:cy="24.736793"
+     inkscape:cx="47.048879"
+     inkscape:zoom="38.759927"
+     inkscape:pageshadow="2"
+     inkscape:pageopacity="0.0"
+     borderopacity="0.25490196"
+     bordercolor="#666666"
+     pagecolor="#ffffff"
+     id="base"
+     inkscape:showpageshadow="false" />
+  <metadata
+     id="metadata4">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title>Generic Script</dc:title>
+        <dc:subject>
+          <rdf:Bag>
+            <rdf:li>text</rdf:li>
+            <rdf:li>plaintext</rdf:li>
+            <rdf:li>regular</rdf:li>
+            <rdf:li>script</rdf:li>
+            <rdf:li>shell</rdf:li>
+            <rdf:li>bash</rdf:li>
+            <rdf:li>python</rdf:li>
+            <rdf:li>perl</rdf:li>
+            <rdf:li>php</rdf:li>
+            <rdf:li>ruby</rdf:li>
+          </rdf:Bag>
+        </dc:subject>
+        <cc:license
+           rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
+        <dc:creator>
+          <cc:Agent>
+            <dc:title>Jakub Steiner</dc:title>
+          </cc:Agent>
+        </dc:creator>
+        <dc:source>http://jimmac.musichall.cz</dc:source>
+      </cc:Work>
+      <cc:License
+         rdf:about="http://creativecommons.org/licenses/by/2.0/">
+        <cc:permits
+           rdf:resource="http://web.resource.org/cc/Reproduction" />
+        <cc:permits
+           rdf:resource="http://web.resource.org/cc/Distribution" />
+        <cc:requires
+           rdf:resource="http://web.resource.org/cc/Notice" />
+        <cc:requires
+           rdf:resource="http://web.resource.org/cc/Attribution" />
+        <cc:permits
+           rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
+        <cc:requires
+           rdf:resource="http://web.resource.org/cc/ShareAlike" />
+      </cc:License>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:groupmode="layer"
+     id="layer6"
+     inkscape:label="Shadow">
+    <g
+       style="display:inline"
+       transform="matrix(2.105461e-2,0,0,2.086758e-2,42.85172,41.1536)"
+       id="g6707"
+       inkscape:export-filename="/home/simon/office/wyona/yanel/resource-type-icon-test.png"
+       inkscape:export-xdpi="1010.53"
+       inkscape:export-ydpi="1010.53">
+      <rect
+         style="opacity:0.40206185;color:black;fill:url(#linearGradient6715);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         id="rect6709"
+         width="1339.6335"
+         height="478.35718"
+         x="-1559.2523"
+         y="-150.69685" />
+      <path
+         style="opacity:0.40206185;color:black;fill:url(#radialGradient6717);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         d="M -219.61876,-150.68038 C -219.61876,-150.68038 -219.61876,327.65041 -219.61876,327.65041 C -76.744594,328.55086 125.78146,220.48075 125.78138,88.454235 C 125.78138,-43.572302 -33.655436,-150.68036 -219.61876,-150.68038 z "
+         id="path6711"
+         sodipodi:nodetypes="cccc" />
+      <path
+         sodipodi:nodetypes="cccc"
+         id="path6713"
+         d="M -1559.2523,-150.68038 C -1559.2523,-150.68038 -1559.2523,327.65041 -1559.2523,327.65041 C -1702.1265,328.55086 -1904.6525,220.48075 -1904.6525,88.454235 C -1904.6525,-43.572302 -1745.2157,-150.68036 -1559.2523,-150.68038 z "
+         style="opacity:0.40206185;color:black;fill:url(#radialGradient6719);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+    </g>
+  </g>
+  <g
+     style="display:inline"
+     inkscape:groupmode="layer"
+     inkscape:label="Base"
+     id="layer1">
+    <rect
+       style="color:#000000;fill:url(#radialGradient15658);fill-opacity:1.0000000;fill-rule:nonzero;stroke:url(#radialGradient15656);stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:block;overflow:visible"
+       id="rect15391"
+       width="34.875000"
+       height="40.920494"
+       x="6.6035528"
+       y="3.6464462"
+       ry="1.1490486"
+       inkscape:export-filename="/home/simon/office/wyona/yanel/resource-type-icon-test.png"
+       inkscape:export-xdpi="1010.53"
+       inkscape:export-ydpi="1010.53" />
+    <rect
+       style="color:#000000;fill:none;fill-opacity:1.0000000;fill-rule:nonzero;stroke:url(#radialGradient15668);stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:block;overflow:visible"
+       id="rect15660"
+       width="32.775887"
+       height="38.946384"
+       x="7.6660538"
+       y="4.5839462"
+       ry="0.14904857"
+       rx="0.14904857"
+       inkscape:export-filename="/home/simon/office/wyona/yanel/resource-type-icon-test.png"
+       inkscape:export-xdpi="1010.53"
+       inkscape:export-ydpi="1010.53" />
+    <g
+       transform="translate(0.646447,-3.798933e-2)"
+       id="g2270"
+       inkscape:export-filename="/home/simon/office/wyona/yanel/resource-type-icon-test.png"
+       inkscape:export-xdpi="1010.53"
+       inkscape:export-ydpi="1010.53">
+      <g
+         id="g1440"
+         style="fill:#ffffff;fill-opacity:1.0000000;fill-rule:nonzero;stroke:#000000;stroke-miterlimit:4.0000000"
+         transform="matrix(0.229703,0.000000,0.000000,0.229703,4.967081,4.244972)">
+        <radialGradient
+           id="radialGradient1442"
+           cx="20.892099"
+           cy="114.56840"
+           r="5.2560000"
+           fx="20.892099"
+           fy="114.56840"
+           gradientUnits="userSpaceOnUse">
+          <stop
+             offset="0"
+             style="stop-color:#F0F0F0"
+             id="stop1444" />
+          <stop
+             offset="1"
+             style="stop-color:#474747"
+             id="stop1446" />
+        </radialGradient>
+        <path
+           style="stroke:none"
+           d="M 23.428000,113.07000 C 23.428000,115.04300 21.828000,116.64200 19.855000,116.64200 C 17.881000,116.64200 16.282000,115.04200 16.282000,113.07000 C 16.282000,111.09600 17.882000,109.49700 19.855000,109.49700 C 21.828000,109.49700 23.428000,111.09700 23.428000,113.07000 z "
+           id="path1448" />
+        <radialGradient
+           id="radialGradient1450"
+           cx="20.892099"
+           cy="64.567902"
+           r="5.2570000"
+           fx="20.892099"
+           fy="64.567902"
+           gradientUnits="userSpaceOnUse">
+          <stop
+             offset="0"
+             style="stop-color:#F0F0F0"
+             id="stop1452" />
+          <stop
+             offset="1"
+             style="stop-color:#474747"
+             id="stop1454" />
+        </radialGradient>
+        <path
+           style="stroke:none"
+           d="M 23.428000,63.070000 C 23.428000,65.043000 21.828000,66.643000 19.855000,66.643000 C 17.881000,66.643000 16.282000,65.043000 16.282000,63.070000 C 16.282000,61.096000 17.882000,59.497000 19.855000,59.497000 C 21.828000,59.497000 23.428000,61.097000 23.428000,63.070000 z "
+           id="path1456" />
+      </g>
+      <path
+         style="fill:url(#radialGradient2283);fill-rule:nonzero;stroke:none;stroke-miterlimit:4.0000000"
+         d="M 9.9950109,29.952326 C 9.9950109,30.405530 9.6274861,30.772825 9.1742821,30.772825 C 8.7208483,30.772825 8.3535532,30.405301 8.3535532,29.952326 C 8.3535532,29.498892 8.7210780,29.131597 9.1742821,29.131597 C 9.6274861,29.131597 9.9950109,29.499122 9.9950109,29.952326 z "
+         id="path15570" />
+      <path
+         style="fill:url(#radialGradient2285);fill-rule:nonzero;stroke:none;stroke-miterlimit:4.0000000"
+         d="M 9.9950109,18.467176 C 9.9950109,18.920380 9.6274861,19.287905 9.1742821,19.287905 C 8.7208483,19.287905 8.3535532,18.920380 8.3535532,18.467176 C 8.3535532,18.013742 8.7210780,17.646447 9.1742821,17.646447 C 9.6274861,17.646447 9.9950109,18.013972 9.9950109,18.467176 z "
+         id="path15577" />
+    </g>
+    <path
+       style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.98855311;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:0.017543854"
+       d="M 11.505723,5.4942766 L 11.505723,43.400869"
+       id="path15672"
+       sodipodi:nodetypes="cc"
+       inkscape:export-filename="/home/simon/office/wyona/yanel/resource-type-icon-test.png"
+       inkscape:export-xdpi="1010.53"
+       inkscape:export-ydpi="1010.53" />
+    <path
+       style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:0.20467831"
+       d="M 12.500000,5.0205154 L 12.500000,43.038228"
+       id="path15674"
+       sodipodi:nodetypes="cc"
+       inkscape:export-filename="/home/simon/office/wyona/yanel/resource-type-icon-test.png"
+       inkscape:export-xdpi="1010.53"
+       inkscape:export-ydpi="1010.53" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer5"
+     inkscape:label="Text"
+     style="display:inline">
+    <path
+       style="opacity:0.5;fill:#757575;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-miterlimit:4"
+       d="M 26.895946,38.363178 C 29.422384,31.930312 35.482086,27.935015 41.977118,27.725159 L 41.934871,24.080092 L 41.016584,21.974032 C 40.428479,22.013648 39.843745,22.075181 39.263207,22.160152 L 39.119403,24.7109 C 38.004047,24.902872 36.909719,25.188827 35.848036,25.563033 L 34.481543,23.404986 C 33.814696,23.659121 33.160544,23.944343 32.520821,24.259898 L 33.172061,26.729457 C 32.175292,27.25296 31.221266,27.860294 30.32146,28.546634 L 28.35437,26.916101 C 27.800352,27.361576 27.265748,27.833837 26.753454,28.332812 L 28.136346,30.48078 C 27.354598,31.281731 26.634932,32.154475 25.987988,33.093856 L 23.614092,32.150998 C 23.227799,32.743763 22.867518,33.359912 22.533981,33.996382 L 24.513063,35.612231 C 24.266219,36.113931 24.037005,36.629262 23.828996,37.158905 C 23.620903,37.688756 23.438165,38.222339 23.277622,38.757932 L 20.728118,38.594506 C 20.539223,39.288263 20.383997,39.984707 20.26387,40.682005 L 22.644649,41.606733 C 22.479426,42.735306 22.412837,43.8645!
 4 22.440592,44.983417 L 23.960937,45.101675 L 25.732051,44.329543 C 25.751284,42.341688 26.125779,40.323583 26.895657,38.363302 L 26.895946,38.363178 z "
+       id="path53363"
+       inkscape:export-filename="/home/simon/office/wyona/yanel/resource-type-icon-test.png"
+       inkscape:export-xdpi="1010.53"
+       inkscape:export-ydpi="1010.53"
+       sodipodi:nodetypes="csccccccccccccccccsccccccccc" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer7"
+     inkscape:label="2">
+    <g
+       transform="matrix(1.789975e-2,0,0,1.930874e-2,-46.951,-203.7979)"
+       style="fill:#4682b4;fill-opacity:1;visibility:visible"
+       id="g4046"
+       inkscape:export-filename="/home/simon/office/wyona/yanel/resource-type-icon-test.png"
+       inkscape:export-xdpi="1010.53"
+       inkscape:export-ydpi="1010.53">
+      <desc
+         id="desc4048">Drawing</desc>
+      <g
+         style="fill:#4682b4;fill-opacity:1"
+         id="g4050">
+        <g
+           style="fill:#4682b4;fill-opacity:1;stroke:none"
+           id="g4052">
+          <path
+             d="M 3803,11713 L 3805,11720 L 3808,11727 L 3811,11734 L 3814,11741 L 3816,11748 L 3818,11755 L 3818,11759 L 3819,11762 L 3819,11766 L 3819,11769 L 3819,11777 L 3818,11781 L 3817,11784 L 3817,11787 L 3816,11790 L 3814,11793 L 3813,11796 L 3811,11799 L 3809,11801 L 3807,11803 L 3805,11805 L 3803,11807 L 3800,11809 L 3797,11811 L 3794,11812 L 3788,11814 L 3781,11817 L 3774,11818 L 3767,11820 L 3760,11821 L 3753,11821 L 3745,11822 L 3738,11822 L 3553,11822 L 3553,12076 L 3764,12076 L 3852,12074 L 3870,12073 L 3887,12072 L 3904,12070 L 3919,12068 L 3926,12067 L 3933,12066 L 3947,12063 L 3960,12060 L 3973,12056 L 3985,12051 L 3998,12046 L 4012,12039 L 4025,12032 L 4043,12021 L 4060,12010 L 4075,11998 L 4090,11985 L 4103,11972 L 4116,11958 L 4127,11943 L 4137,11928 L 4156,11897 L 4175,11865 L 4193,11832 L 4210,11798 L 4635,10865 L 4196,10865 L 4094,11169 L 4070,11252 L 4065,11268 L 4061,11285 L 4053,11316 L 4046,11348 L 4042,11364 L 4039,11381 L 4025,11462 L 4007,113!
 64 L 3991,11286 L 3970,11207 L 3937,11104 L 3857,10865 L 3421,10865 L 3803,11713 z "
+             style="fill:#4682b4;fill-opacity:1"
+             id="path4054" />
+        </g>
+        <g
+           style="fill:#4682b4;fill-opacity:1"
+           id="g4056" />
+      </g>
+    </g>
+  </g>
+</svg>



More information about the Yanel-commits mailing list