[Yanel-commits] rev 30769 - in
public/yanel/contributions/resources: . gallery gallery/src
gallery/src/build gallery/src/java gallery/src/java/org
gallery/src/java/org/wyona gallery/src/java/org/wyona/yanel
gallery/src/java/org/wyona/yanel/impl
gallery/src/java/org/wyona/yanel/impl/resources
gallery/src/java/org/wyona/yanel/impl/resources/gallery
gallery/yanel-htdocs gallery/yanel-htdocs/doc
gallery/yanel-htdocs/icons gallery/yanel-htdocs/icons/16x16
gallery/yanel-htdocs/icons/22x22 gallery/yanel-htdocs/icons/32x32
gallery/yanel-htdocs/icons/scalable
michi at wyona.com
michi at wyona.com
Fri Jan 25 11:37:36 CET 2008
Author: michi
Date: 2008-01-25 11:37:35 +0100 (Fri, 25 Jan 2008)
New Revision: 30769
Added:
public/yanel/contributions/resources/gallery/
public/yanel/contributions/resources/gallery/build.xml
public/yanel/contributions/resources/gallery/resource.xml
public/yanel/contributions/resources/gallery/src/
public/yanel/contributions/resources/gallery/src/build/
public/yanel/contributions/resources/gallery/src/build/build.properties
public/yanel/contributions/resources/gallery/src/build/dependencies.xml
public/yanel/contributions/resources/gallery/src/build/pom.xml
public/yanel/contributions/resources/gallery/src/java/
public/yanel/contributions/resources/gallery/src/java/org/
public/yanel/contributions/resources/gallery/src/java/org/wyona/
public/yanel/contributions/resources/gallery/src/java/org/wyona/yanel/
public/yanel/contributions/resources/gallery/src/java/org/wyona/yanel/impl/
public/yanel/contributions/resources/gallery/src/java/org/wyona/yanel/impl/resources/
public/yanel/contributions/resources/gallery/src/java/org/wyona/yanel/impl/resources/gallery/
public/yanel/contributions/resources/gallery/src/java/org/wyona/yanel/impl/resources/gallery/Gallery.java
public/yanel/contributions/resources/gallery/src/java/org/wyona/yanel/impl/resources/gallery/GalleryItem.java
public/yanel/contributions/resources/gallery/src/java/org/wyona/yanel/impl/resources/gallery/GalleryItemContent.java
public/yanel/contributions/resources/gallery/src/java/org/wyona/yanel/impl/resources/gallery/GalleryResource.java
public/yanel/contributions/resources/gallery/src/java/org/wyona/yanel/impl/resources/gallery/GenericItem.java
public/yanel/contributions/resources/gallery/src/java/org/wyona/yanel/impl/resources/gallery/GenericItemBase.java
public/yanel/contributions/resources/gallery/src/java/org/wyona/yanel/impl/resources/gallery/HasProperties.java
public/yanel/contributions/resources/gallery/src/java/org/wyona/yanel/impl/resources/gallery/ImageGalleryItem.java
public/yanel/contributions/resources/gallery/src/java/org/wyona/yanel/impl/resources/gallery/LinkedImageGalleryItem.java
public/yanel/contributions/resources/gallery/src/java/org/wyona/yanel/impl/resources/gallery/SimpleGallery.java
public/yanel/contributions/resources/gallery/src/test/
public/yanel/contributions/resources/gallery/yanel-htdocs/
public/yanel/contributions/resources/gallery/yanel-htdocs/doc/
public/yanel/contributions/resources/gallery/yanel-htdocs/doc/index.html
public/yanel/contributions/resources/gallery/yanel-htdocs/icons/
public/yanel/contributions/resources/gallery/yanel-htdocs/icons/16x16/
public/yanel/contributions/resources/gallery/yanel-htdocs/icons/16x16/rt-icon.png
public/yanel/contributions/resources/gallery/yanel-htdocs/icons/22x22/
public/yanel/contributions/resources/gallery/yanel-htdocs/icons/22x22/rt-icon.png
public/yanel/contributions/resources/gallery/yanel-htdocs/icons/32x32/
public/yanel/contributions/resources/gallery/yanel-htdocs/icons/32x32/rt-icon.png
public/yanel/contributions/resources/gallery/yanel-htdocs/icons/scalable/
public/yanel/contributions/resources/gallery/yanel-htdocs/icons/scalable/rt-icon.svg
Log:
gallery resource added
Added: public/yanel/contributions/resources/gallery/build.xml
===================================================================
--- public/yanel/contributions/resources/gallery/build.xml (rev 0)
+++ public/yanel/contributions/resources/gallery/build.xml 2008-01-25 10:37:35 UTC (rev 30769)
@@ -0,0 +1,69 @@
+<?xml version="1.0"?>
+
+<project name="yanel-resource" default="compile">
+
+ <import file="src/build/dependencies.xml"/>
+
+ <target name="init" description="Initialize build" depends="dependencies">
+ <echo>Initialize build</echo>
+
+ <dirname property="resource.home.dir" file="${ant.file}"/>
+ <echo>Resource Home Directory: ${resource.home.dir}</echo>
+
+ <property file="${resource.home.dir}/src/build/local.build.properties"/>
+ <property file="${resource.home.dir}/src/build/build.properties"/>
+
+ <path id="classpath">
+ <pathelement path="${maven2.cp}"/>
+ </path>
+ <property name="resource.build.dir" value="${resource.home.dir}/build"/>
+ <property name="resource.classes.dir" value="${resource.build.dir}/classes"/>
+ <property name="resource.lib.dir" value="${resource.build.dir}/lib"/>
+ <property name="resource.java.dir" value="${resource.home.dir}/src/java"/>
+ </target>
+
+ <target name="compile" description="Compile Java classes" depends="init">
+
+ <mkdir dir="${resource.classes.dir}"/>
+ <javac srcdir="${resource.java.dir}" destdir="${resource.classes.dir}"
+ classpathref="classpath"
+ debug="true"
+ />
+ <copy file="${resource.home.dir}/resource.xml" todir="${resource.classes.dir}/org/wyona/yanel/impl/resources/gallery"/>
+ <mkdir dir="${resource.lib.dir}"/>
+ <jar destfile="${resource.lib.dir}/yanel-resource-${resource.name}-${resource.version}.jar"
+ basedir="${resource.classes.dir}"
+ />
+ <antcall target="install-jar"/>
+ </target>
+
+ <target name="clean" depends="init">
+ <delete dir="${resource.build.dir}"/>
+ </target>
+
+ <target name="copy-dependencies" depends="init">
+ <copy todir="${build.dir}/webapps/${servlet.context.prefix}/WEB-INF/lib">
+ <fileset refid="maven2.resource.fileset"/>
+ <mapper type="flatten"/>
+ </copy>
+ </target>
+
+ <target name="install-jar" description="Place jar file for this resource into local maven repository" xmlns:artifact="antlib:org.apache.maven.artifact.ant">
+<!--
+ <target name="install-jar" description="Place jar file for this resource into local maven repository" depends="init, clean, compile" xmlns:artifact="antlib:org.apache.maven.artifact.ant">
+-->
+ <copy file="src/build/pom.xml" tofile="build/lib/pom.xml"/>
+
+ <replace file="build/lib/pom.xml" value="${resource.version}">
+ <replacetoken>@VERSION@</replacetoken>
+ </replace>
+ <replace file="build/lib/pom.xml" value="${resource.name}">
+ <replacetoken>@NAME@</replacetoken>
+ </replace>
+
+ <artifact:pom id="maven.project.core" file="build/lib/pom.xml"/>
+ <artifact:install file="build/lib/yanel-resource-${resource.name}-${resource.version}.jar">
+ <pom refid="maven.project.core"/>
+ </artifact:install>
+ </target>
+</project>
Added: public/yanel/contributions/resources/gallery/resource.xml
===================================================================
--- public/yanel/contributions/resources/gallery/resource.xml (rev 0)
+++ public/yanel/contributions/resources/gallery/resource.xml 2008-01-25 10:37:35 UTC (rev 30769)
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+
+<resource xmlns="http://www.wyona.org/yanel/1.0"
+ name="gallery"
+ namespace="http://www.wyona.org/yanel/resource/1.0"
+ class="org.wyona.yanel.impl.resources.gallery.GalleryResource"
+ >
+<description>
+A generic gallery for items
+</description>
+
+<rtd>
+ <!-- The collection where the galleries are -->
+ <property name="galleries-collection"/>
+</rtd>
+</resource>
Added: public/yanel/contributions/resources/gallery/src/build/build.properties
===================================================================
--- public/yanel/contributions/resources/gallery/src/build/build.properties (rev 0)
+++ public/yanel/contributions/resources/gallery/src/build/build.properties 2008-01-25 10:37:35 UTC (rev 30769)
@@ -0,0 +1,2 @@
+resource.name=gallery
+resource.version=0.0.1-dev-rXXX
Added: public/yanel/contributions/resources/gallery/src/build/dependencies.xml
===================================================================
--- public/yanel/contributions/resources/gallery/src/build/dependencies.xml (rev 0)
+++ public/yanel/contributions/resources/gallery/src/build/dependencies.xml 2008-01-25 10:37:35 UTC (rev 30769)
@@ -0,0 +1,25 @@
+<?xml version="1.0"?>
+
+<project name="wiki-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="wyona-org-yanel" artifactId="yanel-impl" version="${yanel.source.version}"/>
+
+ </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/contributions/resources/gallery/src/build/pom.xml
===================================================================
--- public/yanel/contributions/resources/gallery/src/build/pom.xml (rev 0)
+++ public/yanel/contributions/resources/gallery/src/build/pom.xml 2008-01-25 10:37:35 UTC (rev 30769)
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>wyona-org-yanel</groupId>
+ <artifactId>yanel-resource- at NAME@</artifactId>
+ <version>@VERSION@</version>
+</project>
Added: public/yanel/contributions/resources/gallery/src/java/org/wyona/yanel/impl/resources/gallery/Gallery.java
===================================================================
--- public/yanel/contributions/resources/gallery/src/java/org/wyona/yanel/impl/resources/gallery/Gallery.java (rev 0)
+++ public/yanel/contributions/resources/gallery/src/java/org/wyona/yanel/impl/resources/gallery/Gallery.java 2008-01-25 10:37:35 UTC (rev 30769)
@@ -0,0 +1,39 @@
+package org.wyona.yanel.impl.resources.gallery;
+
+import org.wyona.yarep.core.Node;
+import org.wyona.yarep.core.Repository;
+
+
+public interface Gallery extends GenericItem{
+ /**
+ * 0 to size()-1
+ * */
+ GalleryItem getItem(int index)throws IndexOutOfBoundsException;
+ int size();
+
+ /**
+ * Currently only Yarep repository is there. One may need adapters for other kinds of repositories.
+ * */
+ void setRepository(Repository repository);
+
+ /**
+ * @param path - Full path to the collection (context is the data collection of the realm).
+ * E.g. /galleries/mygallery/
+ * */
+ String getPath();
+
+ /**
+ * @return - created item
+ * */
+ Node createItem(GenericItem item);
+
+ /**
+ * @return - success or failure
+ * */
+ boolean removeItem(GenericItem item);
+
+ /**
+ * @return - success or failure
+ * */
+ boolean removeItem(String id);
+}
Added: public/yanel/contributions/resources/gallery/src/java/org/wyona/yanel/impl/resources/gallery/GalleryItem.java
===================================================================
--- public/yanel/contributions/resources/gallery/src/java/org/wyona/yanel/impl/resources/gallery/GalleryItem.java (rev 0)
+++ public/yanel/contributions/resources/gallery/src/java/org/wyona/yanel/impl/resources/gallery/GalleryItem.java 2008-01-25 10:37:35 UTC (rev 30769)
@@ -0,0 +1,5 @@
+package org.wyona.yanel.impl.resources.gallery;
+
+public interface GalleryItem extends GenericItem{
+ GalleryItemContent getContent();
+}
Added: public/yanel/contributions/resources/gallery/src/java/org/wyona/yanel/impl/resources/gallery/GalleryItemContent.java
===================================================================
--- public/yanel/contributions/resources/gallery/src/java/org/wyona/yanel/impl/resources/gallery/GalleryItemContent.java (rev 0)
+++ public/yanel/contributions/resources/gallery/src/java/org/wyona/yanel/impl/resources/gallery/GalleryItemContent.java 2008-01-25 10:37:35 UTC (rev 30769)
@@ -0,0 +1,10 @@
+package org.wyona.yanel.impl.resources.gallery;
+
+public interface GalleryItemContent {
+ boolean isLinkedContent();
+ String getContentType();
+ /**
+ * String representation of the content
+ * */
+ String toString();
+}
Added: public/yanel/contributions/resources/gallery/src/java/org/wyona/yanel/impl/resources/gallery/GalleryResource.java
===================================================================
--- public/yanel/contributions/resources/gallery/src/java/org/wyona/yanel/impl/resources/gallery/GalleryResource.java (rev 0)
+++ public/yanel/contributions/resources/gallery/src/java/org/wyona/yanel/impl/resources/gallery/GalleryResource.java 2008-01-25 10:37:35 UTC (rev 30769)
@@ -0,0 +1,169 @@
+/*
+ * Copyright 2007 Wyona
+ */
+
+package org.wyona.yanel.impl.resources.gallery;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.Reader;
+import java.io.Writer;
+
+import org.apache.log4j.Logger;
+import org.wyona.yanel.core.Constants;
+import org.wyona.yanel.core.Path;
+import org.wyona.yanel.core.Resource;
+import org.wyona.yanel.core.api.attributes.ModifiableV2;
+import org.wyona.yanel.core.attributes.viewable.View;
+import org.wyona.yanel.core.util.PathUtil;
+import org.wyona.yanel.impl.resources.BasicXMLResource;
+import org.wyona.yarep.core.NoSuchNodeException;
+import org.wyona.yarep.core.RepositoryException;
+
+/**
+ *
+ */
+public class GalleryResource extends BasicXMLResource implements ModifiableV2{
+ protected static final Logger log = Logger.getLogger(GalleryResource.class);
+
+ /**
+ * On delete this parameter gives the item id for deletion
+ * */
+ private static final String PARAM_REMOVE_ITEM_ID = "remove.item.id";
+ private static final String ATOM_VIEW_ID = "atom";
+
+ /**
+ * Property name for the collection where galleries are situated
+ * */
+ public static final String GALLERIES_COLLECTION_KEY = "galleries-collection";
+
+
+ /**
+ * Takes the path from property, or respective to the requested resource
+ * */
+ protected String getGalleryPath(){
+ String collection = null;
+ try {
+ collection = getConfiguration().getProperty(GALLERIES_COLLECTION_KEY);
+ } catch (Exception e) {
+ log.warn(e, e);
+ }
+
+ if(collection != null){
+ String galleryId = PathUtil.getName(PathUtil.getParent(getPath()));
+
+ collection = collection.endsWith("/") ? collection : collection + "/";
+ collection += galleryId;
+ }else {
+ // Assume that we are already in the gallery
+ collection = PathUtil.getParent(getPath());
+ }
+
+ if(!collection.endsWith("/")){
+ collection += "/";
+ }
+
+ return collection;
+ }
+
+ //--- Viewable
+
+ protected InputStream getContentXML(String viewId) throws Exception {
+ if(viewId == null || viewId.equals(DEFAULT_VIEW_ID) || viewId.equals(SOURCE_VIEW_ID)){
+ return super.getContentXML(viewId);
+ }
+
+ // Generate XML
+
+ Gallery gallery = new SimpleGallery(getRealm().getRepository(), getGalleryPath());
+
+ InputStream result = null;
+ if(viewId.equals(ATOM_VIEW_ID)){
+ // Create the Atom feed
+ StringBuffer feed = new StringBuffer("<?xml version='1.0' ?>"+"\n");
+ feed.append("<feed xmlns='http://www.w3.org/2005/Atom'>"+"\n");
+
+ feed.append("<id>"+gallery.getId()+"</id>"+"\n");
+ feed.append("<title>"+gallery.getTitle()+"</title>"+"\n");
+ feed.append("<updated>"+gallery.getUpdated()+"</updated>"+"\n");
+
+ for (int i = 0; i < gallery.size(); i++) {
+ feed.append("<entry>"+"\n");
+
+ GalleryItem entry = gallery.getItem(i);
+ feed.append("<id>"+entry.getId()+"</id>"+"\n");
+ feed.append("<title>"+entry.getTitle()+"</title>"+"\n");
+ feed.append("<updated>"+entry.getUpdated()+"</updated>"+"\n");
+
+ if(entry.getContent().isLinkedContent()){
+ feed.append("<content type='"+entry.getContent().getContentType()+"' src='"+PathUtil.backToRealm(getPath())+entry.getContent().toString()+"'>"+"</content>"+"\n");
+ }else{
+ feed.append("<content type='"+entry.getContent().getContentType()+"'>"+entry.getContent().toString()+"</content>"+"\n");
+ }
+
+ feed.append("</entry>"+"\n");
+ }
+
+ feed.append("</feed>");
+
+ result = new ByteArrayInputStream(feed.toString().getBytes());
+ }
+
+ return result;
+ }
+
+ //--- Modifiable
+
+ public boolean delete() throws Exception{
+ boolean deleteOK = true;
+
+ String itemToDeleteId = getParameterAsString(PARAM_REMOVE_ITEM_ID);
+ if(itemToDeleteId != null){
+ // Remove the item
+ Gallery gallery = new SimpleGallery(getRealm().getRepository(), getGalleryPath());
+ gallery.removeItem(itemToDeleteId);
+ }else{
+ // Remove the gallery
+ try {
+ getRealm().getRepository().getNode(getGalleryPath()).delete();
+ } catch (NoSuchNodeException e) {
+ log.debug(e, e);
+ deleteOK = false;
+ } catch (RepositoryException e) {
+ log.debug(e, e);
+ deleteOK = false;
+ }
+ }
+
+ if(!deleteOK){
+ log.info(itemToDeleteId+": The item might not have been deleted from the gallery");
+ }
+
+ return deleteOK;
+ }
+
+ public InputStream getInputStream() throws Exception {
+ return getRealm().getRepository().getNode(getGalleryPath()).getInputStream();
+ }
+ public long getLastModified() throws Exception {
+ return getRealm().getRepository().getNode(getGalleryPath()).getLastModified();
+ }
+
+ public OutputStream getOutputStream() throws Exception {
+ return getRealm().getRepository().getNode(getGalleryPath()).getOutputStream();
+ }
+
+ public Reader getReader() throws Exception {
+ return getRealm().getRepository().getReader(new Path(getGalleryPath()));
+ }
+
+ public Writer getWriter() throws Exception {
+ return getRealm().getRepository().getWriter(new Path(getGalleryPath()));
+ }
+
+ public void write(InputStream in) throws Exception {
+ // TODO Auto-generated method stub
+ log.warn("TODO[normal]: implement!");
+ }
+}
Added: public/yanel/contributions/resources/gallery/src/java/org/wyona/yanel/impl/resources/gallery/GenericItem.java
===================================================================
--- public/yanel/contributions/resources/gallery/src/java/org/wyona/yanel/impl/resources/gallery/GenericItem.java (rev 0)
+++ public/yanel/contributions/resources/gallery/src/java/org/wyona/yanel/impl/resources/gallery/GenericItem.java 2008-01-25 10:37:35 UTC (rev 30769)
@@ -0,0 +1,32 @@
+package org.wyona.yanel.impl.resources.gallery;
+
+import java.text.SimpleDateFormat;
+
+public interface GenericItem extends HasProperties{
+ public static final SimpleDateFormat XML_DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"/*+".SSSZ"*/);
+
+ public static final String ID_KEY = "id";
+ public static final String PATH_KEY = "path";
+ public static final String TITLE_KEY = "title";
+ public static final String UPDATED_KEY = "updated";
+
+ /**
+ * Id property
+ * */
+ String getId();
+
+ /**
+ * Path property
+ * */
+ String getPath();
+
+ /**
+ * Title property
+ * */
+ String getTitle();
+
+ /**
+ * Updated property
+ * */
+ String getUpdated();
+}
Added: public/yanel/contributions/resources/gallery/src/java/org/wyona/yanel/impl/resources/gallery/GenericItemBase.java
===================================================================
--- public/yanel/contributions/resources/gallery/src/java/org/wyona/yanel/impl/resources/gallery/GenericItemBase.java (rev 0)
+++ public/yanel/contributions/resources/gallery/src/java/org/wyona/yanel/impl/resources/gallery/GenericItemBase.java 2008-01-25 10:37:35 UTC (rev 30769)
@@ -0,0 +1,61 @@
+package org.wyona.yanel.impl.resources.gallery;
+
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Properties;
+
+import org.apache.log4j.Logger;
+
+public abstract class GenericItemBase implements GenericItem {
+ protected static final Logger log = Logger.getLogger(GenericItemBase.class);
+
+ private Properties p = new Properties();
+
+ public Object getProperty(String key) {
+ return p.get(key);
+ }
+
+ public void setProperty(String key, Object value) {
+ p.put(key, value);
+ }
+
+ public final String getId() {
+ return (String)getProperty(ID_KEY);
+ }
+
+ public final String getTitle() {
+ return (String)getProperty(TITLE_KEY);
+ }
+
+ public String getPath() {
+ return (String)getProperty(PATH_KEY);
+ }
+
+ public final String getUpdated() {
+ Object updated = getProperty(UPDATED_KEY);
+
+ String result = null;
+
+ if (updated instanceof String) {
+ result = (String)updated;
+ }else if (updated instanceof Date) {
+ Date d = (Date) updated;
+ result = XML_DATE_FORMAT.format(d);
+ }else if (updated instanceof Calendar) {
+ Calendar d = (Calendar) updated;
+ result = XML_DATE_FORMAT.format(d.getTime());
+ }if (updated instanceof Long) {
+ Long l = (Long) updated;
+ Date d = new Date(l.longValue());
+ result = XML_DATE_FORMAT.format(d);
+ }else if (updated instanceof Integer) {
+ Integer i = (Integer) updated;
+ Date d = new Date(i.longValue());
+ result = XML_DATE_FORMAT.format(d);
+ }else{
+ log.info("Could not recognize property value");
+ }
+
+ return result;
+ }
+}
Added: public/yanel/contributions/resources/gallery/src/java/org/wyona/yanel/impl/resources/gallery/HasProperties.java
===================================================================
--- public/yanel/contributions/resources/gallery/src/java/org/wyona/yanel/impl/resources/gallery/HasProperties.java (rev 0)
+++ public/yanel/contributions/resources/gallery/src/java/org/wyona/yanel/impl/resources/gallery/HasProperties.java 2008-01-25 10:37:35 UTC (rev 30769)
@@ -0,0 +1,9 @@
+package org.wyona.yanel.impl.resources.gallery;
+
+public interface HasProperties {
+ /**
+ * Every implementation have custom properties
+ * */
+ Object getProperty(String key);
+ void setProperty(String key, Object value);
+}
Added: public/yanel/contributions/resources/gallery/src/java/org/wyona/yanel/impl/resources/gallery/ImageGalleryItem.java
===================================================================
--- public/yanel/contributions/resources/gallery/src/java/org/wyona/yanel/impl/resources/gallery/ImageGalleryItem.java (rev 0)
+++ public/yanel/contributions/resources/gallery/src/java/org/wyona/yanel/impl/resources/gallery/ImageGalleryItem.java 2008-01-25 10:37:35 UTC (rev 30769)
@@ -0,0 +1,8 @@
+package org.wyona.yanel.impl.resources.gallery;
+
+public interface ImageGalleryItem extends GalleryItem {
+ public static final String JPEG_TYPE = "image/jpeg";
+ public static final String PNG_TYPE = "image/png";
+ public static final String BMP_TYPE = "image/bmp";
+ public static final String GIF_TYPE = "image/gif";
+}
Added: public/yanel/contributions/resources/gallery/src/java/org/wyona/yanel/impl/resources/gallery/LinkedImageGalleryItem.java
===================================================================
--- public/yanel/contributions/resources/gallery/src/java/org/wyona/yanel/impl/resources/gallery/LinkedImageGalleryItem.java (rev 0)
+++ public/yanel/contributions/resources/gallery/src/java/org/wyona/yanel/impl/resources/gallery/LinkedImageGalleryItem.java 2008-01-25 10:37:35 UTC (rev 30769)
@@ -0,0 +1,27 @@
+package org.wyona.yanel.impl.resources.gallery;
+
+import java.util.Date;
+
+public class LinkedImageGalleryItem extends GenericItemBase implements ImageGalleryItem {
+ private GalleryItemContent itemContent = null;
+
+ public LinkedImageGalleryItem(final String imageType, final String src) {
+ setProperty(ID_KEY, new Date());
+
+ itemContent = new GalleryItemContent(){
+ public String getContentType() {
+ return imageType;
+ }
+ public boolean isLinkedContent() {
+ return true;
+ }
+ public String toString() {
+ return src;
+ }
+ };
+ }
+
+ public GalleryItemContent getContent() {
+ return itemContent;
+ }
+}
Added: public/yanel/contributions/resources/gallery/src/java/org/wyona/yanel/impl/resources/gallery/SimpleGallery.java
===================================================================
--- public/yanel/contributions/resources/gallery/src/java/org/wyona/yanel/impl/resources/gallery/SimpleGallery.java (rev 0)
+++ public/yanel/contributions/resources/gallery/src/java/org/wyona/yanel/impl/resources/gallery/SimpleGallery.java 2008-01-25 10:37:35 UTC (rev 30769)
@@ -0,0 +1,338 @@
+package org.wyona.yanel.impl.resources.gallery;
+
+import java.io.IOException;
+import java.io.OutputStreamWriter;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.FactoryConfigurationError;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+import org.wyona.commons.io.MimeTypeUtil;
+import org.wyona.yanel.core.util.PathUtil;
+import org.wyona.yarep.core.NoSuchNodeException;
+import org.wyona.yarep.core.Node;
+import org.wyona.yarep.core.NodeType;
+import org.wyona.yarep.core.Repository;
+import org.wyona.yarep.core.RepositoryException;
+import org.xml.sax.SAXException;
+
+/**
+ * Data model:
+ * <p>
+ * There is a collection that holds all the galleries. It can be set as a resource property (e.g. /galleries)
+ * every gallery is a specific subcollection, e.g. (/galleries/mygallery). Each gallery has a meta.xml that describes it.
+ * A gallery contains items (e.g. images) each of them has its own meta.xml for info. For instance the whole data model looks like this:
+ * <ul>
+ * <li> /galleries
+ * <li> /galleries/mygallery
+ * <li> /galleries/mygallery/index.html
+ * <li> /galleries/mygallery/meta.xml
+ * <li> /galleries/mygallery/feed.xml - generatable
+ * <li> /galleries/mygallery/item-0/girlfriend.jpg
+ * <li> /galleries/mygallery/item-0/meta.xml
+ * <li> /galleries/mygallery/item-x/image.jpg
+ * <li> /galleries/mygallery/item-x/meta.xml
+ * </ul>
+ * In general it is [galleries-root][gallery-id]/[item-X]
+ * </p>
+ * <p>
+ * The contents of meta.xml are wrapped into 'meta' tag, where every property key is a subelement that contains necessary data. E.g.:
+ * <pre>
+ * <meta>
+ * <title><![CDATA[The title of the item]]></title>
+ * </meta>
+ * </pre>
+ * </p>
+ */
+public class SimpleGallery extends GenericItemBase implements Gallery {
+ private static final String META_XML = "meta.xml";
+ private static final String ITEM_COLLECTION_PREFIX = "item-";
+
+ private Repository repository = null;
+ private List/*<Item>*/ imageItems = null;
+
+ /**
+ * Clients should initialize the object properly after calling this constructor.
+ * Repository and gallery collection must be set as well as loadRepository() must be performed.
+ * */
+ public SimpleGallery(){
+
+ }
+
+ public SimpleGallery(Repository repository, String galleryCollection){
+ this.repository = repository;
+ setCollection(galleryCollection);
+
+ loadRepository();
+ }
+
+ public void setRepository(Repository repository) {
+ this.repository = repository;
+ }
+
+ public Repository getRepository() {
+ return repository;
+ }
+
+ public void setCollection(String path) {
+ if(!path.endsWith("/")){
+ path += "/";
+ }
+ setProperty(PATH_KEY, path);
+ }
+
+ public final void loadRepository(){
+ initGallery();
+ initItems();
+ }
+
+ protected void initGallery() {
+ //--- Set properties available in the repository
+
+ String id = null;
+ try {
+ id = getRepository().getNode(getPath()).getUUID();
+ } catch (Exception e) {
+ log.debug(e, e);
+ }
+ if(id == null)
+ setProperty(ID_KEY, getPath());
+ else
+ setProperty(ID_KEY, id);
+
+ Date d = new Date();
+ try {
+ d = new Date(getRepository().getNode(getPath()).getLastModified());
+ } catch (Exception e) {
+ // Do nothing
+ }
+ setProperty(UPDATED_KEY, d);
+
+ setProperty(PATH_KEY, getPath());
+
+
+ //--- Set properties in available in meta.xml
+ try {
+ Element meta = getMeta(getRepository().getNode(getPath()).getNode(META_XML));
+ String title = getMetaValue(meta, TITLE_KEY);
+ if(title == null){
+ title = getPath();
+ }
+ setProperty(TITLE_KEY, title);
+ } catch (Exception e) {
+ log.debug(e, e);
+ setProperty(TITLE_KEY, getPath());
+ }
+ }
+
+ protected void initItems(){
+ if(imageItems == null){
+ imageItems = new ArrayList/*<Item>*/();
+ }
+
+ List/*<String>*/ imageTypes = new ArrayList/*<String>*/();
+ imageTypes.add(ImageGalleryItem.BMP_TYPE);
+ imageTypes.add(ImageGalleryItem.JPEG_TYPE);
+ imageTypes.add(ImageGalleryItem.PNG_TYPE);
+ imageTypes.add(ImageGalleryItem.GIF_TYPE);
+
+ String galleryPath = getPath();
+
+
+ // Get all the images in the same collection
+ Node [] children = new Node[0];
+ try {
+ children = getRepository().getNode(galleryPath).getNodes();
+ } catch (Exception e) {
+ log.warn(e, e);
+ }
+
+ for (int i = 0; i < children.length; i++) {
+ try {
+ if(!children[i].isCollection() && !children[i].getName().startsWith(ITEM_COLLECTION_PREFIX)){
+ // Don't care about the weired files
+ continue;
+ }else{
+ Node [] imageData = children[i].getNodes();
+ for (int j = 0; j < imageData.length; j++) {
+ // Detect mime type
+ String mimeType = children[i].getMimeType();
+ if(null == mimeType){
+ mimeType = MimeTypeUtil.guessMimeType(PathUtil.getSuffix(imageData[j].getName()));
+ }
+
+ if(imageData[j].isResource() && imageTypes.contains(mimeType)){
+ LinkedImageGalleryItem item = new LinkedImageGalleryItem(mimeType, imageData[j].getPath());
+
+ //--- Set item-X properties available in the repository
+ Date d = new Date();
+
+ String id = children[i].getUUID();
+ if(null == id){
+ id = children[i].getPath();
+ }
+ item.setProperty(ID_KEY, id);
+
+ try {
+ d = new Date(getRepository().getNode(getPath()).getLastModified());
+ } catch (Exception e) {
+ // Do nothing
+ }
+ item.setProperty(UPDATED_KEY, d);
+
+ item.setProperty(PATH_KEY, children[i].getPath());
+
+ //--- Set item properties from meta.xml
+ try {
+ Element meta = getMeta(getRepository().getNode(children[i].getPath()).getNode(META_XML));
+ String title = getMetaValue(meta, TITLE_KEY);
+ if(title == null){
+ title = imageData[j].getPath();
+ }
+ item.setProperty(TITLE_KEY, title);
+ } catch (Exception e) {
+ log.debug(e, e);
+ item.setProperty(TITLE_KEY, imageData[j].getPath());
+ }
+
+ imageItems.add(item);
+ }
+ }
+ }
+ } catch (RepositoryException e) {
+ log.debug(e, e);
+ }
+ }
+ }
+
+ protected final Element getMeta(Node metaXml) throws Exception{
+ DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+ dbf.setNamespaceAware(true);
+ Document d = dbf.newDocumentBuilder().parse(metaXml.getInputStream());
+ return d.getDocumentElement();
+ }
+
+ protected final String getMetaValue(Element meta, String tag) throws Exception{
+ String value = null;
+
+ NodeList nl = meta.getElementsByTagName(TITLE_KEY);
+ if(nl.getLength() > 0){
+ value = nl.item(0).getFirstChild().getNodeValue();
+ }
+ return value;
+ }
+
+ public final GalleryItem getItem(int index) throws IndexOutOfBoundsException {
+ if(imageItems == null){
+ imageItems = new ArrayList/*<Item>*/();
+ loadRepository();
+ }
+ return (GalleryItem)imageItems.get(index);
+ }
+
+ public final int size() {
+ if(imageItems == null){
+ imageItems = new ArrayList/*<Item>*/();
+ loadRepository();
+ }
+ return imageItems.size();
+ }
+
+ public final boolean removeItem(String id) {
+ if(imageItems == null){
+ imageItems = new ArrayList/*<Item>*/();
+ loadRepository();
+ }
+
+ for (Iterator i = imageItems.iterator(); i.hasNext();) {
+ GalleryItem item = (GalleryItem) i.next();
+ if(id.equals(item.getId())){
+ return removeItem(item);
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Override the method in order to remove differently.
+ * @param the [item-X] node inside gallery
+ * */
+ public boolean removeItem(GenericItem item) {
+ boolean deleteOK = true;
+
+ Node n = null;
+
+ try {
+ n = getRepository().getNode(item.getPath());
+ } catch (Exception e) {
+ log.debug(e, e);
+ }
+
+ if(n != null){
+ try {
+ n.delete();
+ } catch (RepositoryException e) {
+ log.debug(e, e);
+ deleteOK = false;
+ }
+ }else{
+ deleteOK = false;
+ }
+
+ return deleteOK;
+ }
+
+ /**
+ * Override the method in order to create differently.
+ * Created [item-X] collection node. The image must be added to this node. Inside this collection
+ * the meta.xml is also added.
+ * @return - created [item-X] node, or null if failed to create one.
+ * */
+ public Node createItem(GenericItem item) {
+ if(imageItems == null){
+ imageItems = new ArrayList/*<Item>*/();
+ loadRepository();
+ }
+
+ Node itemNode = null;
+ try {
+ itemNode = getRepository().getNode(getPath()).addNode(ITEM_COLLECTION_PREFIX+size(), NodeType.COLLECTION);
+
+ // Fix the system properties
+ item.setProperty(ID_KEY, itemNode.getUUID());
+ item.setProperty(PATH_KEY, itemNode.getPath());
+ imageItems.add(item);
+
+ // Create meta of the item
+ Node metaXml = itemNode.addNode(META_XML, NodeType.RESOURCE);
+ metaXml.setMimeType("application/xml");
+ metaXml.setEncoding("UTF-8");
+
+ StringBuffer sb = new StringBuffer("<?xml version='1.0'?>");
+ sb.append("<meta>");
+
+ sb.append("<"+TITLE_KEY+"><![CDATA[");
+ sb.append(item.getProperty(TITLE_KEY));
+ sb.append("]]></"+TITLE_KEY+">");
+
+ // TODO: Other meta info
+
+ sb.append("</meta>");
+ new PrintWriter(new OutputStreamWriter(metaXml.getOutputStream())).write(sb.toString());
+ } catch (Exception e) {
+ log.warn("Could not create the item properly", e);
+ }
+
+ return itemNode;
+ }
+}
\ No newline at end of file
Added: public/yanel/contributions/resources/gallery/yanel-htdocs/doc/index.html
===================================================================
--- public/yanel/contributions/resources/gallery/yanel-htdocs/doc/index.html (rev 0)
+++ public/yanel/contributions/resources/gallery/yanel-htdocs/doc/index.html 2008-01-25 10:37:35 UTC (rev 30769)
@@ -0,0 +1,20 @@
+<html>
+ <head>
+ <title>gallery</title>
+ </head>
+ <body>
+ <h1>gallery</h1>
+ <dl>
+ <dt>Name:</dt>
+ <dd>gallery</dd>
+ <dt>Namespace:</dt>
+ <dd>http://www.wyona.org/yanel/resource/1.0</dd>
+ <dt>UniversalName</dt>
+ <dd>http://www.wyona.org/yanel/resource/1.0::gallery</dd>
+ <dt>Description:</dt>
+ <dd>A generic gallery for items</dd>
+ <dt>Java Class:</dt>
+ <dd>org.wyona.yanel.impl.resources.gallery.GalleryResource</dd>
+ </dl>
+ </body>
+</html>
Added: public/yanel/contributions/resources/gallery/yanel-htdocs/icons/16x16/rt-icon.png
===================================================================
(Binary files differ)
Property changes on: public/yanel/contributions/resources/gallery/yanel-htdocs/icons/16x16/rt-icon.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: public/yanel/contributions/resources/gallery/yanel-htdocs/icons/22x22/rt-icon.png
===================================================================
(Binary files differ)
Property changes on: public/yanel/contributions/resources/gallery/yanel-htdocs/icons/22x22/rt-icon.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: public/yanel/contributions/resources/gallery/yanel-htdocs/icons/32x32/rt-icon.png
===================================================================
(Binary files differ)
Property changes on: public/yanel/contributions/resources/gallery/yanel-htdocs/icons/32x32/rt-icon.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: public/yanel/contributions/resources/gallery/yanel-htdocs/icons/scalable/rt-icon.svg
===================================================================
--- public/yanel/contributions/resources/gallery/yanel-htdocs/icons/scalable/rt-icon.svg (rev 0)
+++ public/yanel/contributions/resources/gallery/yanel-htdocs/icons/scalable/rt-icon.svg 2008-01-25 10:37:35 UTC (rev 30769)
@@ -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