Wikitty-commits
Threads by month
- ----- 2026 -----
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
August 2011
- 6 participants
- 125 discussions
r1195 - trunk/wp-maven-plugin/src/main/java/org/nuiton/wikitty/plugin
by mfortun@users.nuiton.org 29 Aug '11
by mfortun@users.nuiton.org 29 Aug '11
29 Aug '11
Author: mfortun
Date: 2011-08-29 11:45:10 +0200 (Mon, 29 Aug 2011)
New Revision: 1195
Url: http://nuiton.org/repositories/revision/wikitty/1195
Log:
add comments to plugin
Modified:
trunk/wp-maven-plugin/src/main/java/org/nuiton/wikitty/plugin/AbstractWPLoadDependencyMojo.java
trunk/wp-maven-plugin/src/main/java/org/nuiton/wikitty/plugin/JettyUtil.java
trunk/wp-maven-plugin/src/main/java/org/nuiton/wikitty/plugin/WPDeployJarMojo.java
trunk/wp-maven-plugin/src/main/java/org/nuiton/wikitty/plugin/WPDeployMojo.java
trunk/wp-maven-plugin/src/main/java/org/nuiton/wikitty/plugin/WPInitMojo.java
trunk/wp-maven-plugin/src/main/java/org/nuiton/wikitty/plugin/WPJarMojo.java
trunk/wp-maven-plugin/src/main/java/org/nuiton/wikitty/plugin/WPRunMojo.java
trunk/wp-maven-plugin/src/main/java/org/nuiton/wikitty/plugin/WPUpdateMojo.java
Modified: trunk/wp-maven-plugin/src/main/java/org/nuiton/wikitty/plugin/AbstractWPLoadDependencyMojo.java
===================================================================
--- trunk/wp-maven-plugin/src/main/java/org/nuiton/wikitty/plugin/AbstractWPLoadDependencyMojo.java 2011-08-29 09:11:40 UTC (rev 1194)
+++ trunk/wp-maven-plugin/src/main/java/org/nuiton/wikitty/plugin/AbstractWPLoadDependencyMojo.java 2011-08-29 09:45:10 UTC (rev 1195)
@@ -4,20 +4,17 @@
import org.apache.maven.artifact.installer.ArtifactInstaller;
import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
-
/**
* This mojo is for init for the goal that need to construct the application
- * this mojo, with init will read pom file to load dependency declared
- * and so needed by the wikitty publication application project.
- * This will copy those needed dependency to the right directory:
- * src/main/resources/jar
+ * this mojo, with init will read pom file to load dependency declared and so
+ * needed by the wikitty publication application project. This will copy those
+ * needed dependency to the right directory: src/main/resources/jar
*
* @author mfortun
* @requiresProject true
*/
public abstract class AbstractWPLoadDependencyMojo extends AbstractWPMojo {
-
/**
* @component
*/
@@ -28,29 +25,25 @@
*/
protected ArtifactRepositoryFactory repositoryFactory;
-
/**
* Used to look up Artifacts in the remote repository.
- *
+ *
* @component
*/
protected org.apache.maven.artifact.factory.ArtifactFactory factory;
-
-
@Override
protected void init() throws Exception {
-
+
CopyDependencyUtil cpDep = new CopyDependencyUtil();
-
+
// construct path to jar dir
File basedir = getProject().getBasedir();
File jarDir = new File(basedir.getAbsolutePath() + File.separator
- + SRC_DIR_NAME + File.separator
- + MAIN_DIR_NAME + File.separator
- + RESOURCES_DIR_NAME + File.separator
+ + SRC_DIR_NAME + File.separator + MAIN_DIR_NAME
+ + File.separator + RESOURCES_DIR_NAME + File.separator
+ JAR_RESOURCES_DIR_NAME);
-
+
// initialize param for dependency copy
cpDep.setRepositoryFactory(repositoryFactory);
cpDep.setInstaller(installer);
@@ -58,10 +51,9 @@
cpDep.setOutputDirectory(jarDir);
cpDep.setFactory(factory);
cpDep.setLog(getLog());
- // run
- cpDep.execute();
+ // run that will copy jar declared as dependency into the resource/jar
+ // dir
+ cpDep.execute();
}
-
-
-
+
}
Modified: trunk/wp-maven-plugin/src/main/java/org/nuiton/wikitty/plugin/JettyUtil.java
===================================================================
--- trunk/wp-maven-plugin/src/main/java/org/nuiton/wikitty/plugin/JettyUtil.java 2011-08-29 09:11:40 UTC (rev 1194)
+++ trunk/wp-maven-plugin/src/main/java/org/nuiton/wikitty/plugin/JettyUtil.java 2011-08-29 09:45:10 UTC (rev 1195)
@@ -15,7 +15,7 @@
* New definition of the JettyRunWarMojo
* to set the protected visibility and getter and setter for the webApp file
*
- * @author mfortun
+ * @author mfortun <manoel.fortun(a)gmail.com>
*
*/
public class JettyUtil extends AbstractJettyMojo
Modified: trunk/wp-maven-plugin/src/main/java/org/nuiton/wikitty/plugin/WPDeployJarMojo.java
===================================================================
--- trunk/wp-maven-plugin/src/main/java/org/nuiton/wikitty/plugin/WPDeployJarMojo.java 2011-08-29 09:11:40 UTC (rev 1194)
+++ trunk/wp-maven-plugin/src/main/java/org/nuiton/wikitty/plugin/WPDeployJarMojo.java 2011-08-29 09:45:10 UTC (rev 1195)
@@ -76,11 +76,10 @@
import java.util.Properties;
import java.util.Set;
-
/**
* To deploy a wikitty publication jar.
- *
- * @author tchemit <chemit(a)codelutin.com>
+ *
+ * @author tchemit <chemit(a)codelutin.com>, mfortun <manoel.fortun(a)gmail.com>
* @version $Id$
* @goal deploy-jar
* @requiresProject true
@@ -88,11 +87,12 @@
* @requiresDependencyResolution runtime
* @since 3.2
*/
-public class WPDeployJarMojo extends AbstractWPLoadDependencyMojo implements Contextualizable {
+public class WPDeployJarMojo extends AbstractWPLoadDependencyMojo implements
+ Contextualizable {
/**
* Id of server.
- *
+ *
* @parameter expression="${serverId}"
* @required
*/
@@ -100,25 +100,24 @@
/**
* URL of server to use to log into server.
- *
+ *
* @parameter expression="${serverUrl}"
* @required
*/
protected String serverUrl;
-
/**
* Whether to run the "chmod" command on the remote site after the deploy.
* Defaults to "true".
- *
+ *
* @parameter expression="${maven.site.chmod}" default-value="true"
*/
protected boolean chmod;
/**
- * The mode used by the "chmod" command. Only used if chmod = true.
- * Defaults to "g+w,a+rX".
- *
+ * The mode used by the "chmod" command. Only used if chmod = true. Defaults
+ * to "g+w,a+rX".
+ *
* @parameter expression="${maven.site.chmod.mode}" default-value="g+w,a+rX"
*/
protected String chmodMode;
@@ -126,7 +125,7 @@
/**
* The options used by the "chmod" command. Only used if chmod = true.
* Defaults to "-Rf".
- *
+ *
* @parameter expression="${maven.site.chmod.options}" default-value="-Rf"
*/
protected String chmodOptions;
@@ -136,7 +135,7 @@
/**
* The current user system settings for use in Maven.
- *
+ *
* @parameter expression="${settings}"
* @required
* @readonly
@@ -156,7 +155,7 @@
/**
* All available wagons.
- *
+ *
* @component role="org.apache.maven.wagon.Wagon"
* @since 1.0
*/
@@ -171,7 +170,7 @@
/**
* file to deploy
- *
+ *
* @parameter expression="${fileToDeploy}"
* @required
*/
@@ -180,25 +179,23 @@
@Override
protected void init() throws Exception {
super.init();
-
-
-
- if (fileToDeploy==null || !fileToDeploy.exists()){
+
+ // if file not declare seach for the default file construct by
+ // wp:jar
+ if (fileToDeploy == null || !fileToDeploy.exists()) {
String file = getProject().getBuild().getDirectory();
- file+=File.separator+WPJarMojo.EXTERNALIZE_PREFIX+applicationName+".jar";
- fileToDeploy= new File(file);
+ file += File.separator + WPJarMojo.EXTERNALIZE_PREFIX
+ + applicationName + ".jar";
+ fileToDeploy = new File(file);
}
-
- repository = new Repository(
- serverId,
- serverUrl
- );
+ repository = new Repository(serverId, serverUrl);
+
if (!fileToDeploy.exists()) {
- throw new MojoExecutionException("The file to deploy " + fileToDeploy + " does not exist");
+ throw new MojoExecutionException("The file to deploy "
+ + fileToDeploy + " does not exist");
}
-
if (!isMaven3OrMore()) {
proxyInfo = getProxyInfo();
} else {
@@ -213,23 +210,27 @@
@Override
protected void doAction() throws Exception {
-
-
-
if (getLog().isDebugEnabled()) {
- getLog().debug("Deploying to '" + repository.getUrl()
- + "',\n Using credentials from server id '" + repository.getId() + "'");
+ getLog().debug(
+ "Deploying to '" + repository.getUrl()
+ + "',\n Using credentials from server id '"
+ + repository.getId() + "'");
}
try {
-
- configureWagon(wagon, repository.getId(), settings, container, getLog());
-
- AuthenticationInfo authenticationInfo = wagonManager.getAuthenticationInfo(repository.getId());
- getLog().debug("authenticationInfo with id '" + repository.getId() + "': "
- + (authenticationInfo == null ? "-" : authenticationInfo.getUserName()));
+ configureWagon(wagon, repository.getId(), settings, container,
+ getLog());
+ AuthenticationInfo authenticationInfo = wagonManager
+ .getAuthenticationInfo(repository.getId());
+ getLog().debug(
+ "authenticationInfo with id '"
+ + repository.getId()
+ + "': "
+ + (authenticationInfo == null ? "-"
+ : authenticationInfo.getUserName()));
+
try {
Debug debug = new Debug();
@@ -241,10 +242,12 @@
getLog().debug("connect with proxyInfo");
wagon.connect(repository, authenticationInfo, proxyInfo);
} else if (authenticationInfo != null) {
- getLog().debug("connect with authenticationInfo and without proxyInfo");
+ getLog().debug(
+ "connect with authenticationInfo and without proxyInfo");
wagon.connect(repository, authenticationInfo);
} else {
- getLog().debug("connect without authenticationInfo and without proxyInfo");
+ getLog().debug(
+ "connect without authenticationInfo and without proxyInfo");
wagon.connect(repository);
}
@@ -268,9 +271,11 @@
try {
if (wagon instanceof CommandExecutor) {
CommandExecutor exec = (CommandExecutor) wagon;
- exec.executeCommand("chmod " + chmodOptions + " " + chmodMode + " " + repository.getBasedir());
+ exec.executeCommand("chmod " + chmodOptions + " "
+ + chmodMode + " " + repository.getBasedir());
}
- // else ? silently ignore, FileWagon is not a CommandExecutor!
+ // else ? silently ignore, FileWagon is not a
+ // CommandExecutor!
} catch (CommandExecutionException e) {
throw new MojoExecutionException("Error uploading site", e);
}
@@ -286,7 +291,8 @@
}
protected boolean isMaven3OrMore() {
- return new ComparableVersion(getMavenVersion()).compareTo(new ComparableVersion("3.0")) >= 0;
+ return new ComparableVersion(getMavenVersion())
+ .compareTo(new ComparableVersion("3.0")) >= 0;
}
protected String getMavenVersion() {
@@ -295,8 +301,10 @@
// and that should have a pom.properties file
// if this ever changes, we will have to revisit this code.
Properties properties = new Properties();
- InputStream in =
- MavenProject.class.getClassLoader().getResourceAsStream("META-INF/maven/org.apache.maven/maven-core/pom.properties");
+ InputStream in = MavenProject.class
+ .getClassLoader()
+ .getResourceAsStream(
+ "META-INF/maven/org.apache.maven/maven-core/pom.properties");
try {
properties.load(in);
} catch (IOException ioe) {
@@ -316,19 +324,24 @@
/**
* <p>
- * Get the <code>ProxyInfo</code> of the proxy associated with the <code>host</code>
- * and the <code>protocol</code> of the given <code>repository</code>.
+ * Get the <code>ProxyInfo</code> of the proxy associated with the
+ * <code>host</code> and the <code>protocol</code> of the given
+ * <code>repository</code>.
* </p>
* <p>
- * Extract from <a href="http://java.sun.com/j2se/1.5.0/docs/guide/net/properties.html">
- * J2SE Doc : Networking Properties - nonProxyHosts</a> : "The value can be a list of hosts,
- * each separated by a |, and in addition a wildcard character (*) can be used for matching"
+ * Extract from <a
+ * href="http://java.sun.com/j2se/1.5.0/docs/guide/net/properties.html">
+ * J2SE Doc : Networking Properties - nonProxyHosts</a> : "The value can be
+ * a list of hosts, each separated by a |, and in addition a wildcard
+ * character (*) can be used for matching"
* </p>
* <p>
- * Defensively support for comma (",") and semi colon (";") in addition to pipe ("|") as separator.
+ * Defensively support for comma (",") and semi colon (";") in addition to
+ * pipe ("|") as separator.
* </p>
- *
- * @return a ProxyInfo object instantiated or <code>null</code> if no matching proxy is found
+ *
+ * @return a ProxyInfo object instantiated or <code>null</code> if no
+ * matching proxy is found
*/
public ProxyInfo getProxyInfo() {
@@ -340,27 +353,33 @@
String host = repository.getHost();
String nonProxyHostsAsString = proxyInfo.getNonProxyHosts();
- String[] nonProxyHosts = StringUtils.split(nonProxyHostsAsString, ",;|");
+ String[] nonProxyHosts = StringUtils
+ .split(nonProxyHostsAsString, ",;|");
for (int i = 0; i < nonProxyHosts.length; i++) {
String nonProxyHost = nonProxyHosts[i];
if (StringUtils.contains(nonProxyHost, "*")) {
- // Handle wildcard at the end, beginning or middle of the nonProxyHost
+ // Handle wildcard at the end, beginning or middle of the
+ // nonProxyHost
int pos = nonProxyHost.indexOf('*');
String nonProxyHostPrefix = nonProxyHost.substring(0, pos);
String nonProxyHostSuffix = nonProxyHost.substring(pos + 1);
// prefix*
- if (StringUtils.isNotEmpty(nonProxyHostPrefix) && host.startsWith(nonProxyHostPrefix)
- && StringUtils.isEmpty(nonProxyHostSuffix)) {
+ if (StringUtils.isNotEmpty(nonProxyHostPrefix)
+ && host.startsWith(nonProxyHostPrefix)
+ && StringUtils.isEmpty(nonProxyHostSuffix)) {
return null;
}
// *suffix
if (StringUtils.isEmpty(nonProxyHostPrefix)
- && StringUtils.isNotEmpty(nonProxyHostSuffix) && host.endsWith(nonProxyHostSuffix)) {
+ && StringUtils.isNotEmpty(nonProxyHostSuffix)
+ && host.endsWith(nonProxyHostSuffix)) {
return null;
}
// prefix*suffix
- if (StringUtils.isNotEmpty(nonProxyHostPrefix) && host.startsWith(nonProxyHostPrefix)
- && StringUtils.isNotEmpty(nonProxyHostSuffix) && host.endsWith(nonProxyHostSuffix)) {
+ if (StringUtils.isNotEmpty(nonProxyHostPrefix)
+ && host.startsWith(nonProxyHostPrefix)
+ && StringUtils.isNotEmpty(nonProxyHostSuffix)
+ && host.endsWith(nonProxyHostSuffix)) {
return null;
}
} else if (host.equals(nonProxyHost)) {
@@ -372,7 +391,7 @@
/**
* Get proxy information for Maven 3.
- *
+ *
* @return
*/
private ProxyInfo getProxy() {
@@ -386,13 +405,16 @@
// but the real protocol (transport layer) is http(s)
// and it's the one use in wagon to find the proxy arghhh
// so we will check both
- if (StringUtils.equalsIgnoreCase("dav", protocol) && url.startsWith("dav:")) {
+ if (StringUtils.equalsIgnoreCase("dav", protocol)
+ && url.startsWith("dav:")) {
url = url.substring(4);
if (url.startsWith("http")) {
try {
URL urlSite = new URL(url);
protocol = urlSite.getProtocol();
- getLog().debug("found dav protocol so transform to real transport protocol " + protocol);
+ getLog().debug(
+ "found dav protocol so transform to real transport protocol "
+ + protocol);
} catch (MalformedURLException e) {
getLog().warn("fail to build URL with " + url);
}
@@ -410,24 +432,31 @@
if (proxies != null) {
for (Proxy proxy : proxies) {
if (proxy.isActive()
- && (protocol.equalsIgnoreCase(proxy.getProtocol()) || originalProtocol
- .equalsIgnoreCase(proxy.getProtocol()))) {
+ && (protocol.equalsIgnoreCase(proxy
+ .getProtocol()) || originalProtocol
+ .equalsIgnoreCase(proxy.getProtocol()))) {
SettingsDecryptionResult result = settingsDecrypter
- .decrypt(new DefaultSettingsDecryptionRequest(proxy));
+ .decrypt(new DefaultSettingsDecryptionRequest(
+ proxy));
proxy = result.getProxy();
ProxyInfo proxyInfo = new ProxyInfo();
proxyInfo.setHost(proxy.getHost());
- // so hackish for wagon the protocol is https for site dav : dav:https://dav.codehaus.org/mojo/
- proxyInfo.setType(protocol);//proxy.getProtocol() );
+ // so hackish for wagon the protocol is https for
+ // site dav : dav:https://dav.codehaus.org/mojo/
+ proxyInfo.setType(protocol);// proxy.getProtocol()
+ // );
proxyInfo.setPort(proxy.getPort());
- proxyInfo.setNonProxyHosts(proxy.getNonProxyHosts());
+ proxyInfo
+ .setNonProxyHosts(proxy.getNonProxyHosts());
proxyInfo.setUserName(proxy.getUsername());
proxyInfo.setPassword(proxy.getPassword());
- getLog().debug("found proxyInfo "
- + "host:port " + proxyInfo.getHost()
- + ":" + proxyInfo.getPort() + ", " + proxyInfo.getUserName());
+ getLog().debug(
+ "found proxyInfo " + "host:port "
+ + proxyInfo.getHost() + ":"
+ + proxyInfo.getPort() + ", "
+ + proxyInfo.getUserName());
return proxyInfo;
}
@@ -435,23 +464,29 @@
}
}
}
- getLog().debug("getProxy 'protocol': " + protocol + " no ProxyInfo found");
+ getLog().debug(
+ "getProxy 'protocol': " + protocol + " no ProxyInfo found");
return null;
}
- private Wagon getWagon(org.apache.maven.wagon.repository.Repository repository, WagonManager manager)
- throws MojoExecutionException {
+ private Wagon getWagon(
+ org.apache.maven.wagon.repository.Repository repository,
+ WagonManager manager) throws MojoExecutionException {
Wagon wagon;
try {
wagon = manager.getWagon(repository);
} catch (UnsupportedProtocolException e) {
- String shortMessage =
- "Unsupported protocol: '" + repository.getProtocol() + "' for site deployment to "
- + "distributionManagement.site.url=" + repository.getUrl() + ".";
- String longMessage =
- "\n" + shortMessage + "\n" +
- "Currently supported protocols are: " + getSupportedProtocols() + ".\n"
+ String shortMessage = "Unsupported protocol: '"
+ + repository.getProtocol() + "' for site deployment to "
+ + "distributionManagement.site.url=" + repository.getUrl()
+ + ".";
+ String longMessage = "\n"
+ + shortMessage
+ + "\n"
+ + "Currently supported protocols are: "
+ + getSupportedProtocols()
+ + ".\n"
+ " Protocols may be added through wagon providers.\n"
+ " For more information, see "
+ "http://maven.apache.org/plugins/maven-site-plugin/examples/adding-deploy-pr…";
@@ -460,30 +495,35 @@
throw new MojoExecutionException(shortMessage);
} catch (TransferFailedException e) {
- throw new MojoExecutionException("Unable to configure Wagon: '" + repository.getProtocol() + "'", e);
+ throw new MojoExecutionException("Unable to configure Wagon: '"
+ + repository.getProtocol() + "'", e);
}
if (!wagon.supportsDirectoryCopy()) {
- throw new MojoExecutionException(
- "Wagon protocol '" + repository.getProtocol() + "' doesn't support directory copying");
+ throw new MojoExecutionException("Wagon protocol '"
+ + repository.getProtocol()
+ + "' doesn't support directory copying");
}
return wagon;
}
/**
- * Configure the Wagon with the information from serverConfigurationMap ( which comes from settings.xml )
- *
+ * Configure the Wagon with the information from serverConfigurationMap (
+ * which comes from settings.xml )
+ *
* @param wagon
* @param repositoryId
* @param settings
* @param container
* @param log
* @throws WagonConfigurationException
- * @todo Remove when {@link WagonManager#getWagon(org.apache.maven.wagon.repository.Repository) is available}. It's available in Maven 2.0.5.
+ * @todo Remove when
+ * {@link WagonManager#getWagon(org.apache.maven.wagon.repository.Repository)
+ * is available}. It's available in Maven 2.0.5.
*/
- private static void configureWagon(Wagon wagon, String repositoryId, Settings settings, PlexusContainer container,
- Log log)
+ private static void configureWagon(Wagon wagon, String repositoryId,
+ Settings settings, PlexusContainer container, Log log)
throws TransferFailedException {
log.debug(" configureWagon ");
@@ -496,25 +536,35 @@
if (id != null && id.equals(repositoryId)) {
if (server.getConfiguration() != null) {
- PlexusConfiguration plexusConf =
- new XmlPlexusConfiguration((Xpp3Dom) server.getConfiguration());
+ PlexusConfiguration plexusConf = new XmlPlexusConfiguration(
+ (Xpp3Dom) server.getConfiguration());
ComponentConfigurator componentConfigurator = null;
try {
- componentConfigurator = (ComponentConfigurator) container.lookup(ComponentConfigurator.ROLE, "basic");
- componentConfigurator.configureComponent(wagon, plexusConf, container.getContainerRealm());
+ componentConfigurator = (ComponentConfigurator) container
+ .lookup(ComponentConfigurator.ROLE, "basic");
+ componentConfigurator.configureComponent(wagon,
+ plexusConf, container.getContainerRealm());
} catch (ComponentLookupException e) {
- throw new TransferFailedException("While configuring wagon for \'" + repositoryId
- + "\': Unable to lookup wagon configurator." + " Wagon configuration cannot be applied.", e);
+ throw new TransferFailedException(
+ "While configuring wagon for \'"
+ + repositoryId
+ + "\': Unable to lookup wagon configurator."
+ + " Wagon configuration cannot be applied.",
+ e);
} catch (ComponentConfigurationException e) {
- throw new TransferFailedException("While configuring wagon for \'" + repositoryId
- + "\': Unable to apply wagon configuration.", e);
+ throw new TransferFailedException(
+ "While configuring wagon for \'"
+ + repositoryId
+ + "\': Unable to apply wagon configuration.",
+ e);
} finally {
if (componentConfigurator != null) {
try {
container.release(componentConfigurator);
} catch (ComponentLifecycleException e) {
- log.error("Problem releasing configurator - ignoring: " + e.getMessage());
+ log.error("Problem releasing configurator - ignoring: "
+ + e.getMessage());
}
}
}
@@ -524,10 +574,8 @@
}
/** {@inheritDoc} */
- public void contextualize(Context context)
- throws ContextException {
+ public void contextualize(Context context) throws ContextException {
container = (PlexusContainer) context.get(PlexusConstants.PLEXUS_KEY);
}
-
}
\ No newline at end of file
Modified: trunk/wp-maven-plugin/src/main/java/org/nuiton/wikitty/plugin/WPDeployMojo.java
===================================================================
--- trunk/wp-maven-plugin/src/main/java/org/nuiton/wikitty/plugin/WPDeployMojo.java 2011-08-29 09:11:40 UTC (rev 1194)
+++ trunk/wp-maven-plugin/src/main/java/org/nuiton/wikitty/plugin/WPDeployMojo.java 2011-08-29 09:45:10 UTC (rev 1195)
@@ -31,7 +31,7 @@
/**
* To deploy a wikitty publication.
*
- * @author tchemit <chemit(a)codelutin.com>
+ * @author tchemit <chemit(a)codelutin.com>, mfortun <manoel.fortun(a)gmail.com>
* @version $Id$
* @goal deploy
* @requiresProject true
@@ -50,14 +50,24 @@
@Override
protected void doAction() throws Exception {
- // Use syncrhonise.
+ // construct uri of the file system wikitty service uri
+ // with the correct label as fragment.
String origin = getProject().getBasedir().toURI().toURL()
.toExternalForm();
origin += WikittyPublicationConstant.LABEL_DELIM + SRC_DIR_NAME
+ WikittyFileUtil.WIKITTY_LABEL_SEPARATOR + MAIN_DIR_NAME;
+
+
+ // Construct the target uri with the correct label as fragment
+ // to ensure that wikitty under src/main/java label will be under
+ // application name label
String target = wikittyServiceUrl;
target += WikittyPublicationConstant.LABEL_DELIM + applicationName;
+
+
+ // launch syncrhonise with recursion enabled and delete and existing option
+ // disable
WikittyPublicationSynchronize.synchronisationServices(origin, target,
true, false, false);
}
Modified: trunk/wp-maven-plugin/src/main/java/org/nuiton/wikitty/plugin/WPInitMojo.java
===================================================================
--- trunk/wp-maven-plugin/src/main/java/org/nuiton/wikitty/plugin/WPInitMojo.java 2011-08-29 09:11:40 UTC (rev 1194)
+++ trunk/wp-maven-plugin/src/main/java/org/nuiton/wikitty/plugin/WPInitMojo.java 2011-08-29 09:45:10 UTC (rev 1195)
@@ -67,6 +67,7 @@
File jarDir = new File(ressourceDir.getAbsolutePath() + File.separator
+ JAR_RESOURCES_DIR_NAME);
+ // create dirs
createDirectoryIfNecessary(srcDir);
createDirectoryIfNecessary(mainDir);
createDirectoryIfNecessary(appDir);
Modified: trunk/wp-maven-plugin/src/main/java/org/nuiton/wikitty/plugin/WPJarMojo.java
===================================================================
--- trunk/wp-maven-plugin/src/main/java/org/nuiton/wikitty/plugin/WPJarMojo.java 2011-08-29 09:11:40 UTC (rev 1194)
+++ trunk/wp-maven-plugin/src/main/java/org/nuiton/wikitty/plugin/WPJarMojo.java 2011-08-29 09:45:10 UTC (rev 1195)
@@ -39,7 +39,7 @@
/**
* To create a wikitty publication jar.
*
- * @author tchemit <chemit(a)codelutin.com>
+ * @author tchemit <chemit(a)codelutin.com>, mfortun <manoel.fortun(a)gmail.com>
* @version $Id$
* @goal jar
* @requiresProject true
@@ -64,14 +64,15 @@
// with this we will obtain the same directory/label configuration
// that we will have on a classic service
-
+ // construct uri of the file system wikitty service uri
+ // with the correct label as fragment.
String origin = getProject().getBasedir().toURI().toURL()
.toExternalForm();
origin += WikittyPublicationConstant.LABEL_DELIM + SRC_DIR_NAME
+ WikittyFileUtil.WIKITTY_LABEL_SEPARATOR + MAIN_DIR_NAME;
-
+ // Construct first inside the build dir a temporary repositorie
String buildDir = getProject().getBuild().getDirectory();
File targetFile = new File(buildDir);
createDirectoryIfNecessary(targetFile);
@@ -80,31 +81,40 @@
File appsDir = new File(buildDir+File.separator+appPath);
createDirectoryIfNecessary(appsDir);
-
+ // Construct the uri over file system to ensure that wikitties will
+ // have the correct
String target = targetFile.toURI().toURL().toExternalForm();
target += WikittyPublicationConstant.LABEL_DELIM + applicationName;
-
+ // launch syncrhonise with recursion enabled and delete and existing option
+ // disable
WikittyPublicationSynchronize.synchronisationServices(origin, target,
true, false, false);
- // then externalize the target
-
+
+
+
+ // then externalize the target that have the correct label
ApplicationConfig appconfig = new ApplicationConfig();
-
+
+ // construct application config with the current wikitty service over
+ // file system
appconfig.setOption(
WikittyConfigOption.WIKITTY_WIKITTYSERVICE_COMPONENTS.getKey(),
WikittyPublicationFileSystem.class.getName());
appconfig.setOption(WikittyConfigOption.WIKITTY_SERVER_URL.getKey(),
target);
-
+
+ // the criteria to externalize all the wikitty
Criteria critOnWikittyWithLabel = Search.query().keyword("*")
.criteria();
String jarName = EXTERNALIZE_PREFIX+applicationName;
+ // construct the jar with a custom name, in the build dir
+ // the correct config for the service a the criteria
WikittyPublicationExternalize.externalize(appconfig,
critOnWikittyWithLabel,targetFile, jarName);
Modified: trunk/wp-maven-plugin/src/main/java/org/nuiton/wikitty/plugin/WPRunMojo.java
===================================================================
--- trunk/wp-maven-plugin/src/main/java/org/nuiton/wikitty/plugin/WPRunMojo.java 2011-08-29 09:11:40 UTC (rev 1194)
+++ trunk/wp-maven-plugin/src/main/java/org/nuiton/wikitty/plugin/WPRunMojo.java 2011-08-29 09:45:10 UTC (rev 1195)
@@ -45,7 +45,7 @@
/**
* To run a wikitty publication project.
*
- * @author tchemit <chemit(a)codelutin.com>
+ * @author tchemit <chemit(a)codelutin.com>, mfortun <manoel.fortun(a)gmail.com>
* @version $Id$
* @goal run
* @requiresProject true
@@ -117,13 +117,16 @@
@Override
protected void doAction() throws Exception {
+ // search for the wikitty publication ui war
File webApp = resolveFile();
-
+ // prepare the fall back uri that will be a wikitty service orver
+ // file system, our current src/main dir with the application
String build = project.getBuild().getDirectory();
File buildDir = new File(build);
createDirectoryIfNecessary(buildDir);
+ // construct props dir that will contain properties for fallback
File propsFile = new File(build + File.separator
+ FALLBACK_PROPERTIE_FILE_NAME);
if (propsFile.exists()) {
@@ -133,7 +136,7 @@
// construct propertie for fallback service
String fileSystemUrlService = getProject().getBasedir().toURI().toURL()
.toExternalForm();
-
+
fileSystemUrlService += WikittyPublicationConstant.LABEL_DELIM
+ SRC_DIR_NAME + WikittyFileUtil.WIKITTY_LABEL_SEPARATOR
+ MAIN_DIR_NAME;
@@ -157,6 +160,7 @@
System.setProperty(ApplicationConfig.CONFIG_PATH, getProject()
.getBuild().getDirectory());
+ // run jetty with our application inside fallback in wikitty publication
JettyUtil jettyRunMojo = new JettyUtil();
jettyRunMojo.setWebApp(webApp);
jettyRunMojo.setProject(project);
Modified: trunk/wp-maven-plugin/src/main/java/org/nuiton/wikitty/plugin/WPUpdateMojo.java
===================================================================
--- trunk/wp-maven-plugin/src/main/java/org/nuiton/wikitty/plugin/WPUpdateMojo.java 2011-08-29 09:11:40 UTC (rev 1194)
+++ trunk/wp-maven-plugin/src/main/java/org/nuiton/wikitty/plugin/WPUpdateMojo.java 2011-08-29 09:45:10 UTC (rev 1195)
@@ -30,8 +30,8 @@
/**
* To update a wikitty publication project.
- *
- * @author tchemit <chemit(a)codelutin.com>
+ *
+ * @author tchemit <chemit(a)codelutin.com>, mfortun <manoel.fortun(a)gmail.com>
* @version $Id$
* @goal update
* @requiresProject true
@@ -44,20 +44,29 @@
@Override
protected void init() throws Exception {
super.init();
- //TODO
+ // TODO
}
@Override
protected void doAction() throws Exception {
- // same as deploy
- // Use syncrhonise.
+ // Same as deploy
+
+ // construct uri of the file system wikitty service uri
+ // with the correct label as fragment.
String origin = getProject().getBasedir().toURI().toURL()
.toExternalForm();
origin += WikittyPublicationConstant.LABEL_DELIM + SRC_DIR_NAME
+ WikittyFileUtil.WIKITTY_LABEL_SEPARATOR + MAIN_DIR_NAME;
+
+ // Construct the target uri with the correct label as fragment
+ // to ensure that wikitty under src/main/java label will be under
+ // application name label
String target = wikittyServiceUrl;
target += WikittyPublicationConstant.LABEL_DELIM + applicationName;
+ // launch syncrhonise with recursion enabled and delete and existing
+ // option
+ // disable
WikittyPublicationSynchronize.synchronisationServices(origin, target,
true, false, false);
}
1
0
r1194 - in trunk/wikitty-publication/src/site: . rapport rapport/beamer rapport/image rapport/part rapport/ressources
by mfortun@users.nuiton.org 29 Aug '11
by mfortun@users.nuiton.org 29 Aug '11
29 Aug '11
Author: mfortun
Date: 2011-08-29 11:11:40 +0200 (Mon, 29 Aug 2011)
New Revision: 1194
Url: http://nuiton.org/repositories/revision/wikitty/1194
Log:
* add internship report
Added:
trunk/wikitty-publication/src/site/rapport/
trunk/wikitty-publication/src/site/rapport/README.txt
trunk/wikitty-publication/src/site/rapport/beamer/
trunk/wikitty-publication/src/site/rapport/beamer/codelutinbeamer.tex
trunk/wikitty-publication/src/site/rapport/image/
trunk/wikitty-publication/src/site/rapport/image/explicationTag.graphml
trunk/wikitty-publication/src/site/rapport/image/explicationTag.png
trunk/wikitty-publication/src/site/rapport/image/externalize.graphml
trunk/wikitty-publication/src/site/rapport/image/externalize.png
trunk/wikitty-publication/src/site/rapport/image/graphDistrib.graphml
trunk/wikitty-publication/src/site/rapport/image/graphDistrib.png
trunk/wikitty-publication/src/site/rapport/image/graphestrutstaglib.graphml
trunk/wikitty-publication/src/site/rapport/image/howtoopen graphml.txt
trunk/wikitty-publication/src/site/rapport/image/logofac.png
trunk/wikitty-publication/src/site/rapport/image/logolutin.png
trunk/wikitty-publication/src/site/rapport/image/multicontext.graphml
trunk/wikitty-publication/src/site/rapport/image/multicontext.png
trunk/wikitty-publication/src/site/rapport/image/pileService.graphml
trunk/wikitty-publication/src/site/rapport/image/pileService.png
trunk/wikitty-publication/src/site/rapport/image/propertiescontext.graphml
trunk/wikitty-publication/src/site/rapport/image/propertiescontext.png
trunk/wikitty-publication/src/site/rapport/image/schema_wikitty_architecture.svg
trunk/wikitty-publication/src/site/rapport/image/strutsexplain.graphml
trunk/wikitty-publication/src/site/rapport/image/strutsexplain.png
trunk/wikitty-publication/src/site/rapport/image/wikittypubuml.png
trunk/wikitty-publication/src/site/rapport/part/
trunk/wikitty-publication/src/site/rapport/part/annexes.tex
trunk/wikitty-publication/src/site/rapport/part/codelutin.tex
trunk/wikitty-publication/src/site/rapport/part/conclusion.tex
trunk/wikitty-publication/src/site/rapport/part/introduction.tex
trunk/wikitty-publication/src/site/rapport/part/organisation.tex
trunk/wikitty-publication/src/site/rapport/part/remerciement.tex
trunk/wikitty-publication/src/site/rapport/part/resume.tex
trunk/wikitty-publication/src/site/rapport/part/wikitty.tex
trunk/wikitty-publication/src/site/rapport/part/wikittymavenplugin.tex
trunk/wikitty-publication/src/site/rapport/part/wikittypublication.tex
trunk/wikitty-publication/src/site/rapport/part/wikittypublicationexternalize.tex
trunk/wikitty-publication/src/site/rapport/part/wikittypublicationsite.tex
trunk/wikitty-publication/src/site/rapport/part/wikittypublicationsync.tex
trunk/wikitty-publication/src/site/rapport/part/wikittystruts.tex
trunk/wikitty-publication/src/site/rapport/rapportMain.tex
trunk/wikitty-publication/src/site/rapport/rapport_stage_FORTUN_Manoel_2010-2011.pdf
trunk/wikitty-publication/src/site/rapport/ressources/
trunk/wikitty-publication/src/site/rapport/ressources/planningprev.ods
trunk/wikitty-publication/src/site/rapport/ressources/planningprev2.ods
trunk/wikitty-publication/src/site/rapport/ressources/planningprev2.pdf
trunk/wikitty-publication/src/site/rapport/ressources/pom.xml
trunk/wikitty-publication/src/site/rapport/stage-sujet-2011-wikitty-publication lutin.pdf
Added: trunk/wikitty-publication/src/site/rapport/README.txt
===================================================================
--- trunk/wikitty-publication/src/site/rapport/README.txt (rev 0)
+++ trunk/wikitty-publication/src/site/rapport/README.txt 2011-08-29 09:11:40 UTC (rev 1194)
@@ -0,0 +1,6 @@
+L'ensemble des fichiers de ce dossier se rapporte au stage de Manoël Fortun
+étudiant de master informatique(alma) à l'université de Nantes.
+Stage effectué du 28 mars 2011 au 30 aout 2011 au sein de l'entreprise Code Lutin.
+
+Pour obtenir un version pdf du rapport il faut lancer la commande :
+pdflatex rapportMain.tex
Added: trunk/wikitty-publication/src/site/rapport/beamer/codelutinbeamer.tex
===================================================================
--- trunk/wikitty-publication/src/site/rapport/beamer/codelutinbeamer.tex (rev 0)
+++ trunk/wikitty-publication/src/site/rapport/beamer/codelutinbeamer.tex 2011-08-29 09:11:40 UTC (rev 1194)
@@ -0,0 +1,261 @@
+% This text is proprietary.
+% It's a part of presentation made by myself.
+% It may not used commercial.
+% The noncommercial use such as private and study is free
+% Dec 2007
+% Author: Sascha Frank
+% University Freiburg
+% www.informatik.uni-freiburg.de/~frank/
+%
+%
+
+\documentclass[12pt,a4paper,utf8x]{beamer}
+\setbeamertemplate{navigation symbols}{}
+
+\usepackage [frenchb]{babel}
+\usepackage{color}
+% Pour pouvoir utiliser
+\usepackage{ucs}
+\usepackage[utf8x]{inputenc}
+
+\usepackage{amsmath}
+
+\usetheme{Marburg}
+
+\addtobeamertemplate{footline}{\hfill\insertframenumber/\inserttotalframenumber}
+
+\beamersetuncovermixins{\opaqueness<1>{25}}{\opaqueness<2->{15}}
+\begin{document}
+\title{Wikitty Publication}
+\author{Manoël Fortun}
+
+\begin{frame}
+\titlepage
+\end{frame}
+
+\begin{frame}\tableofcontents
+\end{frame}
+
+
+\section{Wikitty}
+\subsection{C'est quoi ?}
+\begin{frame}\frametitle{C'est quoi ?}
+\begin{itemize}
+\item Base de données orientées document.
+\item Clé $\to$ Valeur
+\item Des extensions
+\item Entités générées grace à un modèle UML
+\item champ nommé: WikittyPubText.name
+\end{itemize}
+\end{frame}
+
+\subsection{Wikitty Service}
+\begin{frame} \frametitle{Wikitty Service}
+\begin{itemize}
+\item Restauration
+\item Sauvegarde
+\item Recherche
+\item Configuré par fichier de propriétés
+\item "Complexité" de la base masqué
+\end{itemize}
+\end{frame}
+
+
+\section{Scripting - JSR 223}
+\subsection{Pardon ?}
+\begin{frame}\frametitle{Pardon ?}
+Concept très simple, la possibilité d'intrepréter un langage de script dans un
+autre langage.\\
+
+Par exemple, interpréter et éxécuter du \emph{javascript} dans du \emph{java}.
+\end{frame}
+\subsection{Bindings}
+\begin{frame}\frametitle{Bindings}
+
+Très important:
+\begin{itemize}
+\item Langage de script peut utiliser le langage qui l'interprète
+\item Donc insérer du java dans du javascript
+\item Méthode, Objets
+\item Map$\textless$String, Object$\textgreater$
+\end{itemize}
+\end{frame}
+
+
+\section{Wikitty Publication}
+\subsection{Pourquoi faire ?}
+\begin{frame}\frametitle{Pourquoi faire ?}
+\begin{itemize}
+\item Utilise le concept du scripting
+\item Intégre un moteur d'évaluation de script
+\item Script stocké sous forme de Wikitty
+\item Wikitty Service en binding
+\item Moteur de script en binding
+\item WikittyPubText
+\item WikittyPubData
+\end{itemize}
+
+\end{frame}
+
+\subsection{Nouveau type de wikitty service}
+\begin{frame}\frametitle{Nouveau type de wikitty service}
+\begin{itemize}
+\item wikitty service sur système de fichier
+\item wikitty service sur jar
+\item wikitty service fallback\pause
+\end{itemize}\pause
+
+\begin{figure}
+\includegraphics[scale=0.5]{../image/multicontext.png}
+\caption{Service avec fallback}
+\end{figure}
+\end{frame}
+
+
+\subsection{Nouvelles Fonctionnalités}
+\subsubsection*{Synchronisation entre service}
+\begin{frame}\frametitle{Synchronisation entre service}
+\begin{itemize}
+\item Transférer des wikitty d'un service à un autre
+\item Basé sur les labels
+\item Mise à jour
+\item "Suppression"
+\item "Déplacement" de wikitty
+\end{itemize}
+\pause
+Exemple de label :
+\verb!org.nuiton.wikitty!
+\end{frame}
+
+\begin{frame}
+Exemple de synchronisation:
+\begin{itemize}
+\item cajo://localhost:1111\#com
+\item cajo://wwikitty.nuiton.org:2222\#org
+\end{itemize}
+
+Les wikitty sous le label \verb!com! contenu sur le premier service vont
+être envoyé sur le second service sous le label org.\\
+
+Le label \verb!com.nuiton.wikitty! deviendra \verb!org.nuiton.wikitty! sur
+le second service.\\
+\end{frame}
+
+\subsubsection*{Externalisation}
+\begin{frame}\frametitle{Externalisation}
+\begin{itemize}
+\item "Fixer" les wikitty
+\item Compiler les scripts
+\item Création d'un jar
+\item WikittyPubTextCompiled
+\end{itemize}
+\end{frame}
+
+\subsubsection*{Migration vers struts}
+\begin{frame}\frametitle{Migration vers struts}
+\begin{itemize}
+\item Migration depuis une application en jsp "classic/simple"
+\item Mécanisme de login/logout
+\item action struts/interceptor
+\item support struts pour les sessions etc
+\end{itemize}
+\end{frame}
+
+
+
+
+\subsubsection*{Moteur d'évaluation}
+\begin{frame}\frametitle{Moteur d'évaluation}
+
+Moteur d'évaluation dans un navigateur à l'adresse:\\
+\verb!/[contextData]/[contextApps]/eval/[mandatory]!
+
+\begin{itemize}
+\item mandatory pour retrouver le wikitty correspondant
+\item eval, c'est le nom de l'action
+\item contextApps, pour ne pas se tromper de wikitty.
+\item contextData, pour trouver le bon wikitty service
+\end{itemize}
+
+
+
+\end{frame}
+
+\begin{frame}\frametitle{Moteur d'évaluation}
+
+Comment ça marche contextData:
+
+\begin{figure}
+\includegraphics[scale=0.5]{../image/propertiescontext.png}
+\caption{Surcharge des propriétés}
+\end{figure}
+
+\end{frame}
+
+\begin{frame}\frametitle{Moteur d'évaluation}
+Le mime type des WikittyPub détermine le traitement effectué.
+\begin{itemize}
+\item text/javascript, passera par l'évaluateur de javascript
+\item image/png, renvoyé tel quel en mettant le bon type mime dans la réponse
+pour interprétation du navigateur
+\item text/html.javascript, passera par un décorateur pour transformer le contenu
+en text/javascript pour interprétation
+\item text/java, sera compilé pour évaluation
+\end{itemize}
+\end{frame}
+
+\begin{frame}\frametitle{Moteur d'évaluation}
+
+Exemple:
+\verb!codelutin/chorem/eval/Menu!
+
+On va "évaluer" le wikittyPub qui possède le nom "Menu" avec un label qui
+commence par "chorem" et qui se trouve dans le service correspondant à Code Lutin.
+Le rendu sera déterminé par le mime Type du wikittyPub correspondant.
+\end{frame}
+
+
+
+
+
+\section{Wikitty Struts}
+\begin{frame}\frametitle{Wikitty Struts}
+Création d'une Tag lib struts pour une intégration facilité de wikitty dans des
+formulaire.
+Deux possibilités d'utilisation
+\begin{itemize}
+\item Formulaire d'édition de wikitty, avec action pré-construite
+\item Intégration des champs de wikitty dans un formulaire, avec choix de la forme
+de l'affichage en fonction du tag utilisé.
+\end{itemize}
+
+\end{frame}
+
+
+\section{Plugin Maven}
+\subsection{Un plugin?!}
+\begin{frame}\frametitle{Un plugin?!}
+\begin{itemize}
+\item Motivation: Plus simple pour l'utilisateur
+\item Clés en mains
+\item Intègre de façon ciblée les fonctionnalités (externalize-synchronize)
+\end{itemize}
+%pom exemple
+%liste des goals
+\end{frame}
+
+\subsection{Les goals}
+\begin{frame}\frametitle{Les goals}
+\begin{itemize}
+\item wp:init
+\item wp:run
+\item wp:deploy
+\item wp:update
+\item wp:jar
+\item wp:jar-deploy
+\end{itemize}
+
+\end{frame}
+
+
+\end{document}
Added: trunk/wikitty-publication/src/site/rapport/image/explicationTag.graphml
===================================================================
--- trunk/wikitty-publication/src/site/rapport/image/explicationTag.graphml (rev 0)
+++ trunk/wikitty-publication/src/site/rapport/image/explicationTag.graphml 2011-08-29 09:11:40 UTC (rev 1194)
@@ -0,0 +1,364 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" xmlns:yed="http://www.yworks.com/xml/yed/3" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd">
+ <!--Created by yFiles for Java HEAD-Current-->
+ <key for="graphml" id="d0" yfiles.type="resources"/>
+ <key for="port" id="d1" yfiles.type="portgraphics"/>
+ <key for="port" id="d2" yfiles.type="portgeometry"/>
+ <key for="port" id="d3" yfiles.type="portuserdata"/>
+ <key attr.name="url" attr.type="string" for="node" id="d4"/>
+ <key attr.name="description" attr.type="string" for="node" id="d5"/>
+ <key for="node" id="d6" yfiles.type="nodegraphics"/>
+ <key attr.name="Description" attr.type="string" for="graph" id="d7"/>
+ <key attr.name="url" attr.type="string" for="edge" id="d8"/>
+ <key attr.name="description" attr.type="string" for="edge" id="d9"/>
+ <key for="edge" id="d10" yfiles.type="edgegraphics"/>
+ <graph edgedefault="directed" id="G">
+ <data key="d7"/>
+ <node id="n0">
+ <data key="d5"/>
+ <data key="d6">
+ <y:GenericNode configuration="com.yworks.flowchart.annotation">
+ <y:Geometry height="189.0" width="80.0" x="519.0000000000001" y="242.0"/>
+ <y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
+ <y:BorderStyle color="#000000" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="4.0" x="38.0" y="92.5"/>
+ <y:StyleProperties>
+ <y:Property class="java.lang.Byte" name="com.yworks.flowchart.style.orientation" value="0"/>
+ <y:Property class="java.lang.Byte" name="LAYER_STYLE_PROPERTY_KEY" value="1"/>
+ </y:StyleProperties>
+ </y:GenericNode>
+ </data>
+ </node>
+ <node id="n1">
+ <data key="d5"/>
+ <data key="d6">
+ <y:GenericNode configuration="com.yworks.flowchart.annotation">
+ <y:Geometry height="272.0" width="80.0" x="308.0" y="172.25"/>
+ <y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
+ <y:BorderStyle color="#000000" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="4.0" x="38.0" y="134.0"/>
+ <y:StyleProperties>
+ <y:Property class="java.lang.Byte" name="com.yworks.flowchart.style.orientation" value="0"/>
+ <y:Property class="java.lang.Byte" name="LAYER_STYLE_PROPERTY_KEY" value="1"/>
+ </y:StyleProperties>
+ </y:GenericNode>
+ </data>
+ </node>
+ <node id="n2">
+ <data key="d4"/>
+ <data key="d5"><![CDATA[UMLClass]]></data>
+ <data key="d6">
+ <y:UMLClassNode>
+ <y:Geometry height="28.0" width="129.0" x="534.0" y="474.25"/>
+ <y:Fill color="#FFCC00" transparent="false"/>
+ <y:BorderStyle color="#000000" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.12646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="133.263671875" x="-2.1318359375" y="3.0">ClasseMonTagBean</y:NodeLabel>
+ <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+ <y:AttributeLabel/>
+ <y:MethodLabel/>
+ </y:UML>
+ </y:UMLClassNode>
+ </data>
+ </node>
+ <node id="n3">
+ <data key="d4"/>
+ <data key="d5"><![CDATA[UMLClass]]></data>
+ <data key="d6">
+ <y:UMLClassNode>
+ <y:Geometry height="28.0" width="149.0" x="328.0000000000001" y="474.25"/>
+ <y:Fill color="#FFCC00" transparent="false"/>
+ <y:BorderStyle color="#000000" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.12646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="101.27783203125" x="23.861083984375" y="3.0">ClasseMonTag</y:NodeLabel>
+ <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+ <y:AttributeLabel/>
+ <y:MethodLabel/>
+ </y:UML>
+ </y:UMLClassNode>
+ </data>
+ </node>
+ <node id="n4">
+ <data key="d4"/>
+ <data key="d5"><![CDATA[UMLClass]]></data>
+ <data key="d6">
+ <y:UMLClassNode>
+ <y:Geometry height="28.0" width="149.0" x="328.0000000000001" y="391.0"/>
+ <y:Fill color="#99CCFF" transparent="false"/>
+ <y:BorderStyle color="#000000" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.12646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="136.21533203125" x="6.392333984375" y="3.0">AbstractClosingTag</y:NodeLabel>
+ <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+ <y:AttributeLabel/>
+ <y:MethodLabel/>
+ </y:UML>
+ </y:UMLClassNode>
+ </data>
+ </node>
+ <node id="n5">
+ <data key="d4"/>
+ <data key="d5"><![CDATA[UMLClass]]></data>
+ <data key="d6">
+ <y:UMLClassNode>
+ <y:Geometry height="28.0" width="149.00000000000003" x="328.0000000000001" y="317.0"/>
+ <y:Fill color="#99CCFF" transparent="false"/>
+ <y:BorderStyle color="#000000" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.12646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="107.1748046875" x="20.912597656250014" y="3.0">AbastractUiTag</y:NodeLabel>
+ <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+ <y:AttributeLabel/>
+ <y:MethodLabel/>
+ </y:UML>
+ </y:UMLClassNode>
+ </data>
+ </node>
+ <node id="n6">
+ <data key="d4"/>
+ <data key="d5"><![CDATA[UMLClass]]></data>
+ <data key="d6">
+ <y:UMLClassNode>
+ <y:Geometry height="28.0" width="173.0" x="316.0000000000001" y="248.0"/>
+ <y:Fill color="#99CCFF" transparent="false"/>
+ <y:BorderStyle color="#000000" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.12646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="158.908203125" x="7.0458984375" y="3.0">ComponentTagSupport</y:NodeLabel>
+ <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+ <y:AttributeLabel/>
+ <y:MethodLabel/>
+ </y:UML>
+ </y:UMLClassNode>
+ </data>
+ </node>
+ <node id="n7">
+ <data key="d4"/>
+ <data key="d5"><![CDATA[UMLClass]]></data>
+ <data key="d6">
+ <y:UMLClassNode>
+ <y:Geometry height="28.0" width="129.0" x="338.0000000000001" y="181.0"/>
+ <y:Fill color="#99CCFF" transparent="false"/>
+ <y:BorderStyle color="#000000" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.12646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="101.63330078125" x="13.683349609375" y="3.0">StrutsBodyTag</y:NodeLabel>
+ <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+ <y:AttributeLabel/>
+ <y:MethodLabel/>
+ </y:UML>
+ </y:UMLClassNode>
+ </data>
+ </node>
+ <node id="n8">
+ <data key="d4"/>
+ <data key="d5"><![CDATA[UMLClass]]></data>
+ <data key="d6">
+ <y:UMLClassNode>
+ <y:Geometry height="28.0" width="135.16666666666674" x="334.91666666666674" y="123.0"/>
+ <y:Fill color="#339966" transparent="false"/>
+ <y:BorderStyle color="#000000" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.12646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="114.54443359375" x="10.311116536458371" y="3.0">BodyTagSupport</y:NodeLabel>
+ <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+ <y:AttributeLabel/>
+ <y:MethodLabel/>
+ </y:UML>
+ </y:UMLClassNode>
+ </data>
+ </node>
+ <node id="n9">
+ <data key="d4"/>
+ <data key="d5"><![CDATA[UMLClass]]></data>
+ <data key="d6">
+ <y:UMLClassNode>
+ <y:Geometry height="28.0" width="100.0" x="548.5" y="391.0"/>
+ <y:Fill color="#99CCFF" transparent="false"/>
+ <y:BorderStyle color="#000000" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.12646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="100.2685546875" x="-0.13427734375" y="3.0">ClosingUiBean</y:NodeLabel>
+ <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+ <y:AttributeLabel/>
+ <y:MethodLabel/>
+ </y:UML>
+ </y:UMLClassNode>
+ </data>
+ </node>
+ <node id="n10">
+ <data key="d4"/>
+ <data key="d5"><![CDATA[UMLClass]]></data>
+ <data key="d6">
+ <y:UMLClassNode>
+ <y:Geometry height="28.0" width="100.0" x="548.5" y="317.0"/>
+ <y:Fill color="#99CCFF" transparent="false"/>
+ <y:BorderStyle color="#000000" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.12646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="49.78564453125" x="25.107177734375" y="3.0">UiBean</y:NodeLabel>
+ <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+ <y:AttributeLabel/>
+ <y:MethodLabel/>
+ </y:UML>
+ </y:UMLClassNode>
+ </data>
+ </node>
+ <node id="n11">
+ <data key="d4"/>
+ <data key="d5"><![CDATA[UMLClass]]></data>
+ <data key="d6">
+ <y:UMLClassNode>
+ <y:Geometry height="28.0" width="100.0" x="548.5" y="248.0"/>
+ <y:Fill color="#99CCFF" transparent="false"/>
+ <y:BorderStyle color="#000000" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.12646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="81.0478515625" x="9.47607421875" y="3.0">Component</y:NodeLabel>
+ <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+ <y:AttributeLabel/>
+ <y:MethodLabel/>
+ </y:UML>
+ </y:UMLClassNode>
+ </data>
+ </node>
+ <node id="n12">
+ <data key="d5"/>
+ <data key="d6">
+ <y:ShapeNode>
+ <y:Geometry height="30.0" width="76.0" x="693.0" y="389.0"/>
+ <y:Fill color="#99CCFF" transparent="false"/>
+ <y:BorderStyle hasColor="false" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.962890625" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="37.9140625" x="19.04296875" y="6.0185546875">Struts</y:NodeLabel>
+ <y:Shape type="rectangle"/>
+ </y:ShapeNode>
+ </data>
+ </node>
+ <node id="n13">
+ <data key="d5"/>
+ <data key="d6">
+ <y:ShapeNode>
+ <y:Geometry height="30.0" width="76.0" x="693.0" y="473.25"/>
+ <y:Fill color="#FFCC00" transparent="false"/>
+ <y:BorderStyle hasColor="false" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.962890625" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="43.1171875" x="16.44140625" y="6.0185546875">TagLib</y:NodeLabel>
+ <y:Shape type="rectangle"/>
+ </y:ShapeNode>
+ </data>
+ </node>
+ <node id="n14">
+ <data key="d5"/>
+ <data key="d6">
+ <y:ShapeNode>
+ <y:Geometry height="30.0" width="76.0" x="693.0" y="121.0"/>
+ <y:Fill color="#339966" transparent="false"/>
+ <y:BorderStyle hasColor="false" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.962890625" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="64.65625" x="5.671875" y="6.0185546875">Norme J2E</y:NodeLabel>
+ <y:Shape type="rectangle"/>
+ </y:ShapeNode>
+ </data>
+ </node>
+ <edge id="e0" source="n2" target="n3">
+ <data key="d8"/>
+ <data key="d9"><![CDATA[UMLhas]]></data>
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+ <y:LineStyle color="#000000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="diamond"/>
+ <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="-30.543945312499943" y="2.0"/>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e1" source="n3" target="n4">
+ <data key="d8"/>
+ <data key="d9"><![CDATA[UMLinherits]]></data>
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+ <y:LineStyle color="#000000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="white_delta"/>
+ <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="2.0000000000001137" y="-29.6009521484375"/>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e2" source="n4" target="n5">
+ <data key="d8"/>
+ <data key="d9"><![CDATA[UMLinherits]]></data>
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+ <y:LineStyle color="#000000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="white_delta"/>
+ <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="2.0000000000001137" y="-25.0166015625"/>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e3" source="n5" target="n6">
+ <data key="d8"/>
+ <data key="d9"><![CDATA[UMLinherits]]></data>
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+ <y:LineStyle color="#000000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="white_delta"/>
+ <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="2.0000000000001137" y="-22.51806640625"/>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e4" source="n6" target="n7">
+ <data key="d8"/>
+ <data key="d9"><![CDATA[UMLinherits]]></data>
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+ <y:LineStyle color="#000000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="white_delta"/>
+ <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="2.0000000000001137" y="-21.53076171875"/>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e5" source="n7" target="n8">
+ <data key="d8"/>
+ <data key="d9"><![CDATA[UMLinherits]]></data>
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+ <y:LineStyle color="#000000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="white_delta"/>
+ <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="2.0000000000001137" y="-16.9814453125"/>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e6" source="n2" target="n9">
+ <data key="d8"/>
+ <data key="d9"><![CDATA[UMLinherits]]></data>
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+ <y:LineStyle color="#000000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="white_delta"/>
+ <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="2.0" y="-29.6009521484375"/>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e7" source="n9" target="n10">
+ <data key="d8"/>
+ <data key="d9"><![CDATA[UMLinherits]]></data>
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+ <y:LineStyle color="#000000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="white_delta"/>
+ <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="2.0" y="-25.0166015625"/>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e8" source="n10" target="n11">
+ <data key="d8"/>
+ <data key="d9"><![CDATA[UMLinherits]]></data>
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+ <y:LineStyle color="#000000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="white_delta"/>
+ <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="2.0" y="-22.51806640625"/>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ </graph>
+ <data key="d0">
+ <y:Resources/>
+ </data>
+</graphml>
Added: trunk/wikitty-publication/src/site/rapport/image/explicationTag.png
===================================================================
(Binary files differ)
Property changes on: trunk/wikitty-publication/src/site/rapport/image/explicationTag.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: trunk/wikitty-publication/src/site/rapport/image/externalize.graphml
===================================================================
--- trunk/wikitty-publication/src/site/rapport/image/externalize.graphml (rev 0)
+++ trunk/wikitty-publication/src/site/rapport/image/externalize.graphml 2011-08-29 09:11:40 UTC (rev 1194)
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" xmlns:yed="http://www.yworks.com/xml/yed/3" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd">
+ <!--Created by yFiles for Java HEAD-Current-->
+ <key for="graphml" id="d0" yfiles.type="resources"/>
+ <key for="port" id="d1" yfiles.type="portgraphics"/>
+ <key for="port" id="d2" yfiles.type="portgeometry"/>
+ <key for="port" id="d3" yfiles.type="portuserdata"/>
+ <key attr.name="url" attr.type="string" for="node" id="d4"/>
+ <key attr.name="description" attr.type="string" for="node" id="d5"/>
+ <key for="node" id="d6" yfiles.type="nodegraphics"/>
+ <key attr.name="Description" attr.type="string" for="graph" id="d7"/>
+ <key attr.name="url" attr.type="string" for="edge" id="d8"/>
+ <key attr.name="description" attr.type="string" for="edge" id="d9"/>
+ <key for="edge" id="d10" yfiles.type="edgegraphics"/>
+ <graph edgedefault="directed" id="G">
+ <data key="d7"/>
+ <node id="n0">
+ <data key="d5"/>
+ <data key="d6">
+ <y:ShapeNode>
+ <y:Geometry height="60.0" width="58.0" x="105.0" y="203.0"/>
+ <y:Fill color="#FFCC00" transparent="false"/>
+ <y:BorderStyle hasColor="false" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="4.0" x="27.0" y="28.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.962890625" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="87.484375" x="-14.7421875" y="21.0185546875">Wikitty service</y:NodeLabel>
+ <y:Shape type="roundrectangle"/>
+ </y:ShapeNode>
+ </data>
+ </node>
+ <node id="n1">
+ <data key="d5"/>
+ <data key="d6">
+ <y:ShapeNode>
+ <y:Geometry height="60.0" width="58.0" x="262.0" y="203.0"/>
+ <y:Fill color="#FFCC00" transparent="false"/>
+ <y:BorderStyle hasColor="false" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="4.0" x="27.0" y="28.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.962890625" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="111.783203125" x="-26.8916015625" y="21.0185546875">Wikitty Externalize</y:NodeLabel>
+ <y:Shape type="roundrectangle"/>
+ </y:ShapeNode>
+ </data>
+ </node>
+ <node id="n2">
+ <data key="d5"/>
+ <data key="d6">
+ <y:ShapeNode>
+ <y:Geometry height="53.0" width="58.0" x="183.5" y="99.0"/>
+ <y:Fill color="#FFCC00" transparent="false"/>
+ <y:BorderStyle hasColor="false" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="4.0" x="27.0" y="24.5"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.962890625" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="107.58203125" x="-24.791015625" y="17.5185546875">WikittyPublication</y:NodeLabel>
+ <y:Shape type="diamond"/>
+ </y:ShapeNode>
+ </data>
+ </node>
+ <edge id="e0" source="n2" target="n0">
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+ <y:LineStyle color="#000000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="standard"/>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e1" source="n2" target="n1">
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+ <y:LineStyle color="#000000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="standard"/>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ </graph>
+ <data key="d0">
+ <y:Resources/>
+ </data>
+</graphml>
Added: trunk/wikitty-publication/src/site/rapport/image/externalize.png
===================================================================
(Binary files differ)
Property changes on: trunk/wikitty-publication/src/site/rapport/image/externalize.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: trunk/wikitty-publication/src/site/rapport/image/graphDistrib.graphml
===================================================================
--- trunk/wikitty-publication/src/site/rapport/image/graphDistrib.graphml (rev 0)
+++ trunk/wikitty-publication/src/site/rapport/image/graphDistrib.graphml 2011-08-29 09:11:40 UTC (rev 1194)
@@ -0,0 +1,298 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" xmlns:yed="http://www.yworks.com/xml/yed/3" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd">
+ <!--Created by yFiles for Java HEAD-Current-->
+ <key for="graphml" id="d0" yfiles.type="resources"/>
+ <key for="port" id="d1" yfiles.type="portgraphics"/>
+ <key for="port" id="d2" yfiles.type="portgeometry"/>
+ <key for="port" id="d3" yfiles.type="portuserdata"/>
+ <key attr.name="url" attr.type="string" for="node" id="d4"/>
+ <key attr.name="description" attr.type="string" for="node" id="d5"/>
+ <key for="node" id="d6" yfiles.type="nodegraphics"/>
+ <key attr.name="Description" attr.type="string" for="graph" id="d7"/>
+ <key attr.name="url" attr.type="string" for="edge" id="d8"/>
+ <key attr.name="description" attr.type="string" for="edge" id="d9"/>
+ <key for="edge" id="d10" yfiles.type="edgegraphics"/>
+ <graph edgedefault="directed" id="G">
+ <data key="d7"/>
+ <node id="n0">
+ <data key="d6">
+ <y:ShapeNode>
+ <y:Geometry height="118.0" width="127.0" x="54.0" y="-246.11328125"/>
+ <y:Fill color="#FFCC00" transparent="false"/>
+ <y:BorderStyle color="#000000" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="4.0" x="61.5" y="57.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.962890625" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="14.3359375" x="56.33203125" y="50.0185546875">M</y:NodeLabel>
+ <y:Shape type="ellipse"/>
+ </y:ShapeNode>
+ </data>
+ </node>
+ <node id="n1">
+ <data key="d6">
+ <y:ShapeNode>
+ <y:Geometry height="118.0" width="110.0" x="421.26171875" y="-253.9921875"/>
+ <y:Fill color="#FFCC00" transparent="false"/>
+ <y:BorderStyle color="#000000" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="4.0" x="53.0" y="57.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.962890625" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="18.05078125" x="45.974609375" y="50.0185546875">S1</y:NodeLabel>
+ <y:Shape type="ellipse"/>
+ </y:ShapeNode>
+ </data>
+ </node>
+ <node id="n2">
+ <data key="d6">
+ <y:ShapeNode>
+ <y:Geometry height="127.5" width="127.0" x="-182.46484375" y="-80.7734375"/>
+ <y:Fill color="#FFCC00" transparent="false"/>
+ <y:BorderStyle color="#000000" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="4.0" x="61.5" y="61.75"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.962890625" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="18.05078125" x="54.474609375" y="54.7685546875">S2</y:NodeLabel>
+ <y:Shape type="ellipse"/>
+ </y:ShapeNode>
+ </data>
+ </node>
+ <node id="n3">
+ <data key="d6">
+ <y:ShapeNode>
+ <y:Geometry height="118.0" width="110.0" x="610.33984375" y="158.828125"/>
+ <y:Fill color="#FFCC00" transparent="false"/>
+ <y:BorderStyle color="#000000" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="4.0" x="53.0" y="57.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.962890625" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="18.05078125" x="45.974609375" y="50.0185546875">S3</y:NodeLabel>
+ <y:Shape type="ellipse"/>
+ </y:ShapeNode>
+ </data>
+ </node>
+ <node id="n4">
+ <data key="d6">
+ <y:ShapeNode>
+ <y:Geometry height="118.0" width="127.0" x="276.892578125" y="192.81640625"/>
+ <y:Fill color="#FFCC00" transparent="false"/>
+ <y:BorderStyle color="#000000" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="4.0" x="61.5" y="57.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.962890625" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="18.05078125" x="54.474609375" y="50.0185546875">S4</y:NodeLabel>
+ <y:Shape type="ellipse"/>
+ </y:ShapeNode>
+ </data>
+ </node>
+ <node id="n5">
+ <data key="d4"/>
+ <data key="d5"><![CDATA[UMLClass]]></data>
+ <data key="d6">
+ <y:UMLClassNode>
+ <y:Geometry height="87.0" width="83.0" x="54.0" y="-311.11328125"/>
+ <y:Fill color="#FFCC00" transparent="false"/>
+ <y:BorderStyle color="#000000" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.12646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="50.01416015625" x="16.492919921875" y="3.0">wikitty</y:NodeLabel>
+ <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+ <y:AttributeLabel>id: unid
+onwer:
+version:1</y:AttributeLabel>
+ <y:MethodLabel/>
+ </y:UML>
+ </y:UMLClassNode>
+ </data>
+ </node>
+ <node id="n6">
+ <data key="d4"/>
+ <data key="d5"><![CDATA[UMLClass]]></data>
+ <data key="d6">
+ <y:UMLClassNode>
+ <y:Geometry height="87.0" width="83.0" x="495.015625" y="-311.11328125"/>
+ <y:Fill color="#FFCC00" transparent="false"/>
+ <y:BorderStyle color="#000000" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.12646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="50.01416015625" x="16.492919921875" y="3.0">wikitty</y:NodeLabel>
+ <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+ <y:AttributeLabel>id: unid
+onwer: M
+version:1.1</y:AttributeLabel>
+ <y:MethodLabel/>
+ </y:UML>
+ </y:UMLClassNode>
+ </data>
+ </node>
+ <node id="n7">
+ <data key="d4"/>
+ <data key="d5"><![CDATA[UMLClass]]></data>
+ <data key="d6">
+ <y:UMLClassNode>
+ <y:Geometry height="87.0" width="83.0" x="-196.609375" y="-152.09375"/>
+ <y:Fill color="#FFCC00" transparent="false"/>
+ <y:BorderStyle color="#000000" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.12646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="50.01416015625" x="16.492919921875" y="3.0">wikitty</y:NodeLabel>
+ <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+ <y:AttributeLabel>id: unid
+onwer: M
+version:1.1</y:AttributeLabel>
+ <y:MethodLabel/>
+ </y:UML>
+ </y:UMLClassNode>
+ </data>
+ </node>
+ <node id="n8">
+ <data key="d4"/>
+ <data key="d5"><![CDATA[UMLClass]]></data>
+ <data key="d6">
+ <y:UMLClassNode>
+ <y:Geometry height="87.0" width="83.0" x="670.765625" y="109.77734375"/>
+ <y:Fill color="#FFCC00" transparent="false"/>
+ <y:BorderStyle color="#000000" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.12646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="50.01416015625" x="16.492919921875" y="3.0">wikitty</y:NodeLabel>
+ <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+ <y:AttributeLabel>id: unid
+onwer: M,S1
+version:1.1.1</y:AttributeLabel>
+ <y:MethodLabel/>
+ </y:UML>
+ </y:UMLClassNode>
+ </data>
+ </node>
+ <node id="n9">
+ <data key="d4"/>
+ <data key="d5"><![CDATA[UMLClass]]></data>
+ <data key="d6">
+ <y:UMLClassNode>
+ <y:Geometry height="87.0" width="116.75" x="255.419921875" y="135.88671875"/>
+ <y:Fill color="#FFCC00" transparent="false"/>
+ <y:BorderStyle color="#000000" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.12646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="50.01416015625" x="33.367919921875" y="3.0">wikitty</y:NodeLabel>
+ <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+ <y:AttributeLabel>id: unid
+onwer: M,S1,S3
+version:1.1.1.1</y:AttributeLabel>
+ <y:MethodLabel/>
+ </y:UML>
+ </y:UMLClassNode>
+ </data>
+ </node>
+ <node id="n10">
+ <data key="d6">
+ <y:ShapeNode>
+ <y:Geometry height="127.5" width="127.0" x="-21.3828125" y="272.38671875"/>
+ <y:Fill color="#FFCC00" transparent="false"/>
+ <y:BorderStyle color="#000000" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="4.0" x="61.5" y="61.75"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.962890625" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="18.05078125" x="54.474609375" y="54.7685546875">S5</y:NodeLabel>
+ <y:Shape type="ellipse"/>
+ </y:ShapeNode>
+ </data>
+ </node>
+ <node id="n11">
+ <data key="d4"/>
+ <data key="d5"><![CDATA[UMLClass]]></data>
+ <data key="d6">
+ <y:UMLClassNode>
+ <y:Geometry height="87.0" width="83.0" x="-48.171875" y="208.31640625"/>
+ <y:Fill color="#FFCC00" transparent="false"/>
+ <y:BorderStyle color="#000000" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.12646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="50.01416015625" x="16.492919921875" y="3.0">wikitty</y:NodeLabel>
+ <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+ <y:AttributeLabel>id: unid
+onwer: M,S2
+version:1.1.1</y:AttributeLabel>
+ <y:MethodLabel/>
+ </y:UML>
+ </y:UMLClassNode>
+ </data>
+ </node>
+ <node id="n12">
+ <data key="d6">
+ <y:ShapeNode>
+ <y:Geometry height="118.0" width="127.0" x="372.169921875" y="-3.59375"/>
+ <y:Fill color="#FFCC00" transparent="false"/>
+ <y:BorderStyle color="#000000" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="4.0" x="61.5" y="57.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.962890625" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="18.05078125" x="54.474609375" y="50.0185546875">S5</y:NodeLabel>
+ <y:Shape type="ellipse"/>
+ </y:ShapeNode>
+ </data>
+ </node>
+ <node id="n13">
+ <data key="d4"/>
+ <data key="d5"><![CDATA[UMLClass]]></data>
+ <data key="d6">
+ <y:UMLClassNode>
+ <y:Geometry height="87.0" width="116.75" x="350.697265625" y="-60.5234375"/>
+ <y:Fill color="#FFCC00" transparent="false"/>
+ <y:BorderStyle color="#000000" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.12646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="50.01416015625" x="33.367919921875" y="3.0">wikitty</y:NodeLabel>
+ <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+ <y:AttributeLabel>id: unid
+onwer: M,S1,S3
+version:1.1.1.1</y:AttributeLabel>
+ <y:MethodLabel/>
+ </y:UML>
+ </y:UMLClassNode>
+ </data>
+ </node>
+ <edge id="e0" source="n0" target="n1">
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+ <y:LineStyle color="#000000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="standard"/>
+ <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.962890625" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="63.61328125" x="88.34194946289062" y="0.05989406338935055">sync/copy</y:EdgeLabel>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e1" source="n0" target="n2">
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+ <y:LineStyle color="#000000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="standard"/>
+ <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.962890625" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="63.61328125" x="-53.53445575460837" y="39.94609069824219">sync/copy</y:EdgeLabel>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e2" source="n1" target="n3">
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+ <y:LineStyle color="#000000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="standard"/>
+ <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.962890625" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="63.61328125" x="76.39910309518802" y="144.4750518798828">sync/copy</y:EdgeLabel>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e3" source="n3" target="n4">
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+ <y:LineStyle color="#000000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="standard"/>
+ <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.962890625" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="63.61328125" x="-135.28985595703125" y="16.150816265726007">sync/copy</y:EdgeLabel>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e4" source="n2" target="n10">
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+ <y:LineStyle color="#000000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="standard"/>
+ <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.962890625" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="63.61328125" x="60.20013553210231" y="109.63650131225586">sync/copy</y:EdgeLabel>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e5" source="n3" target="n12">
+ <data key="d9"/>
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+ <y:LineStyle color="#000000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="standard"/>
+ <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.962890625" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="63.61328125" x="-49.965587656700905" y="-54.712796626779664">sync/copy</y:EdgeLabel>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ </graph>
+ <data key="d0">
+ <y:Resources/>
+ </data>
+</graphml>
Added: trunk/wikitty-publication/src/site/rapport/image/graphDistrib.png
===================================================================
(Binary files differ)
Property changes on: trunk/wikitty-publication/src/site/rapport/image/graphDistrib.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: trunk/wikitty-publication/src/site/rapport/image/graphestrutstaglib.graphml
===================================================================
--- trunk/wikitty-publication/src/site/rapport/image/graphestrutstaglib.graphml (rev 0)
+++ trunk/wikitty-publication/src/site/rapport/image/graphestrutstaglib.graphml 2011-08-29 09:11:40 UTC (rev 1194)
@@ -0,0 +1,763 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" xmlns:yed="http://www.yworks.com/xml/yed/3" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd">
+ <!--Created by yFiles for Java HEAD-Current-->
+ <key for="graphml" id="d0" yfiles.type="resources"/>
+ <key for="port" id="d1" yfiles.type="portgraphics"/>
+ <key for="port" id="d2" yfiles.type="portgeometry"/>
+ <key for="port" id="d3" yfiles.type="portuserdata"/>
+ <key attr.name="url" attr.type="string" for="node" id="d4"/>
+ <key attr.name="description" attr.type="string" for="node" id="d5"/>
+ <key for="node" id="d6" yfiles.type="nodegraphics"/>
+ <key attr.name="Description" attr.type="string" for="graph" id="d7"/>
+ <key attr.name="url" attr.type="string" for="edge" id="d8"/>
+ <key attr.name="description" attr.type="string" for="edge" id="d9"/>
+ <key for="edge" id="d10" yfiles.type="edgegraphics"/>
+ <graph edgedefault="directed" id="G">
+ <data key="d7"/>
+ <node id="n0">
+ <data key="d5"/>
+ <data key="d6">
+ <y:ShapeNode>
+ <y:Geometry height="30.0" width="124.66666666666669" x="301.16666666666674" y="23.25"/>
+ <y:Fill color="#00FFFF" transparent="false"/>
+ <y:BorderStyle color="#000000" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.962890625" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="88.439453125" x="18.11360677083337" y="6.0185546875">Struts jsp view</y:NodeLabel>
+ <y:Shape type="rectangle"/>
+ </y:ShapeNode>
+ </data>
+ </node>
+ <node id="n1">
+ <data key="d4"/>
+ <data key="d5"><![CDATA[UMLClass]]></data>
+ <data key="d6">
+ <y:UMLClassNode>
+ <y:Geometry height="28.0" width="129.0" x="512.7916666666667" y="449.25"/>
+ <y:Fill color="#FFCC00" transparent="false"/>
+ <y:BorderStyle color="#000000" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.12646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="114.18896484375" x="7.405517578125" y="3.0">Form ou bean Ui</y:NodeLabel>
+ <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+ <y:AttributeLabel/>
+ <y:MethodLabel/>
+ </y:UML>
+ </y:UMLClassNode>
+ </data>
+ </node>
+ <node id="n2">
+ <data key="d4"/>
+ <data key="d5"><![CDATA[UMLClass]]></data>
+ <data key="d6">
+ <y:UMLClassNode>
+ <y:Geometry height="28.0" width="149.0" x="302.50000000000006" y="449.25"/>
+ <y:Fill color="#FFCC00" transparent="false"/>
+ <y:BorderStyle color="#000000" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.12646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="130.267578125" x="9.3662109375" y="3.0">FormTagOu Tag Ui</y:NodeLabel>
+ <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+ <y:AttributeLabel/>
+ <y:MethodLabel/>
+ </y:UML>
+ </y:UMLClassNode>
+ </data>
+ </node>
+ <node id="n3">
+ <data key="d4"/>
+ <data key="d5"><![CDATA[UMLClass]]></data>
+ <data key="d6">
+ <y:UMLClassNode>
+ <y:Geometry height="28.0" width="149.0" x="302.50000000000006" y="366.0"/>
+ <y:Fill color="#FFCC00" transparent="false"/>
+ <y:BorderStyle color="#000000" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.12646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="136.21533203125" x="6.392333984375" y="3.0">AbstractClosingTag</y:NodeLabel>
+ <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+ <y:AttributeLabel/>
+ <y:MethodLabel/>
+ </y:UML>
+ </y:UMLClassNode>
+ </data>
+ </node>
+ <node id="n4">
+ <data key="d4"/>
+ <data key="d5"><![CDATA[UMLClass]]></data>
+ <data key="d6">
+ <y:UMLClassNode>
+ <y:Geometry height="28.0" width="149.00000000000003" x="302.50000000000006" y="292.0"/>
+ <y:Fill color="#FFCC00" transparent="false"/>
+ <y:BorderStyle color="#000000" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.12646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="107.1748046875" x="20.912597656250014" y="3.0">AbastractUiTag</y:NodeLabel>
+ <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+ <y:AttributeLabel/>
+ <y:MethodLabel/>
+ </y:UML>
+ </y:UMLClassNode>
+ </data>
+ </node>
+ <node id="n5">
+ <data key="d4"/>
+ <data key="d5"><![CDATA[UMLClass]]></data>
+ <data key="d6">
+ <y:UMLClassNode>
+ <y:Geometry height="28.0" width="173.0" x="290.50000000000006" y="223.0"/>
+ <y:Fill color="#FFCC00" transparent="false"/>
+ <y:BorderStyle color="#000000" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.12646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="158.908203125" x="7.0458984375" y="3.0">ComponentTagSupport</y:NodeLabel>
+ <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+ <y:AttributeLabel/>
+ <y:MethodLabel/>
+ </y:UML>
+ </y:UMLClassNode>
+ </data>
+ </node>
+ <node id="n6">
+ <data key="d4"/>
+ <data key="d5"><![CDATA[UMLClass]]></data>
+ <data key="d6">
+ <y:UMLClassNode>
+ <y:Geometry height="28.0" width="129.0" x="312.50000000000006" y="156.0"/>
+ <y:Fill color="#FFCC00" transparent="false"/>
+ <y:BorderStyle color="#000000" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.12646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="101.63330078125" x="13.683349609375" y="3.0">StrutsBodyTag</y:NodeLabel>
+ <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+ <y:AttributeLabel/>
+ <y:MethodLabel/>
+ </y:UML>
+ </y:UMLClassNode>
+ </data>
+ </node>
+ <node id="n7">
+ <data key="d4"/>
+ <data key="d5"><![CDATA[UMLClass]]></data>
+ <data key="d6">
+ <y:UMLClassNode>
+ <y:Geometry height="28.0" width="135.16666666666674" x="309.4166666666667" y="98.0"/>
+ <y:Fill color="#FFCC00" transparent="false"/>
+ <y:BorderStyle color="#000000" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.12646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="114.54443359375" x="10.311116536458371" y="3.0">BodyTagSupport</y:NodeLabel>
+ <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+ <y:AttributeLabel/>
+ <y:MethodLabel/>
+ </y:UML>
+ </y:UMLClassNode>
+ </data>
+ </node>
+ <node id="n8">
+ <data key="d4"/>
+ <data key="d5"><![CDATA[UMLClass]]></data>
+ <data key="d6">
+ <y:UMLClassNode>
+ <y:Geometry height="28.0" width="100.0" x="523.0" y="366.0"/>
+ <y:Fill color="#FFCC00" transparent="false"/>
+ <y:BorderStyle color="#000000" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.12646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="100.2685546875" x="-0.13427734375" y="3.0">ClosingUiBean</y:NodeLabel>
+ <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+ <y:AttributeLabel/>
+ <y:MethodLabel/>
+ </y:UML>
+ </y:UMLClassNode>
+ </data>
+ </node>
+ <node id="n9">
+ <data key="d4"/>
+ <data key="d5"><![CDATA[UMLClass]]></data>
+ <data key="d6">
+ <y:UMLClassNode>
+ <y:Geometry height="28.0" width="100.0" x="523.0" y="292.0"/>
+ <y:Fill color="#FFCC00" transparent="false"/>
+ <y:BorderStyle color="#000000" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.12646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="49.78564453125" x="25.107177734375" y="3.0">UiBean</y:NodeLabel>
+ <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+ <y:AttributeLabel/>
+ <y:MethodLabel/>
+ </y:UML>
+ </y:UMLClassNode>
+ </data>
+ </node>
+ <node id="n10">
+ <data key="d4"/>
+ <data key="d5"><![CDATA[UMLClass]]></data>
+ <data key="d6">
+ <y:UMLClassNode>
+ <y:Geometry height="28.0" width="100.0" x="523.0" y="223.0"/>
+ <y:Fill color="#FFCC00" transparent="false"/>
+ <y:BorderStyle color="#000000" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.12646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="81.0478515625" x="9.47607421875" y="3.0">Component</y:NodeLabel>
+ <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+ <y:AttributeLabel/>
+ <y:MethodLabel/>
+ </y:UML>
+ </y:UMLClassNode>
+ </data>
+ </node>
+ <node id="n11">
+ <data key="d5"/>
+ <data key="d6">
+ <y:ShapeNode>
+ <y:Geometry height="30.0" width="160.0" x="503.08333333333337" y="163.0"/>
+ <y:Fill color="#00FFFF" transparent="false"/>
+ <y:BorderStyle color="#000000" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.962890625" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="71.869140625" x="44.0654296875" y="6.0185546875">Component</y:NodeLabel>
+ <y:Shape type="rectangle"/>
+ </y:ShapeNode>
+ </data>
+ </node>
+ <node id="n12">
+ <data key="d4"/>
+ <data key="d5"><![CDATA[UMLNote]]></data>
+ <data key="d6">
+ <y:UMLNoteNode>
+ <y:Geometry height="28.0" width="100.0" x="524.3333333333334" y="10.5"/>
+ <y:Fill hasColor="false" transparent="false"/>
+ <y:BorderStyle hasColor="false" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="31.92578125" modelName="internal" modelPosition="tl" textColor="#000000" visible="true" width="393.47265625" x="4.0" y="4.0">On a une pile d'héritage par implémentation différente d'affichage
+qui encapsule tous un élement de la pile component</y:NodeLabel>
+ </y:UMLNoteNode>
+ </data>
+ </node>
+ <node id="n13">
+ <data key="d4"/>
+ <data key="d5"><![CDATA[UMLNote]]></data>
+ <data key="d6">
+ <y:UMLNoteNode>
+ <y:Geometry height="28.0" width="100.0" x="703.0833333333334" y="458.0"/>
+ <y:Fill hasColor="false" transparent="false"/>
+ <y:BorderStyle hasColor="false" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="31.92578125" modelName="internal" modelPosition="tl" textColor="#000000" visible="true" width="276.73046875" x="4.0" y="4.0">Porteur de l'annotation qui le désigne comme !
+élément de la tag lib tld tout ça</y:NodeLabel>
+ </y:UMLNoteNode>
+ </data>
+ </node>
+ <node id="n14">
+ <data key="d4"/>
+ <data key="d5"><![CDATA[UMLNote]]></data>
+ <data key="d6">
+ <y:UMLNoteNode>
+ <y:Geometry height="28.0" width="100.0" x="53.08333333333337" y="485.5"/>
+ <y:Fill hasColor="false" transparent="false"/>
+ <y:BorderStyle hasColor="false" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="45.888671875" modelName="internal" modelPosition="br" textColor="#000000" visible="true" width="223.884765625" x="-127.884765625" y="-21.888671875">Finalement simple encapsulation
+des éléments du form, sorte de proxy
+avec des accesseurs</y:NodeLabel>
+ </y:UMLNoteNode>
+ </data>
+ </node>
+ <node id="n15">
+ <data key="d4"/>
+ <data key="d5"><![CDATA[UMLNote]]></data>
+ <data key="d6">
+ <y:UMLNoteNode>
+ <y:Geometry height="28.0" width="100.0" x="503.08333333333337" y="578.75"/>
+ <y:Fill hasColor="false" transparent="false"/>
+ <y:BorderStyle hasColor="false" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="31.92578125" modelName="internal" modelPosition="b" textColor="#000000" visible="true" width="348.888671875" x="-124.4443359375" y="-7.92578125">Dans le form on désigne les template utilisé pour ouvrir
+et ceux pour fermer, ensuite tout est écrit dans le template</y:NodeLabel>
+ </y:UMLNoteNode>
+ </data>
+ </node>
+ <node id="n16">
+ <data key="d4"/>
+ <data key="d5"><![CDATA[UMLNote]]></data>
+ <data key="d6">
+ <y:UMLNoteNode>
+ <y:Geometry height="28.0" width="100.0" x="95.1666666666668" y="-8.0"/>
+ <y:Fill hasColor="false" transparent="false"/>
+ <y:BorderStyle hasColor="false" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.962890625" modelName="internal" modelPosition="b" textColor="#000000" visible="true" width="88.099609375" x="5.9501953125" y="6.037109375">Base Tag class</y:NodeLabel>
+ </y:UMLNoteNode>
+ </data>
+ </node>
+ <node id="n17">
+ <data key="d4"/>
+ <data key="d5"><![CDATA[UMLNote]]></data>
+ <data key="d6">
+ <y:UMLNoteNode>
+ <y:Geometry height="28.0" width="100.0" x="17.833333333333485" y="300.75"/>
+ <y:Fill hasColor="false" transparent="false"/>
+ <y:BorderStyle hasColor="false" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="59.8515625" modelName="internal" modelPosition="r" textColor="#000000" visible="true" width="231.54296875" x="-135.54296875" y="-15.92578125">Lui il a tout les param générique
+des composants html (id, name toutça)
+il gère aussi les dynamique attribute
+il ne fait rien d'autre</y:NodeLabel>
+ </y:UMLNoteNode>
+ </data>
+ </node>
+ <node id="n18">
+ <data key="d4"/>
+ <data key="d5"><![CDATA[UMLNote]]></data>
+ <data key="d6">
+ <y:UMLNoteNode>
+ <y:Geometry height="28.0" width="100.0" x="31.666666666666856" y="366.0"/>
+ <y:Fill hasColor="false" transparent="false"/>
+ <y:BorderStyle hasColor="false" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="31.92578125" modelName="internal" modelPosition="tr" textColor="#000000" visible="true" width="259.52734375" x="-163.52734375" y="4.0">Lui contient des éléments pour les template
+genre les truc pour les open template</y:NodeLabel>
+ </y:UMLNoteNode>
+ </data>
+ </node>
+ <node id="n19">
+ <data key="d4"/>
+ <data key="d5"><![CDATA[UMLNote]]></data>
+ <data key="d6">
+ <y:UMLNoteNode>
+ <y:Geometry height="28.0" width="100.0" x="783.0000000000002" y="366.0"/>
+ <y:Fill hasColor="false" transparent="false"/>
+ <y:BorderStyle hasColor="false" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="31.92578125" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="198.279296875" x="-49.1396484375" y="-1.962890625">s'occupe des merges de template
+et d'opération sur les templates</y:NodeLabel>
+ </y:UMLNoteNode>
+ </data>
+ </node>
+ <node id="n20">
+ <data key="d4"/>
+ <data key="d5"><![CDATA[UMLNote]]></data>
+ <data key="d6">
+ <y:UMLNoteNode>
+ <y:Geometry height="28.0" width="100.0" x="734.3333333333336" y="292.0"/>
+ <y:Fill hasColor="false" transparent="false"/>
+ <y:BorderStyle hasColor="false" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="45.888671875" modelName="internal" modelPosition="l" textColor="#000000" visible="true" width="264.982421875" x="4.0" y="-8.9443359375">embarque tous les éléments générique
+et embarque de la logique lié à la génération
+du code html en fonction</y:NodeLabel>
+ </y:UMLNoteNode>
+ </data>
+ </node>
+ <node id="n21">
+ <data key="d4"/>
+ <data key="d5"><![CDATA[UMLNote]]></data>
+ <data key="d6">
+ <y:UMLNoteNode>
+ <y:Geometry height="28.0" width="100.0" x="769.3219401041673" y="206.4501953125"/>
+ <y:Fill hasColor="false" transparent="false"/>
+ <y:BorderStyle hasColor="false" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.962890625" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="118.9609375" x="-9.48046875" y="5.0185546875">basique component</y:NodeLabel>
+ </y:UMLNoteNode>
+ </data>
+ </node>
+ <node id="n22">
+ <data key="d4"/>
+ <data key="d5"><![CDATA[UMLNote]]></data>
+ <data key="d6">
+ <y:UMLNoteNode>
+ <y:Geometry height="28.0" width="100.0" x="62.666666666666856" y="80.400390625"/>
+ <y:Fill hasColor="false" transparent="false"/>
+ <y:BorderStyle hasColor="false" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.962890625" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="216.185546875" x="-58.0927734375" y="5.0185546875">élément commun pour les struts tag</y:NodeLabel>
+ </y:UMLNoteNode>
+ </data>
+ </node>
+ <node id="n23">
+ <data key="d4"/>
+ <data key="d5"><![CDATA[UMLNote]]></data>
+ <data key="d6">
+ <y:UMLNoteNode>
+ <y:Geometry height="28.0" width="100.0" x="53.08333333333337" y="156.0"/>
+ <y:Fill hasColor="false" transparent="false"/>
+ <y:BorderStyle hasColor="false" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="45.888671875" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="259.046875" x="-79.5234375" y="-8.9443359375">lui écrit réélement le tag dans la page
+en se servant de l'héritage, des composants
+etc etc, mais lui qui fait la méthode dotag</y:NodeLabel>
+ </y:UMLNoteNode>
+ </data>
+ </node>
+ <node id="n24">
+ <data key="d4"/>
+ <data key="d5"><![CDATA[UMLNote]]></data>
+ <data key="d6">
+ <y:UMLNoteNode>
+ <y:Geometry height="28.0" width="100.0" x="831.5377604166684" y="533.0"/>
+ <y:Fill hasColor="false" transparent="false"/>
+ <y:BorderStyle hasColor="false" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="31.92578125" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="233.25390625" x="-66.626953125" y="-1.962890625">ça n'exclut pas de devoir déclarer dans
+la tld TLD qui désigne la class FormTag</y:NodeLabel>
+ </y:UMLNoteNode>
+ </data>
+ </node>
+ <node id="n25">
+ <data key="d4"/>
+ <data key="d5"><![CDATA[UMLClass]]></data>
+ <data key="d6">
+ <y:UMLClassNode>
+ <y:Geometry height="28.0" width="217.1875" x="51.729166666666856" y="705.9166666666667"/>
+ <y:Fill color="#FFCC00" transparent="false"/>
+ <y:BorderStyle color="#000000" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.12646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="199.837890625" x="8.6748046875" y="3.0">ClassComportementCommeIf</y:NodeLabel>
+ <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+ <y:AttributeLabel/>
+ <y:MethodLabel/>
+ </y:UML>
+ </y:UMLClassNode>
+ </data>
+ </node>
+ <node id="n26">
+ <data key="d4"/>
+ <data key="d5"><![CDATA[UMLNote]]></data>
+ <data key="d6">
+ <y:UMLNoteNode>
+ <y:Geometry height="28.0" width="100.0" x="-38.72363281249784" y="690.2509765625"/>
+ <y:Fill hasColor="false" transparent="false"/>
+ <y:BorderStyle hasColor="false" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="45.888671875" modelName="internal" modelPosition="br" textColor="#000000" visible="true" width="254.634765625" x="-158.634765625" y="-21.888671875">comme pour le formTag simple surcouche
+qui encapsule un bean et expose des
+accesseur</y:NodeLabel>
+ </y:UMLNoteNode>
+ </data>
+ </node>
+ <node id="n27">
+ <data key="d4"/>
+ <data key="d5"><![CDATA[UMLClass]]></data>
+ <data key="d6">
+ <y:UMLClassNode>
+ <y:Geometry height="99.25" width="217.1875" x="673.7763671875022" y="634.6666666666667"/>
+ <y:Fill color="#FFCC00" transparent="false"/>
+ <y:BorderStyle color="#000000" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.12646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="171.73046875" x="22.728515625" y="3.0">ClassComportementBean</y:NodeLabel>
+ <y:UML clipContent="false" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+ <y:AttributeLabel>+toto</y:AttributeLabel>
+ <y:MethodLabel>+bob()
+</y:MethodLabel>
+ </y:UML>
+ </y:UMLClassNode>
+ </data>
+ </node>
+ <edge id="e0" source="n1" target="n2">
+ <data key="d8"/>
+ <data key="d9"><![CDATA[UMLhas]]></data>
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+ <y:LineStyle color="#000000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="diamond"/>
+ <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="-32.64762369791663" y="2.0"/>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e1" source="n2" target="n3">
+ <data key="d8"/>
+ <data key="d9"><![CDATA[UMLinherits]]></data>
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+ <y:LineStyle color="#000000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="white_delta"/>
+ <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="2.000000000000057" y="-29.6009521484375"/>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e2" source="n3" target="n4">
+ <data key="d8"/>
+ <data key="d9"><![CDATA[UMLinherits]]></data>
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+ <y:LineStyle color="#000000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="white_delta"/>
+ <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="2.000000000000057" y="-25.0166015625"/>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e3" source="n4" target="n5">
+ <data key="d8"/>
+ <data key="d9"><![CDATA[UMLinherits]]></data>
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+ <y:LineStyle color="#000000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="white_delta"/>
+ <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="2.000000000000057" y="-22.51806640625"/>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e4" source="n5" target="n6">
+ <data key="d8"/>
+ <data key="d9"><![CDATA[UMLinherits]]></data>
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+ <y:LineStyle color="#000000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="white_delta"/>
+ <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="2.000000000000057" y="-21.53076171875"/>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e5" source="n6" target="n7">
+ <data key="d8"/>
+ <data key="d9"><![CDATA[UMLinherits]]></data>
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+ <y:LineStyle color="#000000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="white_delta"/>
+ <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="2.000000000000057" y="-16.9814453125"/>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e6" source="n1" target="n8">
+ <data key="d8"/>
+ <data key="d9"><![CDATA[UMLinherits]]></data>
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+ <y:LineStyle color="#000000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="white_delta"/>
+ <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="0.6802108504989519" y="-29.6009521484375"/>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e7" source="n8" target="n9">
+ <data key="d8"/>
+ <data key="d9"><![CDATA[UMLinherits]]></data>
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+ <y:LineStyle color="#000000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="white_delta"/>
+ <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="2.0" y="-25.0166015625"/>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e8" source="n9" target="n10">
+ <data key="d8"/>
+ <data key="d9"><![CDATA[UMLinherits]]></data>
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+ <y:LineStyle color="#000000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="white_delta"/>
+ <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="2.0" y="-22.51806640625"/>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e9" source="n12" target="n0">
+ <data key="d8"/>
+ <data key="d9"><![CDATA[UMLinherits]]></data>
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
+ <y:Point x="454.33333333333337" y="-4.25"/>
+ </y:Path>
+ <y:LineStyle color="#000000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="white_delta"/>
+ <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="-41.55271402994788" y="-6.99700927734375"/>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e10" source="n13" target="n1">
+ <data key="d8"/>
+ <data key="d9"><![CDATA[UMLinherits]]></data>
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+ <y:LineStyle color="#000000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="white_delta"/>
+ <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="-32.646484375" y="0.5741256565582944"/>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e11" source="n14" target="n2">
+ <data key="d8"/>
+ <data key="d9"><![CDATA[UMLinherits]]></data>
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+ <y:LineStyle color="#000000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="white_delta"/>
+ <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="72.71987406412765" y="-7.6237138516640925"/>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e12" source="n17" target="n4">
+ <data key="d8"/>
+ <data key="d9"><![CDATA[UMLinherits]]></data>
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+ <y:LineStyle color="#000000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="white_delta"/>
+ <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="90.32773844401052" y="-0.5564454276606625"/>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e13" source="n16" target="n7">
+ <data key="d8"/>
+ <data key="d9"><![CDATA[UMLinherits]]></data>
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+ <y:LineStyle color="#000000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="white_delta"/>
+ <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="83.32440694173187" y="41.926901207820364"/>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e14" source="n18" target="n3">
+ <data key="d8"/>
+ <data key="d9"><![CDATA[UMLinherits]]></data>
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+ <y:LineStyle color="#000000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="white_delta"/>
+ <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="83.41333516438814" y="2.0"/>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e15" source="n19" target="n8">
+ <data key="d8"/>
+ <data key="d9"><![CDATA[UMLinherits]]></data>
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+ <y:LineStyle color="#000000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="white_delta"/>
+ <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="-82.01220703124989" y="2.0"/>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e16" source="n20" target="n9">
+ <data key="d8"/>
+ <data key="d9"><![CDATA[UMLinherits]]></data>
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+ <y:LineStyle color="#000000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="white_delta"/>
+ <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="-57.64528401692701" y="2.0"/>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e17" source="n21" target="n10">
+ <data key="d8"/>
+ <data key="d9"><![CDATA[UMLinherits]]></data>
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+ <y:LineStyle color="#000000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="white_delta"/>
+ <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="-75.15690104166629" y="7.049612827345385"/>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e18" source="n22" target="n6">
+ <data key="d8"/>
+ <data key="d9"><![CDATA[UMLinherits]]></data>
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+ <y:LineStyle color="#000000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="white_delta"/>
+ <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="73.96724446614596" y="24.298711192262118"/>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e19" source="n23" target="n5">
+ <data key="d8"/>
+ <data key="d9"><![CDATA[UMLinherits]]></data>
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+ <y:LineStyle color="#000000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="white_delta"/>
+ <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="67.26130752183909" y="19.430512727993317"/>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e20" source="n24" target="n13">
+ <data key="d8"/>
+ <data key="d9"><![CDATA[UMLinherits]]></data>
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+ <y:LineStyle color="#000000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="white_delta"/>
+ <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="-42.23608398437409" y="-20.32470232676735"/>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e21" source="n15" target="n1">
+ <data key="d8"/>
+ <data key="d9"><![CDATA[UMLinherits]]></data>
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+ <y:LineStyle color="#000000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="white_delta"/>
+ <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="11.85977475278014" y="-52.7440185546875"/>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e22" source="n25" target="n5">
+ <data key="d8"/>
+ <data key="d9"><![CDATA[UMLinherits]]></data>
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+ <y:LineStyle color="#000000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="white_delta"/>
+ <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="104.95407516747201" y="-229.45774332682288"/>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e23" source="n26" target="n25">
+ <data key="d8"/>
+ <data key="d9"><![CDATA[UMLinherits]]></data>
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+ <y:LineStyle color="#000000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="white_delta"/>
+ <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="43.22639973958451" y="6.9637790719818895"/>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e24" source="n27" target="n25">
+ <data key="d8"/>
+ <data key="d9"><![CDATA[UMLhas]]></data>
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+ <y:LineStyle color="#000000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="diamond"/>
+ <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="-204.40073649088424" y="13.706134571743178"/>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e25" source="n27" target="n10">
+ <data key="d8"/>
+ <data key="d9"><![CDATA[UMLinherits]]></data>
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+ <y:LineStyle color="#000000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="white_delta"/>
+ <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="-86.86727807196348" y="-193.85331217447913"/>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ </graph>
+ <data key="d0">
+ <y:Resources/>
+ </data>
+</graphml>
Added: trunk/wikitty-publication/src/site/rapport/image/howtoopen graphml.txt
===================================================================
--- trunk/wikitty-publication/src/site/rapport/image/howtoopen graphml.txt (rev 0)
+++ trunk/wikitty-publication/src/site/rapport/image/howtoopen graphml.txt 2011-08-29 09:11:40 UTC (rev 1194)
@@ -0,0 +1,3 @@
+Simply use yed aviable at:
+
+http://www.yworks.com/en/products_yed_about.html
Added: trunk/wikitty-publication/src/site/rapport/image/logofac.png
===================================================================
(Binary files differ)
Property changes on: trunk/wikitty-publication/src/site/rapport/image/logofac.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: trunk/wikitty-publication/src/site/rapport/image/logolutin.png
===================================================================
(Binary files differ)
Property changes on: trunk/wikitty-publication/src/site/rapport/image/logolutin.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: trunk/wikitty-publication/src/site/rapport/image/multicontext.graphml
===================================================================
--- trunk/wikitty-publication/src/site/rapport/image/multicontext.graphml (rev 0)
+++ trunk/wikitty-publication/src/site/rapport/image/multicontext.graphml 2011-08-29 09:11:40 UTC (rev 1194)
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" xmlns:yed="http://www.yworks.com/xml/yed/3" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd">
+ <!--Created by yFiles for Java HEAD-Current-->
+ <key for="graphml" id="d0" yfiles.type="resources"/>
+ <key for="port" id="d1" yfiles.type="portgraphics"/>
+ <key for="port" id="d2" yfiles.type="portgeometry"/>
+ <key for="port" id="d3" yfiles.type="portuserdata"/>
+ <key attr.name="url" attr.type="string" for="node" id="d4"/>
+ <key attr.name="description" attr.type="string" for="node" id="d5"/>
+ <key for="node" id="d6" yfiles.type="nodegraphics"/>
+ <key attr.name="Description" attr.type="string" for="graph" id="d7"/>
+ <key attr.name="url" attr.type="string" for="edge" id="d8"/>
+ <key attr.name="description" attr.type="string" for="edge" id="d9"/>
+ <key for="edge" id="d10" yfiles.type="edgegraphics"/>
+ <graph edgedefault="directed" id="G">
+ <data key="d7"/>
+ <node id="n0">
+ <data key="d4"/>
+ <data key="d5"><![CDATA[UMLClass]]></data>
+ <data key="d6">
+ <y:UMLClassNode>
+ <y:Geometry height="28.0" width="106.0" x="460.0" y="94.0"/>
+ <y:Fill color="#FFCC00" transparent="false"/>
+ <y:BorderStyle color="#000000" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.12646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="97.97705078125" x="4.011474609375" y="3.0">WikittyService</y:NodeLabel>
+ <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+ <y:AttributeLabel/>
+ <y:MethodLabel/>
+ </y:UML>
+ </y:UMLClassNode>
+ </data>
+ </node>
+ <node id="n1">
+ <data key="d4"/>
+ <data key="d5"><![CDATA[UMLClass]]></data>
+ <data key="d6">
+ <y:UMLClassNode>
+ <y:Geometry height="28.0" width="100.0" x="352.0" y="193.0"/>
+ <y:Fill color="#FFCC00" transparent="false"/>
+ <y:BorderStyle color="#000000" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.12646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="83.6376953125" x="8.18115234375" y="3.0">MainService</y:NodeLabel>
+ <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+ <y:AttributeLabel/>
+ <y:MethodLabel/>
+ </y:UML>
+ </y:UMLClassNode>
+ </data>
+ </node>
+ <node id="n2">
+ <data key="d4"/>
+ <data key="d5"><![CDATA[UMLClass]]></data>
+ <data key="d6">
+ <y:UMLClassNode>
+ <y:Geometry height="28.0" width="131.0" x="568.0" y="193.0"/>
+ <y:Fill color="#FFCC00" transparent="false"/>
+ <y:BorderStyle color="#000000" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.12646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="106.39404296875" x="12.302978515625" y="3.0">FallbackService</y:NodeLabel>
+ <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+ <y:AttributeLabel/>
+ <y:MethodLabel/>
+ </y:UML>
+ </y:UMLClassNode>
+ </data>
+ </node>
+ <edge id="e0" source="n2" target="n0">
+ <data key="d8"/>
+ <data key="d9"><![CDATA[UMLhas]]></data>
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+ <y:LineStyle color="#000000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="diamond"/>
+ <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="-45.2164306640625" y="-31.862461707404037"/>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e1" source="n1" target="n0">
+ <data key="d8"/>
+ <data key="d9"><![CDATA[UMLhas]]></data>
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+ <y:LineStyle color="#000000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="diamond"/>
+ <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="37.809326171875" y="-31.721831450591225"/>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ </graph>
+ <data key="d0">
+ <y:Resources/>
+ </data>
+</graphml>
Added: trunk/wikitty-publication/src/site/rapport/image/multicontext.png
===================================================================
(Binary files differ)
Property changes on: trunk/wikitty-publication/src/site/rapport/image/multicontext.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: trunk/wikitty-publication/src/site/rapport/image/pileService.graphml
===================================================================
--- trunk/wikitty-publication/src/site/rapport/image/pileService.graphml (rev 0)
+++ trunk/wikitty-publication/src/site/rapport/image/pileService.graphml 2011-08-29 09:11:40 UTC (rev 1194)
@@ -0,0 +1,167 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" xmlns:yed="http://www.yworks.com/xml/yed/3" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd">
+ <!--Created by yFiles for Java HEAD-Current-->
+ <key for="graphml" id="d0" yfiles.type="resources"/>
+ <key for="port" id="d1" yfiles.type="portgraphics"/>
+ <key for="port" id="d2" yfiles.type="portgeometry"/>
+ <key for="port" id="d3" yfiles.type="portuserdata"/>
+ <key attr.name="url" attr.type="string" for="node" id="d4"/>
+ <key attr.name="description" attr.type="string" for="node" id="d5"/>
+ <key for="node" id="d6" yfiles.type="nodegraphics"/>
+ <key attr.name="Description" attr.type="string" for="graph" id="d7"/>
+ <key attr.name="url" attr.type="string" for="edge" id="d8"/>
+ <key attr.name="description" attr.type="string" for="edge" id="d9"/>
+ <key for="edge" id="d10" yfiles.type="edgegraphics"/>
+ <graph edgedefault="directed" id="G">
+ <data key="d7"/>
+ <node id="n0">
+ <data key="d4"/>
+ <data key="d5"><![CDATA[UMLClass]]></data>
+ <data key="d6">
+ <y:UMLClassNode>
+ <y:Geometry height="28.0" width="182.0" x="302.0" y="245.0"/>
+ <y:Fill color="#FF0000" color2="#808000" transparent="false"/>
+ <y:BorderStyle color="#000000" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.12646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="151.46240234375" x="15.268798828125" y="3.0">WikittyServiceSecurity</y:NodeLabel>
+ <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+ <y:AttributeLabel/>
+ <y:MethodLabel/>
+ </y:UML>
+ </y:UMLClassNode>
+ </data>
+ </node>
+ <node id="n1">
+ <data key="d4"/>
+ <data key="d5"><![CDATA[UMLClass]]></data>
+ <data key="d6">
+ <y:UMLClassNode>
+ <y:Geometry height="28.0" width="182.0" x="302.0" y="273.0"/>
+ <y:Fill color="#339966" transparent="false"/>
+ <y:BorderStyle color="#000000" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.12646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="146.568359375" x="17.7158203125" y="3.0">WikittyServiceCached</y:NodeLabel>
+ <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+ <y:AttributeLabel/>
+ <y:MethodLabel/>
+ </y:UML>
+ </y:UMLClassNode>
+ </data>
+ </node>
+ <node id="n2">
+ <data key="d4"/>
+ <data key="d5"><![CDATA[UMLClass]]></data>
+ <data key="d6">
+ <y:UMLClassNode>
+ <y:Geometry height="28.0" width="182.0" x="302.0" y="301.0"/>
+ <y:Fill color="#008080" transparent="false"/>
+ <y:BorderStyle color="#000000" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.12646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="148.91064453125" x="16.544677734375" y="3.0">WikittyServiceNotifier</y:NodeLabel>
+ <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+ <y:AttributeLabel/>
+ <y:MethodLabel/>
+ </y:UML>
+ </y:UMLClassNode>
+ </data>
+ </node>
+ <node id="n3">
+ <data key="d4"/>
+ <data key="d5"><![CDATA[UMLClass]]></data>
+ <data key="d6">
+ <y:UMLClassNode>
+ <y:Geometry height="28.0" width="182.0" x="302.0" y="329.0"/>
+ <y:Fill color="#3366FF" transparent="false"/>
+ <y:BorderStyle color="#000000" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.12646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="148.72021484375" x="16.639892578125" y="3.0">WikittyServiceStorage</y:NodeLabel>
+ <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+ <y:AttributeLabel/>
+ <y:MethodLabel/>
+ </y:UML>
+ </y:UMLClassNode>
+ </data>
+ </node>
+ <node id="n4">
+ <data key="d4"/>
+ <data key="d5"><![CDATA[UMLClass]]></data>
+ <data key="d6">
+ <y:UMLClassNode>
+ <y:Geometry height="28.0" width="182.0" x="302.0" y="217.0"/>
+ <y:Fill color="#CCFFFF" transparent="false"/>
+ <y:BorderStyle color="#000000" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.12646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="169.31201171875" x="6.343994140625" y="3.0">WikittyServiceAccessStat</y:NodeLabel>
+ <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+ <y:AttributeLabel/>
+ <y:MethodLabel/>
+ </y:UML>
+ </y:UMLClassNode>
+ </data>
+ </node>
+ <node id="n5">
+ <data key="d4"/>
+ <data key="d5"><![CDATA[UMLClass]]></data>
+ <data key="d6">
+ <y:UMLClassNode>
+ <y:Geometry height="28.0" width="152.0" x="165.0" y="132.0"/>
+ <y:Fill color="#FFCC00" transparent="false"/>
+ <y:BorderStyle color="#000000" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.12646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="124.19287109375" x="13.903564453125" y="3.0">Classe Utilisatrice</y:NodeLabel>
+ <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+ <y:AttributeLabel/>
+ <y:MethodLabel/>
+ </y:UML>
+ </y:UMLClassNode>
+ </data>
+ </node>
+ <node id="n6">
+ <data key="d5"/>
+ <data key="d6">
+ <y:ShapeNode>
+ <y:Geometry height="30.0" width="30.0" x="500.0" y="187.0"/>
+ <y:Fill hasColor="false" transparent="false"/>
+ <y:BorderStyle hasColor="false" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="4.0" x="13.0" y="13.0"/>
+ <y:Shape type="rectangle"/>
+ </y:ShapeNode>
+ </data>
+ </node>
+ <node id="n7">
+ <data key="d5"/>
+ <data key="d6">
+ <y:ShapeNode>
+ <y:Geometry height="30.0" width="30.0" x="500.0" y="365.0"/>
+ <y:Fill hasColor="false" transparent="false"/>
+ <y:BorderStyle hasColor="false" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="4.0" x="13.0" y="13.0"/>
+ <y:Shape type="rectangle"/>
+ </y:ShapeNode>
+ </data>
+ </node>
+ <edge id="e0" source="n5" target="n4">
+ <data key="d9"/>
+ <data key="d10">
+ <y:ArcEdge>
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
+ <y:Point x="338.0678405761719" y="150.8257598876953"/>
+ </y:Path>
+ <y:LineStyle color="#000000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="white_delta"/>
+ <y:Arc height="43.164817810058594" ratio="0.9914273023605347" type="fixedRatio"/>
+ </y:ArcEdge>
+ </data>
+ </edge>
+ <edge id="e1" source="n6" target="n7">
+ <data key="d8"/>
+ <data key="d9"><![CDATA[UMLimplements]]></data>
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+ <y:LineStyle color="#000000" type="dashed" width="1.0"/>
+ <y:Arrows source="none" target="white_delta"/>
+ <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.962890625" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="74.16015625" x="2.0" y="65.0185546875">Déléguation</y:EdgeLabel>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ </graph>
+ <data key="d0">
+ <y:Resources/>
+ </data>
+</graphml>
Added: trunk/wikitty-publication/src/site/rapport/image/pileService.png
===================================================================
(Binary files differ)
Property changes on: trunk/wikitty-publication/src/site/rapport/image/pileService.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: trunk/wikitty-publication/src/site/rapport/image/propertiescontext.graphml
===================================================================
--- trunk/wikitty-publication/src/site/rapport/image/propertiescontext.graphml (rev 0)
+++ trunk/wikitty-publication/src/site/rapport/image/propertiescontext.graphml 2011-08-29 09:11:40 UTC (rev 1194)
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" xmlns:yed="http://www.yworks.com/xml/yed/3" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd">
+ <!--Created by yFiles for Java HEAD-Current-->
+ <key for="graphml" id="d0" yfiles.type="resources"/>
+ <key for="port" id="d1" yfiles.type="portgraphics"/>
+ <key for="port" id="d2" yfiles.type="portgeometry"/>
+ <key for="port" id="d3" yfiles.type="portuserdata"/>
+ <key attr.name="url" attr.type="string" for="node" id="d4"/>
+ <key attr.name="description" attr.type="string" for="node" id="d5"/>
+ <key for="node" id="d6" yfiles.type="nodegraphics"/>
+ <key attr.name="Description" attr.type="string" for="graph" id="d7"/>
+ <key attr.name="url" attr.type="string" for="edge" id="d8"/>
+ <key attr.name="description" attr.type="string" for="edge" id="d9"/>
+ <key for="edge" id="d10" yfiles.type="edgegraphics"/>
+ <graph edgedefault="directed" id="G">
+ <data key="d7"/>
+ <node id="n0">
+ <data key="d4"/>
+ <data key="d5"><![CDATA[UMLClass]]></data>
+ <data key="d6">
+ <y:UMLClassNode>
+ <y:Geometry height="28.0" width="132.0" x="364.0" y="139.0"/>
+ <y:Fill color="#339966" transparent="false"/>
+ <y:BorderStyle color="#000000" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.12646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="121.78076171875" x="5.109619140625" y="3.0">DefaultProperties</y:NodeLabel>
+ <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+ <y:AttributeLabel/>
+ <y:MethodLabel/>
+ </y:UML>
+ </y:UMLClassNode>
+ </data>
+ </node>
+ <node id="n1">
+ <data key="d4"/>
+ <data key="d5"><![CDATA[UMLClass]]></data>
+ <data key="d6">
+ <y:UMLClassNode>
+ <y:Geometry height="28.0" width="142.0" x="496.0" y="191.0"/>
+ <y:Fill color="#FF9900" transparent="false"/>
+ <y:BorderStyle color="#000000" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.12646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="127.75390625" x="7.123046875" y="3.0">FallbackProperties</y:NodeLabel>
+ <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+ <y:AttributeLabel/>
+ <y:MethodLabel/>
+ </y:UML>
+ </y:UMLClassNode>
+ </data>
+ </node>
+ <node id="n2">
+ <data key="d4"/>
+ <data key="d5"><![CDATA[UMLClass]]></data>
+ <data key="d6">
+ <y:UMLClassNode>
+ <y:Geometry height="28.0" width="100.0" x="380.0" y="249.0"/>
+ <y:Fill color="#FFCC99" transparent="false"/>
+ <y:BorderStyle color="#000000" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.12646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="84.45654296875" x="7.771728515625" y="3.0">contextData</y:NodeLabel>
+ <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+ <y:AttributeLabel/>
+ <y:MethodLabel/>
+ </y:UML>
+ </y:UMLClassNode>
+ </data>
+ </node>
+ <edge id="e0" source="n1" target="n0">
+ <data key="d8"/>
+ <data key="d9"><![CDATA[UMLhas]]></data>
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+ <y:LineStyle color="#000000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="diamond"/>
+ <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="-33.607666015625" y="-9.237946224908768"/>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e1" source="n2" target="n0">
+ <data key="d8"/>
+ <data key="d9"><![CDATA[UMLinherits]]></data>
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+ <y:LineStyle color="#000000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="white_delta"/>
+ <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="2.0" y="-43.00830078125"/>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ </graph>
+ <data key="d0">
+ <y:Resources/>
+ </data>
+</graphml>
Added: trunk/wikitty-publication/src/site/rapport/image/propertiescontext.png
===================================================================
(Binary files differ)
Property changes on: trunk/wikitty-publication/src/site/rapport/image/propertiescontext.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: trunk/wikitty-publication/src/site/rapport/image/schema_wikitty_architecture.svg
===================================================================
--- trunk/wikitty-publication/src/site/rapport/image/schema_wikitty_architecture.svg (rev 0)
+++ trunk/wikitty-publication/src/site/rapport/image/schema_wikitty_architecture.svg 2011-08-29 09:11:40 UTC (rev 1194)
@@ -0,0 +1,381 @@
+<?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://creativecommons.org/ns#"
+ 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://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="378.56122"
+ height="244.17543"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.47 r22583"
+ sodipodi:docname="schema_wikitty_architecture.svg"
+ inkscape:export-filename="/home/bleny/Bureau/schema_wikitty_architecture_technos.png"
+ inkscape:export-xdpi="281.88724"
+ inkscape:export-ydpi="281.88724">
+ <defs
+ id="defs4">
+ <linearGradient
+ id="linearGradient4075">
+ <stop
+ style="stop-color:#12ebe7;stop-opacity:0.57647061;"
+ offset="0"
+ id="stop4077" />
+ <stop
+ style="stop-color:#12ebe7;stop-opacity:0.08627451;"
+ offset="1"
+ id="stop4079" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4069">
+ <stop
+ id="stop4071"
+ offset="0"
+ style="stop-color:#3eb43e;stop-opacity:0.57647061;" />
+ <stop
+ id="stop4073"
+ offset="1"
+ style="stop-color:#3eb43e;stop-opacity:0.08627451;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3946">
+ <stop
+ id="stop3948"
+ offset="0"
+ style="stop-color:#fdff2e;stop-opacity:0.57647061;" />
+ <stop
+ id="stop3950"
+ offset="1"
+ style="stop-color:#fdff2e;stop-opacity:0.08627451;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3940">
+ <stop
+ id="stop3942"
+ offset="0"
+ style="stop-color:#c154e7;stop-opacity:0.57647061;" />
+ <stop
+ id="stop3944"
+ offset="1"
+ style="stop-color:#c154e7;stop-opacity:0.08627451;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3934">
+ <stop
+ id="stop3936"
+ offset="0"
+ style="stop-color:#ef595e;stop-opacity:0.57647061;" />
+ <stop
+ id="stop3938"
+ offset="1"
+ style="stop-color:#ef595e;stop-opacity:0.08627451;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3594">
+ <stop
+ style="stop-color:#668ad3;stop-opacity:0.57480317;"
+ offset="0"
+ id="stop3596" />
+ <stop
+ style="stop-color:#668ad3;stop-opacity:0.08661418;"
+ offset="1"
+ id="stop3598" />
+ </linearGradient>
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective10" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3934"
+ id="linearGradient3911"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-58.314079,33.528902)"
+ x1="-15.395237"
+ y1="1.6637709"
+ x2="226.55714"
+ y2="103.30186" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3940"
+ id="linearGradient3918"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-58.314079,66.64888)"
+ x1="-15.395237"
+ y1="1.6637709"
+ x2="226.55714"
+ y2="103.30186" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4069"
+ id="linearGradient4051"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-58.314079,132.88889)"
+ x1="-15.395237"
+ y1="1.6637709"
+ x2="226.55714"
+ y2="103.30186" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4075"
+ id="linearGradient4063"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(45.368461,166.24253)"
+ x1="-15.395237"
+ y1="1.6637709"
+ x2="226.55714"
+ y2="103.30186" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3594"
+ id="linearGradient4081"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(217.00317,0.40887451)"
+ x1="-15.395237"
+ y1="1.6637709"
+ x2="226.55714"
+ y2="103.30186" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3946"
+ id="linearGradient2913"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-58.314079,99.768872)"
+ x1="-15.395237"
+ y1="1.6637709"
+ x2="226.55714"
+ y2="103.30186" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1.8596728"
+ inkscape:cx="326.93923"
+ inkscape:cy="122.08772"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="1680"
+ inkscape:window-height="975"
+ inkscape:window-x="0"
+ inkscape:window-y="24"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata7">
+ <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 />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="couches"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(247.11814,-18.070878)">
+ <g
+ id="g4040"
+ transform="translate(-275.31725,0)">
+ <rect
+ ry="4.9650793"
+ style="fill:url(#linearGradient4081);fill-opacity:1;stroke:#000000;stroke-opacity:1"
+ y="43.983757"
+ x="256.13968"
+ height="28.914286"
+ width="150.12064"
+ id="rect2820" />
+ <text
+ id="text2816"
+ y="61.751446"
+ x="286.35526"
+ style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+ xml:space="preserve"><tspan
+ style="font-size:12px"
+ y="61.751446"
+ x="286.35526"
+ id="tspan2818"
+ sodipodi:role="line">Wikitty Service</tspan></text>
+ </g>
+ <rect
+ ry="4.9650793"
+ style="fill:url(#linearGradient3911);fill-opacity:1;stroke:#000000;stroke-opacity:1"
+ y="77.103783"
+ x="-19.17757"
+ height="28.914286"
+ width="150.12064"
+ id="rect3641" />
+ <text
+ id="text3637"
+ y="96.274796"
+ x="31.009686"
+ style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+ xml:space="preserve"><tspan
+ style="font-size:12px"
+ y="96.274796"
+ x="31.009686"
+ sodipodi:role="line"
+ id="tspan3782">Sécurité</tspan></text>
+ <rect
+ id="rect3651"
+ width="150.12064"
+ height="28.914286"
+ x="-19.17757"
+ y="110.22376"
+ style="fill:url(#linearGradient3918);fill-opacity:1;stroke:#000000;stroke-opacity:1"
+ ry="4.9650793" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+ x="37.185467"
+ y="129.15454"
+ id="text3647"><tspan
+ sodipodi:role="line"
+ id="tspan3649"
+ x="37.185467"
+ y="129.15454"
+ style="font-size:12px">Cache</tspan></text>
+ <rect
+ ry="4.9650793"
+ style="fill:url(#linearGradient2913);fill-opacity:1;stroke:#000000;stroke-opacity:1"
+ y="143.34375"
+ x="-19.17757"
+ height="28.914286"
+ width="150.12064"
+ id="rect3661" />
+ <text
+ id="text3657"
+ y="161.11145"
+ x="21.368084"
+ style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+ xml:space="preserve"><tspan
+ style="font-size:12px"
+ y="161.11145"
+ x="21.368084"
+ id="tspan3659"
+ sodipodi:role="line">Notification</tspan></text>
+ <rect
+ id="rect3828"
+ width="150.12064"
+ height="85.282539"
+ x="-19.17757"
+ y="176.46378"
+ style="fill:url(#linearGradient4051);fill-opacity:1;stroke:#000000;stroke-opacity:1"
+ ry="4.9650793" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+ x="21.277294"
+ y="194.23146"
+ id="text3830"><tspan
+ sodipodi:role="line"
+ id="tspan3832"
+ x="21.277294"
+ y="194.23146"
+ style="font-size:12px">Persistance</tspan></text>
+ <path
+ d="m 488.03811,153.09869 c 0,4.51647 -11.89928,8.17778 -26.57778,8.17778 -14.6785,0 -26.57778,-3.66131 -26.57778,-8.17778 0,-4.51646 11.89928,-8.17777 26.57778,-8.17777 14.6785,0 26.57778,3.66131 26.57778,8.17777 z"
+ sodipodi:ry="8.1777782"
+ sodipodi:rx="26.577778"
+ sodipodi:cy="153.09869"
+ sodipodi:cx="461.46033"
+ id="path4059"
+ style="fill:#ececec;stroke:#000000;stroke-opacity:1"
+ sodipodi:type="arc"
+ transform="translate(-444.71408,91.707937)" />
+ <path
+ transform="translate(-444.71408,82.751288)"
+ sodipodi:type="arc"
+ style="fill:#ececec;stroke:#000000;stroke-opacity:1"
+ id="path4057"
+ sodipodi:cx="461.46033"
+ sodipodi:cy="153.09869"
+ sodipodi:rx="26.577778"
+ sodipodi:ry="8.1777782"
+ d="m 488.03811,153.09869 c 0,4.51647 -11.89928,8.17778 -26.57778,8.17778 -14.6785,0 -26.57778,-3.66131 -26.57778,-8.17778 0,-4.51646 11.89928,-8.17777 26.57778,-8.17777 14.6785,0 26.57778,3.66131 26.57778,8.17777 z" />
+ <path
+ d="m 488.03811,153.09869 c 0,4.51647 -11.89928,8.17778 -26.57778,8.17778 -14.6785,0 -26.57778,-3.66131 -26.57778,-8.17778 0,-4.51646 11.89928,-8.17777 26.57778,-8.17777 14.6785,0 26.57778,3.66131 26.57778,8.17777 z"
+ sodipodi:ry="8.1777782"
+ sodipodi:rx="26.577778"
+ sodipodi:cy="153.09869"
+ sodipodi:cx="461.46033"
+ id="path4055"
+ style="fill:#ececec;stroke:#000000;stroke-opacity:1"
+ sodipodi:type="arc"
+ transform="translate(-444.71408,73.794682)" />
+ <path
+ sodipodi:type="arc"
+ style="fill:#ececec;stroke:#000000;stroke-opacity:1"
+ id="path4053"
+ sodipodi:cx="461.46033"
+ sodipodi:cy="153.09869"
+ sodipodi:rx="26.577778"
+ sodipodi:ry="8.1777782"
+ d="m 488.03811,153.09869 c 0,4.51647 -11.89928,8.17778 -26.57778,8.17778 -14.6785,0 -26.57778,-3.66131 -26.57778,-8.17778 0,-4.51646 11.89928,-8.17777 26.57778,-8.17777 14.6785,0 26.57778,3.66131 26.57778,8.17777 z"
+ transform="translate(-444.71408,64.838095)" />
+ <rect
+ ry="4.9650793"
+ style="fill:url(#linearGradient4063);fill-opacity:1;stroke:#000000;stroke-opacity:1"
+ y="209.81741"
+ x="51.793835"
+ height="28.914286"
+ width="71.555511"
+ id="rect4061" />
+ <text
+ id="text4065"
+ y="227.81876"
+ x="55.799145"
+ style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+ xml:space="preserve"><tspan
+ style="font-size:12px"
+ y="227.81876"
+ x="55.799145"
+ id="tspan4067"
+ sodipodi:role="line">Indexation</tspan></text>
+ <g
+ id="g4109"
+ transform="translate(30.372791,-27.900587)">
+ <path
+ id="path4083"
+ d="m -225.58468,46.471515 c -16.68438,0 -30.61989,6.194421 -34,14.46875 -10.46987,4.690678 -17.40625,12.80906 -17.40625,22.0625 0,8.071994 5.29836,15.298526 13.59375,20.124995 -0.002,0.01 0.002,0.0213 0,0.0312 -0.10912,0.62925 -0.15625,1.2914 -0.15625,1.9375 0,10.33773 14.31659,18.71875 31.96875,18.71875 10.44893,0 19.69924,-2.95942 25.53125,-7.5 4.3808,1.38215 9.47106,2.1875 14.90625,2.1875 15.83384,0 28.77358,-6.72597 29.625,-15.1875 18.38337,-0.0827 33.21875,-7.329033 33.21875,-16.249995 0,-5.619342 -5.88789,-10.551604 -14.84375,-13.46875 0.003,-0.103705 0.0312,-0.208457 0.0312,-0.3125 0,-12.288245 -20.01349,-22.25 -44.6875,-22.25 -4.47883,0 -8.79573,0.357956 -12.875,0.96875 -6.31832,-3.421172 -15.14045,-5.53125 -24.90625,-5.53125 z"
+ style="fill:#e3dbdb;stroke:#000000;stroke-opacity:1" />
+ <text
+ id="text4100"
+ y="76.368225"
+ x="-209.19235"
+ style="font-size:40px;font-style:normal;font-weight:normal;fill:#483737;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+ xml:space="preserve"><tspan
+ style="font-size:12px;font-weight:bold;text-align:center;text-anchor:middle;fill:#483737;-inkscape-font-specification:Bitstream Charter Bold"
+ y="76.368225"
+ x="-209.19235"
+ id="tspan4102"
+ sodipodi:role="line">Application</tspan><tspan
+ id="tspan4104"
+ style="font-size:12px;font-weight:bold;text-align:center;text-anchor:middle;fill:#483737;-inkscape-font-specification:Bitstream Charter Bold"
+ y="91.368225"
+ x="-209.19235"
+ sodipodi:role="line">Utilisateur</tspan></text>
+ </g>
+ <path
+ style="fill:#ececec;stroke:#000000;stroke-opacity:1"
+ d="m -24.59375,5.6875 c -0.0729,0.017576 -0.106515,0.065035 -0.15625,0.09375 -0.5357,0.309289 -0.88742,2.43629 -1.0625,5.09375 l -38.8125,0 0,8.15625 38.8125,0 c 0.17485,2.662148 0.52614,4.81533 1.0625,5.125 1.59155,0.91888 15.90625,-7.349739 15.90625,-9.1875 0,-1.722901 -12.58368,-9.123093 -15.46875,-9.28125 -0.09617,-0.00527 -0.208351,-0.017576 -0.28125,0 z"
+ transform="translate(-22.696829,43.483757)"
+ id="path4106" />
+ </g>
+</svg>
Added: trunk/wikitty-publication/src/site/rapport/image/strutsexplain.graphml
===================================================================
--- trunk/wikitty-publication/src/site/rapport/image/strutsexplain.graphml (rev 0)
+++ trunk/wikitty-publication/src/site/rapport/image/strutsexplain.graphml 2011-08-29 09:11:40 UTC (rev 1194)
@@ -0,0 +1,333 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" xmlns:yed="http://www.yworks.com/xml/yed/3" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd">
+ <!--Created by yFiles for Java HEAD-Current-->
+ <key for="graphml" id="d0" yfiles.type="resources"/>
+ <key for="port" id="d1" yfiles.type="portgraphics"/>
+ <key for="port" id="d2" yfiles.type="portgeometry"/>
+ <key for="port" id="d3" yfiles.type="portuserdata"/>
+ <key attr.name="url" attr.type="string" for="node" id="d4"/>
+ <key attr.name="description" attr.type="string" for="node" id="d5"/>
+ <key for="node" id="d6" yfiles.type="nodegraphics"/>
+ <key attr.name="Description" attr.type="string" for="graph" id="d7"/>
+ <key attr.name="url" attr.type="string" for="edge" id="d8"/>
+ <key attr.name="description" attr.type="string" for="edge" id="d9"/>
+ <key for="edge" id="d10" yfiles.type="edgegraphics"/>
+ <graph edgedefault="directed" id="G">
+ <data key="d7"/>
+ <node id="n0" yfiles.foldertype="group">
+ <data key="d4"/>
+ <data key="d5"/>
+ <data key="d6">
+ <y:ProxyAutoBoundsNode>
+ <y:Realizers active="0">
+ <y:GroupNode>
+ <y:Geometry height="250.0" width="278.0" x="462.0" y="81.33333333333334"/>
+ <y:Fill color="#F5F5F5" transparent="false"/>
+ <y:BorderStyle color="#000000" type="dashed" width="1.0"/>
+ <y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.45361328125" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="278.0" x="0.0" y="0.0">Struts</y:NodeLabel>
+ <y:Shape type="roundrectangle"/>
+ <y:State closed="false" innerGraphDisplayEnabled="false"/>
+ <y:Insets bottom="15" bottomF="15.0" left="15" leftF="15.0" right="15" rightF="15.0" top="15" topF="15.0"/>
+ <y:BorderInsets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
+ </y:GroupNode>
+ <y:GroupNode>
+ <y:Geometry height="50.0" width="50.0" x="462.0" y="81.33333333333334"/>
+ <y:Fill color="#F5F5F5" transparent="false"/>
+ <y:BorderStyle color="#000000" type="dashed" width="1.0"/>
+ <y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.45361328125" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="50.0" x="0.0" y="0.0">1</y:NodeLabel>
+ <y:Shape type="roundrectangle"/>
+ <y:State closed="true" innerGraphDisplayEnabled="false"/>
+ <y:Insets bottom="15" bottomF="15.0" left="15" leftF="15.0" right="15" rightF="15.0" top="15" topF="15.0"/>
+ <y:BorderInsets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
+ </y:GroupNode>
+ </y:Realizers>
+ </y:ProxyAutoBoundsNode>
+ </data>
+ <graph edgedefault="directed" id="n0:"/>
+ </node>
+ <node id="n1">
+ <data key="d4"/>
+ <data key="d5"><![CDATA[UMLClass]]></data>
+ <data key="d6">
+ <y:UMLClassNode>
+ <y:Geometry height="28.0" width="100.0" x="482.0" y="126.0"/>
+ <y:Fill color="#333399" transparent="false"/>
+ <y:BorderStyle color="#000000" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.12646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="78.27392578125" x="10.863037109375" y="3.0">Interceptor</y:NodeLabel>
+ <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+ <y:AttributeLabel/>
+ <y:MethodLabel/>
+ </y:UML>
+ </y:UMLClassNode>
+ </data>
+ </node>
+ <node id="n2">
+ <data key="d4"/>
+ <data key="d5"><![CDATA[UMLClass]]></data>
+ <data key="d6">
+ <y:UMLClassNode>
+ <y:Geometry height="28.0" width="100.0" x="482.0" y="153.0"/>
+ <y:Fill color="#003366" transparent="false"/>
+ <y:BorderStyle color="#000000" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.12646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="78.27392578125" x="10.863037109375" y="3.0">Interceptor</y:NodeLabel>
+ <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+ <y:AttributeLabel/>
+ <y:MethodLabel/>
+ </y:UML>
+ </y:UMLClassNode>
+ </data>
+ </node>
+ <node id="n3">
+ <data key="d4"/>
+ <data key="d5"><![CDATA[UMLClass]]></data>
+ <data key="d6">
+ <y:UMLClassNode>
+ <y:Geometry height="28.0" width="100.0" x="482.0" y="181.0"/>
+ <y:Fill color="#008080" transparent="false"/>
+ <y:BorderStyle color="#000000" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.12646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="78.27392578125" x="10.863037109375" y="3.0">Interceptor</y:NodeLabel>
+ <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+ <y:AttributeLabel/>
+ <y:MethodLabel/>
+ </y:UML>
+ </y:UMLClassNode>
+ </data>
+ </node>
+ <node id="n4">
+ <data key="d4"/>
+ <data key="d5"><![CDATA[UMLClass]]></data>
+ <data key="d6">
+ <y:UMLClassNode>
+ <y:Geometry height="28.0" width="100.0" x="482.0" y="208.0"/>
+ <y:Fill color="#00CCFF" transparent="false"/>
+ <y:BorderStyle color="#000000" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.12646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="78.27392578125" x="10.863037109375" y="3.0">Interceptor</y:NodeLabel>
+ <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+ <y:AttributeLabel/>
+ <y:MethodLabel/>
+ </y:UML>
+ </y:UMLClassNode>
+ </data>
+ </node>
+ <node id="n5">
+ <data key="d4"/>
+ <data key="d5"><![CDATA[UMLActor]]></data>
+ <data key="d6">
+ <y:SVGNode>
+ <y:Geometry height="100.0" width="60.0" x="181.0" y="172.0"/>
+ <y:Fill color="#FFCC00" transparent="false"/>
+ <y:BorderStyle color="#000000" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="19.12646484375" modelName="eight_pos" modelPosition="s" textColor="#000000" visible="true" width="37.794921875" x="11.1025390625" y="104.0">Actor</y:NodeLabel>
+ <y:SVGNodeProperties usingVisualBounds="false"/>
+ <y:SVGModel svgBoundsPolicy="0">
+ <y:SVGContent refid="1"/>
+ </y:SVGModel>
+ </y:SVGNode>
+ </data>
+ </node>
+ <node id="n6">
+ <data key="d4"/>
+ <data key="d5"><![CDATA[UMLClass]]></data>
+ <data key="d6">
+ <y:UMLClassNode>
+ <y:Geometry height="28.0" width="100.0" x="482.0" y="281.0"/>
+ <y:Fill color="#FF00FF" transparent="false"/>
+ <y:BorderStyle color="#000000" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.12646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="46.82763671875" x="26.586181640625" y="3.0">Action</y:NodeLabel>
+ <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+ <y:AttributeLabel/>
+ <y:MethodLabel/>
+ </y:UML>
+ </y:UMLClassNode>
+ </data>
+ </node>
+ <node id="n7">
+ <data key="d4"/>
+ <data key="d5"><![CDATA[UMLClass]]></data>
+ <data key="d6">
+ <y:UMLClassNode>
+ <y:Geometry height="28.0" width="100.0" x="552.0" y="126.0"/>
+ <y:Fill hasColor="false" transparent="false"/>
+ <y:BorderStyle color="#000000" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.12646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="false" width="39.83251953125" x="30.083740234375" y="3.0">Class</y:NodeLabel>
+ <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+ <y:AttributeLabel/>
+ <y:MethodLabel/>
+ </y:UML>
+ </y:UMLClassNode>
+ </data>
+ </node>
+ <node id="n8">
+ <data key="d4"/>
+ <data key="d5"><![CDATA[UMLClass]]></data>
+ <data key="d6">
+ <y:UMLClassNode>
+ <y:Geometry height="28.0" width="100.0" x="552.0" y="281.0"/>
+ <y:Fill hasColor="false" transparent="false"/>
+ <y:BorderStyle hasColor="false" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.12646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="false" width="39.83251953125" x="30.083740234375" y="3.0">Class</y:NodeLabel>
+ <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+ <y:AttributeLabel/>
+ <y:MethodLabel/>
+ </y:UML>
+ </y:UMLClassNode>
+ </data>
+ </node>
+ <node id="n9">
+ <data key="d4"/>
+ <data key="d5"><![CDATA[UMLClass]]></data>
+ <data key="d6">
+ <y:UMLClassNode>
+ <y:Geometry height="28.0" width="100.0" x="435.0" y="81.33333333333333"/>
+ <y:Fill hasColor="false" transparent="false"/>
+ <y:BorderStyle color="#000000" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="19.12646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="false" width="39.83251953125" x="30.083740234375" y="3.0">Class</y:NodeLabel>
+ <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="" use3DEffect="true">
+ <y:AttributeLabel/>
+ <y:MethodLabel/>
+ </y:UML>
+ </y:UMLClassNode>
+ </data>
+ </node>
+ <edge id="e0" source="n7" target="n8">
+ <data key="d8"/>
+ <data key="d9"><![CDATA[UMLinherits]]></data>
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+ <y:LineStyle color="#000000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="white_delta"/>
+ <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="2.0" y="61.536376953125"/>
+ <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.962890625" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="128.734375" x="2.0" y="54.554931640625">Chemin de la requete</y:EdgeLabel>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e1" source="n5" target="n9">
+ <data key="d8"/>
+ <data key="d9"><![CDATA[UMLinherits]]></data>
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+ <y:LineStyle color="#000000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="white_delta"/>
+ <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.962890625" modelName="six_pos" modelPosition="thead" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="265.111328125" x="-114.15627826891443" y="-88.67203776041669">wp.org/codelutin/chorem/view/menu.action</y:EdgeLabel>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e2" source="n6" target="n5">
+ <data key="d8"/>
+ <data key="d9"><![CDATA[UMLinherits]]></data>
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+ <y:LineStyle color="#000000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="white_delta"/>
+ <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="17.962890625" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="58.708984375" x="-149.8157958984375" y="-18.718994520906335">Page web</y:EdgeLabel>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ </graph>
+ <data key="d0">
+ <y:Resources>
+ <y:Resource id="1"><?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:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="41"
+ height="68.997391"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.45.1"
+ sodipodi:docbase="C:\Daten\alberts\projects\yfx"
+ sodipodi:docname="uml_actor.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ version="1.0">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="2.934351"
+ inkscape:cx="144.21983"
+ inkscape:cy="28.533711"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1280"
+ inkscape:window-height="968"
+ inkscape:window-x="-4"
+ inkscape:window-y="-4"
+ width="48px"
+ height="48px"
+ showborder="false"
+ inkscape:showpageshadow="false" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Ebene 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-29.5,-42.959476)">
+ <a
+ id="a3142"
+ transform="matrix(1.0873906,0,0,1,-4.4741999,0)">
+ <path
+ transform="translate(11.586889,5.2908993)"
+ d="M 47.02914 47.36993 A 8.5197716 9.2013531 0 1 1 29.989597,47.36993 A 8.5197716 9.2013531 0 1 1 47.02914 47.36993 z"
+ sodipodi:ry="9.2013531"
+ sodipodi:rx="8.5197716"
+ sodipodi:cy="47.36993"
+ sodipodi:cx="38.509369"
+ id="path2160"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ sodipodi:type="arc" />
+ </a>
+ <path
+ sodipodi:type="arc"
+ style="fill:none"
+ id="path3134"
+ sodipodi:cx="43.962021"
+ sodipodi:cy="48.392303"
+ sodipodi:rx="3.7486994"
+ sodipodi:ry="0"
+ d="M 47.71072 48.392303 A 3.7486994 0 0 1 1 40.213321,48.392303 A 3.7486994 0 0 1 1 47.71072 48.392303 z" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.24319649px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 50,61.33709 C 50,91.363211 50,92.247838 50,92.247838"
+ id="path3136" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 69.760668,72.362183 C 69.760668,72.362183 69.760668,72.362183 50.239332,72.362183 C 30.239332,72.362183 30.239332,72.362183 30.239332,72.362183 L 30.239332,72.362183"
+ id="path3138" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 30,111.45687 C 30,111.45687 30,111.45687 50,92.013532 C 70,111.45687 70,111.45687 70,111.45687"
+ id="path3140" />
+ </g>
+</svg>
+</y:Resource>
+ </y:Resources>
+ </data>
+</graphml>
Added: trunk/wikitty-publication/src/site/rapport/image/strutsexplain.png
===================================================================
(Binary files differ)
Property changes on: trunk/wikitty-publication/src/site/rapport/image/strutsexplain.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: trunk/wikitty-publication/src/site/rapport/image/wikittypubuml.png
===================================================================
(Binary files differ)
Property changes on: trunk/wikitty-publication/src/site/rapport/image/wikittypubuml.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: trunk/wikitty-publication/src/site/rapport/part/annexes.tex
===================================================================
--- trunk/wikitty-publication/src/site/rapport/part/annexes.tex (rev 0)
+++ trunk/wikitty-publication/src/site/rapport/part/annexes.tex 2011-08-29 09:11:40 UTC (rev 1194)
@@ -0,0 +1,379 @@
+\section{Annexes}
+
+\subsection*{Bindings}
+
+Voici les éléments de bindings disponible dans le moteur d'évaluation:
+
+\begin{itemize}
+\item wpEval, correspond à l'instance de la classe java qui évalue couramment le WikittyPub
+\item wpSubContext, correspond à l'instance de collection contenant
+\item wpPage, nom de la page
+\item wpWikitty, wikitty en cours d'évaluation
+\item wpContext, correspond à l'instance de la classe java du context (voir interface)
+\end{itemize}
+
+Interface du context:
+\lstset{ %
+language=JAVA, % the language of the code
+basicstyle=\footnotesize, % the size of the fonts that are used for the code % where to put the line-numbers
+ % the size of the fonts that are used for the line-numbers
+ % the step between two line-numbers. If it's 1, each line
+keywordstyle=\color[rgb]{1,0,1},
+ % will be numbered
+numbersep=5pt, % how far the line-numbers are from the code
+showspaces=false, % show spaces adding particular underscores
+showstringspaces=false, % underline spaces within strings
+showtabs=false, % show tabs within strings adding particular underscores
+tabsize=2, % sets default tabsize to 2 spaces
+captionpos=b, % sets the caption-position to bottom
+breaklines=true, % sets automatic line breaking
+breakatwhitespace=false, % sets if automatic breaks should only happen at whitespace
+title=\lstname, % show the filename of files included with \lstinputlisting;
+ % also try caption instead of title
+escapeinside={\%*}{*)}, % if you want to add a comment with
+morekeywords={project,modelVersion,groupId,description,build, plugin,plugins,configuration, applicationName, wikittyServiceUrl, artifactId,serverID,uploadUrl}
+}
+
+
+\begin{lstlisting}
+package org.nuiton.wikitty.publication;
+
+import org.nuiton.wikitty.WikittyProxy;
+import org.nuiton.wikitty.WikittyService;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+import java.util.Map;
+
+public interface PublicationContext {
+
+ HttpServletRequest getRequest();
+ HttpServletResponse getResponse();
+ WikittyProxy getWikittyProxy();
+ String makeUrl(String url);
+ WikittyService getWikittyService();
+ List<String> getMandatoryArguments();
+ String getArgument(String name, String defaultValue);
+ String getContentType();
+ void setContentType(String contentType);
+ String toString();
+ Map<String,String> getArguments();
+}
+
+\end{lstlisting}
+
+Et donc dans le code des WikittyPubText à n'importe quel moment on peut faire
+appel à ces éléments pour invoquer des méthodes dessus. Mais on peut aussi
+instancier des classes et les utiliser comme ceci:
+
+\begin{lstlisting}
+
+ importPackage(org.nuiton.wikitty.entities);
+ var ressource = new WikittyRessourceImpl();
+
+ ressource.setName(wpContext.getArgument("nom"));
+ ressource.setDescription(wpContext.getArgument("description"));
+\end{lstlisting}
+
+On importe le package de la classe, et on peut en créer une nouvelle instance,
+et faire tout ce que l'on pourrait faire en java dessus, tout naturellement.
+\clearpage
+
+\subsection*{struts.xml}
+
+Fichier de configuration xml de struts (partiel) avec des intercepteurs et quelques
+actions, et le mécanisme d'héritage de package:
+
+\lstset{ %
+language=XML, % the language of the code
+basicstyle=\footnotesize, % the size of the fonts that are used for the code % where to put the line-numbers
+ % the size of the fonts that are used for the line-numbers
+ % the step between two line-numbers. If it's 1, each line
+keywordstyle=\color[rgb]{0,0,1},
+ % will be numbered
+numbersep=5pt, % how far the line-numbers are from the code
+showspaces=false, % show spaces adding particular underscores
+showstringspaces=false, % underline spaces within strings
+showtabs=false, % show tabs within strings adding particular underscores
+tabsize=2, % sets default tabsize to 2 spaces
+captionpos=b, % sets the caption-position to bottom
+breaklines=true, % sets automatic line breaking
+breakatwhitespace=false, % sets if automatic breaks should only happen at whitespace
+title=\lstname, % show the filename of files included with \lstinputlisting;
+ % also try caption instead of title
+escapeinside={\%*}{*)}, % if you want to add a comment with
+morekeywords={project,modelVersion,groupId,description,build, plugin,plugins,configuration, applicationName, wikittyServiceUrl, artifactId,serverID,uploadUrl
+,constant,package,interceptors,interceptor,param,action, struts, result}
+}
+
+
+
+\begin{lstlisting}
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE struts PUBLIC
+ "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
+ "http://struts.apache.org/dtds/struts-2.0.dtd">
+<struts>
+ <constant name="struts.ognl.allowStaticMethodAccess" value="true" />
+ <constant name="struts.enable.SlashesInActionNames" value="true" />
+
+ <!-- Define a package for the restricted area must be logged to access -->
+ <package name="restrictedArea" extends="publicArea">
+ <interceptors>
+ <interceptor name="login"
+ class="org.nuiton.wikitty.publication.ui.interceptor.LoginInterceptor">
+ <param name="error">/login_input.action</param>
+ </interceptor>
+ <interceptor-stack name="restrictedAreaStack">
+ <interceptor-ref name="login" />
+ <interceptor-ref name="publicAreaStack" />
+ </interceptor-stack>
+ </interceptors>
+ <default-interceptor-ref name="restrictedAreaStack" />
+ </package>
+ <!-- Action aviable only to logged user extends="restrictedArea" -->
+ <package name="publication" extends="publicArea">
+ <action name="*/*/raw/*"
+ class="org.nuiton.wikitty.publication.ui.action.PublicationActionRaw">
+ <param name="contextData">{1}</param>
+ <param name="contextApps">{2}</param>
+ <param name="args">{3}</param>
+ <result type="stream">
+ <param name="contentType">${mimeType}</param>
+ <param name="inputName">inputStream</param>
+ </result>
+ </action>
+
+ <action name="*/*/eval/*"
+ class="org.nuiton.wikitty.publication.ui.action.PublicationActionEval">
+ <param name="contextData">{1}</param>
+ <param name="contextApps">{2}</param>
+ <param name="args">{3}</param>
+ <result type="stream">
+ <param name="contentType">${contentType}</param>
+ <param name="inputName">inputStream</param>
+ </result>
+ </action>
+ </package>
+</struts>
+\end{lstlisting}
+
+\clearpage
+
+
+\subsection*{Décoration de code}
+
+Il y a une interface commune pour la décoration des WikittyPubText en fonction
+de leur type, si ils sont en java ou dans un langage interprété par un
+script engine.
+
+
+\subsubsection*{Langage de script}
+
+\lstset{ %
+language=JAVA, % the language of the code
+basicstyle=\footnotesize, % the size of the fonts that are used for the code % where to put the line-numbers
+ % the size of the fonts that are used for the line-numbers
+ % the step between two line-numbers. If it's 1, each line
+keywordstyle=\color[rgb]{1,0,1},
+ % will be numbered
+numbersep=5pt, % how far the line-numbers are from the code
+showspaces=false, % show spaces adding particular underscores
+showstringspaces=false, % underline spaces within strings
+showtabs=false, % show tabs within strings adding particular underscores
+tabsize=2, % sets default tabsize to 2 spaces
+captionpos=b, % sets the caption-position to bottom
+breaklines=true, % sets automatic line breaking
+breakatwhitespace=false, % sets if automatic breaks should only happen at whitespace
+title=\lstname, % show the filename of files included with \lstinputlisting;
+ % also try caption instead of title
+escapeinside={\%*}{*)}, % if you want to add a comment with
+morekeywords={project,modelVersion,groupId,description,build, plugin,plugins,configuration, applicationName, wikittyServiceUrl, artifactId,serverID,uploadUrl}
+}
+
+Un exemple avec un WikittyPubText de type mime text/javascript, assez simple
+juste une page présentant deux liens.
+
+\begin{lstlisting}
+try {
+
+var result =
+" <a href='"+wpContext.makeUrl("/eval/Wiki/Home")+"'>Home</a>\n"+
+" <a href='"+wpContext.makeUrl("/eval/Wiki/Stat")+"'>Stat</a>\n";
+
+wpContext.setContentType("text/html");
+result;
+} catch (eee) {
+wpContext.setContentType("text/plain");
+eee
+}
+\end{lstlisting}
+
+
+La classe java correspondante après décoration, le javascript est toujours là
+mais encapsulé dans un chaine de caractère, prêt à être interprété.
+
+\begin{lstlisting}
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.nuiton.wikitty.ScriptEvaluator;
+import org.nuiton.wikitty.publication.AbstractDecoredClass;
+import org.nuiton.wikitty.entities.*;
+import org.nuiton.wikitty.publication.entities.*;
+import org.nuiton.wikitty.publication.*;
+import java.util.*;
+
+public class WikiMenu extends AbstractDecoredClass {
+ public Object eval(Map<String, Object> bindings) throws Exception {
+ Object result = null;
+ String content = "try {\n\nvar result =\n\" <a href='\"+wpContext.makeUrl(\"/eval/Wiki/Home\")+\"'>Home</a>\\n\"+\n\" <a href='\"+wpContext.makeUrl(\"/eval/Wiki/Stat\")+\"'>Stat</a>\\n\";\n\nwpContext.setContentType(\"text/html\");\nresult;\n} catch (eee) {\nwpContext.setContentType(\"text/plain\");\neee\n}\n";
+ String mimeType = "text/javascript";
+ String criteriaName = "elt_id:b48bb6c6-b38d-4abe-b8d4-97ad29457fa1";
+ result = ScriptEvaluator.eval(null, criteriaName, content, mimeType,
+ bindings);
+ return result;
+ }
+}
+\end{lstlisting}
+
+
+\subsubsection*{Java}
+
+Pour un WikittyPubText contenant du java c'est un peu différent, on voit
+que le code java pour le moment est limité qu'aux corps de méthodes.
+
+\begin{lstlisting}
+return "Hello world on "+wpPage;
+\end{lstlisting}
+
+Dans la classe décorée, finale qui sera compilée on voit que les éléments
+contenu dans les bindings auront été dépilé pour que le code java écrit qui les
+utilise puissent fonctionner simplement.
+
+\begin{lstlisting}
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.nuiton.wikitty.ScriptEvaluator;
+import org.nuiton.wikitty.publication.AbstractDecoredClass;
+import org.nuiton.wikitty.entities.*;
+import org.nuiton.wikitty.publication.entities.*;
+import org.nuiton.wikitty.publication.*;
+import java.util.*;
+
+public class hello extends AbstractDecoredClass {
+ public Object eval(Map<String, Object> bindings) throws Exception {
+ PublicationContext wpContext = (PublicationContext) bindings
+ .get("wpContext");
+ EvalInterface wpEval = (EvalInterface) bindings.get("wpEval");
+ String wpPage = (String) bindings.get("wpPage");
+ List<String> wpSubContext = (List<String>) bindings.get("wpSubContext");
+ Wikitty wpWikitty = (Wikitty) bindings.get("wpWikitty");
+ return "Hello world on " + wpPage;
+
+ }
+}
+\end{lstlisting}
+
+
+
+\lstset{ %
+language=HTML, % the language of the code
+basicstyle=\footnotesize, % the size of the fonts that are used for the code % where to put the line-numbers
+ % the size of the fonts that are used for the line-numbers
+ % the step between two line-numbers. If it's 1, each line
+keywordstyle=\color[rgb]{1,0,1},
+ % will be numbered
+numbersep=5pt, % how far the line-numbers are from the code
+showspaces=false, % show spaces adding particular underscores
+showstringspaces=false, % underline spaces within strings
+showtabs=false, % show tabs within strings adding particular underscores
+tabsize=2, % sets default tabsize to 2 spaces
+captionpos=b, % sets the caption-position to bottom
+breaklines=true, % sets automatic line breaking
+breakatwhitespace=false, % sets if automatic breaks should only happen at whitespace
+title=\lstname, % show the filename of files included with \lstinputlisting;
+ % also try caption instead of title
+escapeinside={\%*}{*)}, % if you want to add a comment with
+morekeywords={project,modelVersion,groupId,description,build, plugin,plugins,configuration, applicationName, wikittyServiceUrl, artifactId,serverID,uploadUrl}
+}
+
+
+
+\subsubsection*{Interface graphique}
+
+Pour intégrer plus facilement des interfaces graphiques, il y a le mécanisme
+d'inversion, pour finalement avoir le code de l'interface dans celui du langage
+de script.
+
+Un exemple avec un WikittyPubText de mimeType "text/html.javascript" avec ce contenu:
+
+\begin{lstlisting}
+<html>
+<body>
+<h1> Bonjour, ceci est une page de test qui contient du html et des balises comme dans une jsp</h1>
+
+<p>.Le but est de pouvoir mettre du html facilement avec du code aussi.
+</p>
+
+<p>ici on va afficher le nom de la page qui est dans l'adresse et dans le binding <%=wpPage%>.</p>
+
+Op le logo:
+<img src='<%=wpContext.makeUrl("/raw/Logo")%>'/>
+<%
+wp_result += "<p>Ici c'est du code js</p>";
+
+if (0<1){
+wp_result += "on est rentre dans un if";
+}
+%>
+</body>
+</html>
+\end{lstlisting}
+Après transformation il deviendra de mimeType "text/javascript". Et tout ce qui
+était entre les balises \verb!<%! et \verb!%>! est intégré tel quel au script, alors
+que ce qui était autour est maintenant entouré pour être dans une variable de retour.\\
+
+\lstset{ %
+language=JAVA, % the language of the code
+basicstyle=\footnotesize, % the size of the fonts that are used for the code % where to put the line-numbers
+ % the size of the fonts that are used for the line-numbers
+ % the step between two line-numbers. If it's 1, each line
+keywordstyle=\color[rgb]{1,0,1},
+ % will be numbered
+numbersep=5pt, % how far the line-numbers are from the code
+showspaces=false, % show spaces adding particular underscores
+showstringspaces=false, % underline spaces within strings
+showtabs=false, % show tabs within strings adding particular underscores
+tabsize=2, % sets default tabsize to 2 spaces
+captionpos=b, % sets the caption-position to bottom
+breaklines=true, % sets automatic line breaking
+breakatwhitespace=false, % sets if automatic breaks should only happen at whitespace
+title=\lstname, % show the filename of files included with \lstinputlisting;
+ % also try caption instead of title
+escapeinside={\%*}{*)}, % if you want to add a comment with
+morekeywords={project,modelVersion,groupId,description,build, plugin,plugins,configuration, applicationName, wikittyServiceUrl, artifactId,serverID,uploadUrl,var, if}
+}
+
+
+\begin{lstlisting}
+wpContext.setContentType("text/html");
+var wp_result="<html>\n";
+wp_result+="<head>\n";
+wp_result+="</head>\n";
+wp_result+="<body>\n";
+wp_result+="<h1> Bonjour, ceci est une page de test qui contient du html et des balises comme dans une jsp</h1>\n";
+wp_result+="<p>Le but est de pouvoir mettre du html facilement avec du code aussi.\n";
+wp_result+="</p>\n";
+wp_result+="<p>ici on va afficher le nom de la page qui est dans l'adresse et dans le binding "+wpPage+".</p>\n";
+wp_result+="Op le logo:\n";
+wp_result+="<img src='"+wpContext.makeUrl("/raw/Logo")+"'/>";
+result += "<p>Ici c'est du code js</p>";
+if (0<1){
+result+= "on est rentre dans un if";
+}
+wp_result+="</body>\n";
+wp_result+="</html>";
+\end{lstlisting}
+
+
Added: trunk/wikitty-publication/src/site/rapport/part/codelutin.tex
===================================================================
--- trunk/wikitty-publication/src/site/rapport/part/codelutin.tex (rev 0)
+++ trunk/wikitty-publication/src/site/rapport/part/codelutin.tex 2011-08-29 09:11:40 UTC (rev 1194)
@@ -0,0 +1,58 @@
+\section{Code Lutin}
+
+\subsection{Présentation de l'entreprise}
+
+
+Code Lutin est une Société de Service en Logiciel Libre créée en 2002, elle est
+implantée à St Sébastien sur Loire, et travail principalement pour des clients
+dans la région du grand ouest.
+
+L'entreprise s'est spécialisée autour des technologies Java JEE et UML:
+conception, architectures JEE, outils JEE, MDA (Model Driven Architecture),
+développement/migration d’applications JEE, formation.
+
+L'entreprise étant une SSLL elle travaille uniquement avec des outils issue du
+logiciel libre, et autant que cela est possible les projets sur lesquels elle
+va être amené à travailler seront des logiciels libres.
+
+Code Lutin offre les services de :
+\begin{itemize}
+\item développement de logiciel (forfait ou régie)
+\item l’intégration et de la maintenance de systèmes clés en main
+\item support
+\item conseil et de la veille technologique
+\end{itemize}
+
+Services principalement autour des technologies Java.
+
+%rajuter quelque chose sur le mode de fonctionnement ? A base que ce sont les
+%employés qui finalement prennent toutes les déscision.
+
+\subsection{Acteur du monde libre}
+
+Code Lutin se veut acteur du monde du logiciel libre, l'entreprise soutient des
+projets du monde libre. Elle est membre de l'april, une association qui à pour
+but de promouvoir et défendre le logiciel libre.
+
+L'entreprise est membre de Alliance libre une association nantaises qui regroupe
+les entreprises de la région qui travail pour le libre. Le but étant de
+promouvoir le logiciel libre dans l'ouest.
+
+L'entreprise fait aussi partit du réseau libre entreprise qui regroupe des
+entreprises françaises proches du logiciel livre, et qui partagent des modes de
+fonctionnement similaire et les mêmes valeurs.
+
+
+\subsection{Leurs projets}
+
+En plus de faire du logiciel au forfait et en régie, l'entreprise investie une
+grande force dans la recherche et développement, en travaillant sur leurs librairies
+qu'ils utilisent pour leurs divers projet. Mais aussi en travaillant sur des
+solutions logiciels qui seront d'abord utilisés en interne, puis proposés
+ensuite à des clients une fois que la solution aura été finalisée.
+
+Un exemple, Chorem qui est une collection d'outils de gestion d'entreprise
+pour la facturation, la gestion des employés, des contrats, etc. Une collection
+d'outil qui a vu le jour parce Code Lutin ne trouvait pas de logiciel de gestion
+d'entreprise, libre. Lima est un autre exemple, pendant libre des solutions de
+gestion de comptabilités existantes.
Added: trunk/wikitty-publication/src/site/rapport/part/conclusion.tex
===================================================================
--- trunk/wikitty-publication/src/site/rapport/part/conclusion.tex (rev 0)
+++ trunk/wikitty-publication/src/site/rapport/part/conclusion.tex 2011-08-29 09:11:40 UTC (rev 1194)
@@ -0,0 +1,35 @@
+\section{Conclusion}
+
+Ça fonctionne, ça fonctionnait aussi avant le stage, en soit le fait que ça
+fonctionne toujours n'est donc pas extraordinaire. Néanmoins maintenant des
+fonctionnalités supplémentaires sont venu se greffer autour du module pour le
+rendre utilisable réellement. Le prototype n'est plus seulement un prototype,
+et peut être plus facilement utilisable par la présence du plugin maven entre
+autre.
+
+Ainsi on peut maintenant assez facilement créer des applications dans Wikitty
+Publication, c'est d'ailleurs prévu pour certaines applications de chez Code
+Lutin.
+
+En ce qui concerne donc l'applicatif je pense avoir remplis mes objectifs,
+maintenant le projet est utilisable, pas parfait, mais libre, donc si son concept
+intéresse, les gens peuvent l'améliorer pour leurs besoins et corriger ce qui ne
+fonctionne pas. Des améliorations comme stocker dans le service les jar
+entités sous forme de diagramme UML et à l'exécution les classes sont générées
+packagé en jar et ajoutées au classpath ou le support de d'autre langage.
+
+Plus personnellement ce stage m'aura beaucoup apporté, techniquement j'aurais
+beaucoup appris sur les bonnes pratiques, les mauvaises pratiques comme déléguer
+à son ide les mécanismes d'autres outils (inclure SVN dans eclipse ?! Plus jamais).
+Pas mal de chose technique en rapport avec le monde objet de Java, notamment
+la manipulation de classloader et d'autres choses.
+
+Ce stage a été très complet, j'ai fais du J2E, du java classique, fais un plugin
+pour maven et j'ai été très bien encadré pendant ce stage.
+
+J'aurais appris à faire des points régulier sur l'avancement de mon travail,
+tenir les délais que l'on me donnait, estimer la durée de certaines tâches,
+présenter mon travail au cours de réunion.
+
+J'aurais pu appréhender plus facilement les problématiques de licences, et mieux
+comprendre les tenants et aboutissants du logiciel libre.
Added: trunk/wikitty-publication/src/site/rapport/part/introduction.tex
===================================================================
--- trunk/wikitty-publication/src/site/rapport/part/introduction.tex (rev 0)
+++ trunk/wikitty-publication/src/site/rapport/part/introduction.tex 2011-08-29 09:11:40 UTC (rev 1194)
@@ -0,0 +1,28 @@
+\section*{Introduction}
+
+Ce rapport présente le stage que j'ai effectué dans le cadre de mon master 2
+ALMA, stage effectué chez Code Lutin. J'ai effectué mon stage chez Code Lutin, une
+entreprise qui fait du logiciel libre. J'avais choisi justement cette entreprise
+pour ça, l'occasion de faire du logiciel libre. Pour moi c'était une chance
+d'apprendre de bonnes pratiques, de progresser techniquement. Aussi de contribuer au
+monde du libre et d'en apprendre plus sur les valeurs du libre.
+
+Ce rapport présente donc mon travail sur Wikitty Publication, module de Wikitty
+un projet libre initié par Code Lutin. Le concept est assez simple et très
+intéressant, celui d'une application que l'on peut modifier comme on l'utilise :
+comme dans un Wiki. On y accèderait dans un navigateur simplement, et on la modifierait aussi
+dans le navigateur.
+
+Une application qui du coup pourrait elle même se modifier, un stockage en objet
+du code de l'application et des données manipulées, de sorte que l'application
+puisse accéder aux deux de la même façon.
+
+Mon stage a débuté avec le prototype de l'application qui était fonctionnel,
+mais pas utilisable en dehors du cadre prototype, mon travail a été de travailler
+sur ce prototype pour le rendre utilisable pour le développement d'application.
+
+Je présenterais donc dans ce rapport l'entreprise pour laquelle j'ai travaillé,
+le projet Wikitty, le concept de Wikitty Publication, ensuite les différentes
+fonctionnalités sur lesquelles j'ai travaillé sur ce module.
+Enfin je conclurais sur mon stage et les travaux que j'ai effectué.
+
Added: trunk/wikitty-publication/src/site/rapport/part/organisation.tex
===================================================================
--- trunk/wikitty-publication/src/site/rapport/part/organisation.tex (rev 0)
+++ trunk/wikitty-publication/src/site/rapport/part/organisation.tex 2011-08-29 09:11:40 UTC (rev 1194)
@@ -0,0 +1,49 @@
+\section{Organisation du travail}
+
+Pour ce stage au sein de Code Lutin, très vite après avoir pris connaissance
+de mon environnement de travail et des différentes taches qui m'attendait sur
+le projet Wikitty Publication, on m'a demandé un planning prévisionnel du travail
+(Planning sur la page suivante).
+
+Pour ce stage, et le projet Wikitty Publication, ce qui a été fait, c'est que
+j'ai découpé les spécifications de Wikitty Publication en "grosse" fonctionnalités
+de manière à ce que "régulièrement" il puisse y avoir des choses concrètes qui
+fonctionnent.
+
+Les étapes étaient toujours les mêmes dans ces "cycles" de développement:
+\begin{itemize}
+\item discussion avec mon maître de stage sur les attentes
+\item rédaction de spécifications, en détaillant les demandes de sorte à être
+le moins ambiguë possible, envoi de ses spécifications sur une liste de
+développement, discussion éventuelle sur ces propositions
+\item implémentation des spécifications, avec mise à jour des spécifications
+si nécessaire
+\item tests
+\item documentation du code
+\end{itemize}
+
+De plus toutes les trois semaines au cours de réunions de développement, je
+présentais l'avancé de mon travail et faisais démonstration du fonctionnement
+de Wikitty Publication avec les fonctionnalités que j'avais fait depuis la dernière
+réunion.
+
+En parallèle, toutes les semaines je faisais un compte rendu par mail sur ce que
+j'avais fais la semaine, ce qui m'avais posé problème et ce que je comptais faire
+la semaine suivante.
+
+D'un point de vue plus technique l'intégralité du projet Wikitty est en JAVA et
+construit avec maven, l'intégration continue est faites par un jenkins. Le projet
+se trouve sur une forge permettant l'assignation de ticket pour les évolutions
+et les corrections de bug. Un sonar est aussi en place pour les métriques et la
+vérification des règles de codage pour le code.
+
+Voici mon planning de travail, il y a des taches qui étaient prévu au départ,
+et d'autre qui se sont ajoutées au fur et à mesure. J'aurais assez bien estimé
+le temps nécessaire pour certaines taches, certaines m'auront paru plus
+complexe alors qu'elles étaient simples. Mes erreurs d'estimation ont été dut
+à ma non connaissance du domaine au départ, et du fait que je mesurais mal la portée
+de certaines fonctionnalités, leurs buts.
+
+\includepdf{ressources/planningprev2.pdf}
+
+
Added: trunk/wikitty-publication/src/site/rapport/part/remerciement.tex
===================================================================
--- trunk/wikitty-publication/src/site/rapport/part/remerciement.tex (rev 0)
+++ trunk/wikitty-publication/src/site/rapport/part/remerciement.tex 2011-08-29 09:11:40 UTC (rev 1194)
@@ -0,0 +1,17 @@
+\section*{Remerciements}
+
+Je tiens tout d'abord à remercier Benjamin POUSSIN pour m'avoir permis de faire
+mon stage au sein de Code Lutin, cela aura été une très bonne expérience.
+
+Je voudrais aussi remercier Éric CHATELLIER et sylvain LETELLIER qui m'ont
+aidé tout au long de mon stage.
+
+Je remercie aussi Tony CHEMIT pour ses conseils en terme de bonne pratique et ses
+positions généralement intransigeantes justement sur ces bonnes pratiques.
+
+Un merci aussi à Pascal MOLLI pour les cours dispensés cette année,
+qui auront été très en phase avec la réalité et ce qui se passe réellement en
+entreprise. Ils ont été parmi les plus réalistes, concrets et utiles parmi ceux
+que j'ai eut tout au long de mes formations.
+
+Enfin le remercie l'ensemble des Lutins pour leur accueil chaleureux.
Added: trunk/wikitty-publication/src/site/rapport/part/resume.tex
===================================================================
--- trunk/wikitty-publication/src/site/rapport/part/resume.tex (rev 0)
+++ trunk/wikitty-publication/src/site/rapport/part/resume.tex 2011-08-29 09:11:40 UTC (rev 1194)
@@ -0,0 +1,23 @@
+\section*{Résumé}
+
+Ce rapport présente le stage que j'ai effectué dans le cadre de mon master 2
+ALMA, stage effectué chez Code Lutin, une société de service en logiciel libre.
+Mon travail a été articulé autour de Wikitty, une librairie libre
+développée à l'origine par l'entreprise. Il s'agit d'un système de base de
+données orienté colonnes, soit clé$\to$valeur. J'ai travaillé sur un module de
+ce projet : Wikitty Publication. Le but de ce module est de stocker des applications
+dans le système de stockage Wikitty, tout comme les données. En plus du stockage
+l'application doit pouvoir être exécutée et utilisée. Le but étant d'avoir une
+application qui peut se modifier comme elle s'exécute simplement à travers un
+navigateur comme pour un wiki. Au départ du stage il y avait un prototype simple,
+fonctionnel. L'objectif du stage a été de le transformer en un module fonctionnel,
+avec fonctionnalités un peu plus avancées. Ce concept d'application
+se base sur le scripting et la possibilité d'interpréter des langages de script
+avec d'autre langage, dans notre cas ici pour le prototype du javascript
+interprété et exécuté par du java, le tout formant une application web complète.\\
+
+Mots clés: Libre, Scripting, Wiki, Wikitty, JAVA
+
+
+
+
Added: trunk/wikitty-publication/src/site/rapport/part/wikitty.tex
===================================================================
--- trunk/wikitty-publication/src/site/rapport/part/wikitty.tex (rev 0)
+++ trunk/wikitty-publication/src/site/rapport/part/wikitty.tex 2011-08-29 09:11:40 UTC (rev 1194)
@@ -0,0 +1,180 @@
+\section{Projet Wikitty}
+
+Wikitty est un projet libre de Code Lutin, il est nécessaire de le présenter car
+durant mon stage j'ai été amené à travailler sur des sous modules de ce projet.
+Dans la suite Wikitty avec une majuscule désignera le projet, et wikitty avec
+une minuscule désignera les objets.
+
+\subsection{Principe}
+
+Ce projet est une base de données orientée colonne et API de persistance pour
+Java. Il permet d'enregistrer dans une base clé/valeur des objets wikitty, la
+clé est un id généré qui est unique pour chaque wikitty.
+
+Un wikitty possède des extensions et les extensions possèdent des champs nommés
+et chaque champ est une clé à laquelle on associe des valeurs. Et des extensions
+peuvent dépendre d'autres extensions.
+
+Par exemple une extension personne qui possède deux champs : nom et prénom.
+Une autre extension ressource qui possède un champs numéro et qui dépends de
+l'extension personne. Chaque champs d'extension est défini par son nom et son
+extension. Par exemple pour notre extension WikittyPersonne ses champs son nommés:
+WikittyPersonne.nom et WikittyPersonne.prenom
+
+Si un wikitty possède l'extension ressource alors ce wikitty possèdera les
+champs de l'extension ressource et de l'extension employé, puisque ressource
+dépends d'employé.
+
+L'api de wikitty prévoit un certain nombre d'extension basique, mais tout
+l'intéret est que l'on peut créer ses propres extensions, simplement en écrivant
+un modèle uml de classe, qui servira ensuite pour générer les classes java
+effectives, les entity business.
+
+On distinguera wikitty et entity business, wikitty pour l'objet contenant toute
+les extensions sur lequel on peut récupérer les valeurs avec les champs nommés.
+Et les entity business les objets correspondants aux extensions sur lesquels
+on accède aux champs avec des accesseurs classiques.
+
+Ensuite il suffit de développer son application simplement en utilisant les
+classes générées et les passer à un WikittyService pour le stockage sans plus
+se poser de question le tout très simplement.
+
+Cette api à été conçue pour supporter les monter en charge et une utilisation
+intensive. Elle supporte aussi la recherche par criteria, et par facette.
+
+La recherche par criteria permet de rechercher des wikitty en fonction de leurs
+extensions et des valeurs des différents éléments de ces extensions, sans jamais
+écrire de sql, on écrit un critère sur le modèle objet.
+
+Les facettes permettent de regrouper les résultats de recherche par criteria.
+
+Tout wikitty possède un numéro de version, qui évolue en fonction des
+modifications faites dessus. L'api prévois que l'on puisse restaurer une version
+ciblé d'un wikitty.
+
+Durant le développement de la partie synchronisation s'est posé le problème de
+gestion de version des wikitty. D'un service à l'autre les versions ne
+sont pas les mêmes, en envoyant un wikitty en version 8.0 vers un WikittyService
+qui ne connait pas ce wikitty, il sera enregistré en version 1.0 (avec les
+même données). Ce mécanisme posant problème pour les mises à jour ultérieurement.
+A l'heure de finalisation de ce rapport le "problème" n'a pas encore été résolut.
+
+\subsection{Existant}
+
+Wikitty sert de base de donnée pour une partie des applications de l'entreprise,
+puisque il permet une grande flexibilité. Dès lors où l'on peut modéliser les
+données en objet on peut les stocker dans avec Wikitty.
+
+Actuellement Wikitty peut être déployé localement, pour une base de données
+d'une application, mais il peut être déployé sur un serveur et interrogé grâce
+au protocole de communication hessian ou au framework cajo.
+
+Hessian est un protocole de communication pour web service, et cajo est un
+framework pour les communications d'application java réparties.
+
+Une partie des projets actuel de Code Lutin utilise un stockage Wikitty.
+
+\subsection{Utilisation}
+
+A l'utilisation pour créer ses propres wikitty il faut écrire un diagramme de
+classe en XMI (par exemple avec Argouml) et que chaque classe porte le stéréotype
+<<Entity>>, et remplir les différents attributs des classes avec les types
+reconnus par java, comme on peut le voir pour les entités utilisés pour Wikitty
+Publication sur la figure \ref{umlwikittypub}.
+
+\begin{figure}[!ht]
+ %[height=12cm,width=15cm]
+\centering
+\includegraphics[height=8cm,width=8cm]{image/wikittypubuml.png}
+ \caption{Les entités de wikitty publication}
+ \label{umlwikittypub}
+\end{figure}
+
+Le fait de stéréotyper correctement permet ensuite au générateur de générer
+les classes java correspondantes, et s'assurer qu'elles puissent être stockées
+ensuite par Wikitty.
+
+Le générateur qui génère le code java à partir du fichier zargo issue d'argouml
+est un générateur développé en tant que projet libre par Code Lutin: Eugene.
+Ce générateur est née de la nécessité d'un générateur libre, dont la génération
+pouvait être intégré au processus de build maven, en java, indépendant de tout ide.
+
+Le déploiement ensuite passe par des fichiers de configuration qui permettent la
+mise en place des différentes couche de service nécessaire au bon fonctionnement.
+On peut choisir ainsi d'avoir une base de donnée embarquée ou d'utiliser un
+WikittyService distant.
+
+Celà sans écrire le moindre sql, pour faire des recherches il suffit d'écrire
+ses criterias, qui peuvent être construit à partir d'objet wikitty, par exemple
+on veut des wikitty qui ressemble à un modèle, on génère les criterias à partir
+de ce modèle.
+
+C'est une approche tout objet, tout java, on se concentre sur l'écriture du code
+métier et pas sur l'écriture des couches basses. Puisque le service permet la
+sauvegarde, restauration, et recherche.
+
+% Ensuite il suffit d'avoir la base de déployée, et d'utiliser l'interface
+% wikittyProxy qui offre les services pour les requêtes de wikitty, les
+% sauvegardes, restauration de wikitty. La base de donnée est totalement déléguée
+% au wikittyService, pas besoin d'écrire du sql.
+%
+% Rajouter que on se sert de wikitty service
+%
+% mécanisme de wikitty service et de fichier de propriété liée et tout ça
+
+
+\subsection{WikittyService, WikittyProxy et WikittyServiceFactory}
+
+Comme évoqué précédemment ces éléments sont important dans l'utilisation et
+l'intégration de Wikitty dans un projet, je vais donc en parler plus en détail
+ici.
+
+Le WikittyService est une interface qui permet de sauvegarder, rechercher,
+récupérer des wikitty. Il existe des implémentations de service pour différentes
+base de données, pour des services à distance. Tous les services n'implémentent
+pas toutes les méthodes, par exemple la gestion des authentifications ou la
+gestion d'un cache sont à la charge d'implémentation particulière. Et les
+services sont disposés en couche successives pour s'occuper de certain aspect
+et déléguant les autres aspects à la couche suivante comme on peut le voir sur
+la figure \ref{pileService}.
+%ce n'est pas pas un pattern de chain of responsability
+
+%schéma d'encapsulation de wikitty service
+\begin{figure}[!ht]
+ %[height=12cm,width=15cm]
+\centering
+\includegraphics[height=5cm,width=8cm]{image/pileService.png}
+ \caption{Couche de Wikitty Service}
+ \label{pileService}
+\end{figure}
+
+La WikittyServiceFactory est une factory au sens pattern, c'est à dire qu'a
+partir de fichier de propriétés elle construit et retourne les WikittyServices
+demandés. C'est elle aussi qui organise les couches de service en fonction de ce
+qui est défini dans les fichiers de propriétés.
+
+%exemple de fichier de propriété
+
+Un extrait de fichier de propriétés avec les couches de WikittyService:
+\begin{verbatim}
+wikitty.WikittyService.components=\
+org.nuiton.wikitty.services.WikittyServiceStorage,\
+org.nuiton.wikitty.services.WikittyServiceNotifier,\
+org.nuiton.wikitty.services.WikittyServiceCached,\
+org.nuiton.wikitty.services.WikittyServiceSecurity,\
+org.nuiton.wikitty.services.WikittyServiceAccessStat,\
+org.nuiton.wikitty.services.WikittyServiceCajoServer
+\end{verbatim}
+
+Les propriétés ne sont pas directement manipulées, on se sert d'un objet
+ApplicationConfig qui permet de gérer différent niveau de propriétés,
+avec des propriétés par défaut si tout n'est pas défini.
+
+Le WikittyProxy est une surcouche qui encapsule un WikittyService et cache
+certaines complexités pour finalement offrir plus de méthodes et des méthodes
+plus simples. Par exemple l'interface WikittyService ne propose que des
+restaurations de liste de wikitty, alors que le proxy propose des restaurations de résultat
+unique. Dans le cas d'une session ou l'on s'authentifie auprès d'un WikittyService,
+ dans ce cas on récupère un jeton, c'est le proxy qui se charge d'injecter le
+jeton dans chaque demande auprès du Service. De plus la conversion wikitty
+vers entity business se fait par l'intermédiaire du WikittyProxy.
Added: trunk/wikitty-publication/src/site/rapport/part/wikittymavenplugin.tex
===================================================================
--- trunk/wikitty-publication/src/site/rapport/part/wikittymavenplugin.tex (rev 0)
+++ trunk/wikitty-publication/src/site/rapport/part/wikittymavenplugin.tex 2011-08-29 09:11:40 UTC (rev 1194)
@@ -0,0 +1,227 @@
+\lstset{ %
+language=XML, % the language of the code
+basicstyle=\footnotesize, % the size of the fonts that are used for the code % where to put the line-numbers
+ % the size of the fonts that are used for the line-numbers
+ % the step between two line-numbers. If it's 1, each line
+keywordstyle=\color[rgb]{0,0,1},
+ % will be numbered
+numbersep=5pt, % how far the line-numbers are from the code
+showspaces=false, % show spaces adding particular underscores
+showstringspaces=false, % underline spaces within strings
+showtabs=false, % show tabs within strings adding particular underscores
+tabsize=2, % sets default tabsize to 2 spaces
+captionpos=b, % sets the caption-position to bottom
+breaklines=true, % sets automatic line breaking
+breakatwhitespace=false, % sets if automatic breaks should only happen at whitespace
+title=\lstname, % show the filename of files included with \lstinputlisting;
+ % also try caption instead of title
+escapeinside={\%*}{*)}, % if you want to add a comment with
+morekeywords={project,modelVersion,groupId,description,build, plugin,plugins,configuration, applicationName, wikittyServiceUrl, artifactId,serverID,uploadUrl}
+}
+
+
+\section{Wikitty Publication Maven Plugin}
+
+Wikitty Publication maven plugin, est un plugin maven intégrant les
+fonctionnalités développées pour Wikitty Publication, permettant une une
+utilisation facilitées de ces fonctionnalités.
+
+\subsection{Objectifs}
+
+L'objectif de ce plugin était de rendre utilisable les outils développés pour
+Wikitty Publication, comme la synchronisation ou l'externalisation, mais
+pour cela il fallait passer par les classes java associées.
+
+Or passer par les classes n'est pas "optimal" pour les développeurs, il faut
+leur simplifier la vie, pour que ce genre de d'outil soit disponible
+immédiatement pour leurs besoins.
+
+La meilleure façon pour cela est donc d'avoir un plugin maven associé à
+Wikitty Publication, pour que l'utilisation soit aisée, une solution clé en
+main.
+
+L'utilisation la plus simple consiste donc en la création d'un pom élémentaire
+avec les paramètres pour le plugin, et ensuite de développer sont application
+pour Wikitty Publication et d'utiliser les goals pour publier, essayer, etc.
+
+Pom élémentaire :
+
+\begin{lstlisting}
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.exemple</groupId>
+ <artifactId>stub</artifactId>
+ <version>1.0</version>
+ <description>exemple project</description>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.nuiton.wikitty</groupId>
+ <artifactId>wp-maven-plugin</artifactId>
+ <version>3.2-SNAPSHOT</version>
+ <configuration>
+ <applicationName>example</applicationName>
+ <wikittyServiceUrl>cajo://localhost:1111/wikitty</wikittyServiceUrl>
+ <serverID>serveurTest</serveurID>
+ <uploadUrl>http://localhost/</uploadUrl>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
+\end{lstlisting}
+
+%facilité la vie des dev pour le devellopement d'appli sur wikitty publication
+%tout clés en mains
+%et tout et tout et tout.
+
+\subsection{Goal}
+
+Les goals suivant ont donc été fait pour ce plugin:
+
+\begin{itemize}
+\item wp:init
+\item wp:run
+\item wp:deploy
+\item wp:update
+\item wp:jar
+\item wp:jar-deploy
+\end{itemize}
+
+La commande wp:init sert pour initialiser la bonne architecture pour le projet
+d'application de wikitty publication. Comme suit :
+
+\begin{verbatim}
+src/main/wp
+ #toute les pages
+src/main/ressources/images
+ #stocker les images
+src/main/ressources/jar
+ #stoker les binaires
+\end{verbatim}
+
+La commande wp:run pour lancer Wikitty Publication et y charger l'application
+en cours de développement. Cette commande lance un serveur avec Wikitty Publication
+en utilisant un service type "fallback" qui est un service sur système de fichier,
+l'application peut ainsi être modifiée/testée sans redémarrer le serveur.
+
+La commande wp:deploy pour déployer l'application sur un WikittyService donné,
+l'url de ce service est un paramètre dans le pom : wikittyServiceUrl.
+L'application sera déployée à l'aide du système de synchronisation, et le label
+src/main tel que sur le file system sera remplacée par applicationName paramètre
+aussi dans le pom, il représente le nom de l'application. Sur le WikittyService
+on retrouvera cette organisation:
+\begin{verbatim}
+applicationName.wp
+ #toute les pages
+applicationName.ressources.images
+ #stocker les images
+applicationName.ressources.jar
+ #stoker les binaires
+\end{verbatim}
+
+
+La commande wp:update sert pour mettre à jour le WikittyService sur lequel
+on a précédemment déployé l'application.
+
+La commande wp:jar sert pour externaliser l'application dans un jar avec le
+fonctionnement de l'externalisation, tout en substituant src/main par applicationName,
+un jar parfaitement formé.
+
+La commande wp:jar-deploy sert pour envoyer le jar sur un serveur ou copier
+le jar ailleurs sur le file system. Plus tard son rôle sera la publication
+des jar auprès d'un WikittyServiceJarLoader. Les paramètres de configuration dans
+le pom serverID et uploadUrl sont respectivement pour retrouver dans les
+setting les éléments de configuration du serveur cible, et l'url où l'on
+doit envoyer le jar.
+
+
+\subsection{Fonctionnement}
+
+L'écriture de ce plugin maven n'a pas été une tache trop compliqué, du fait de
+l'existence des implémentations des différents besoins, comme l'externalisation
+ou la synchronisation. Il aura fallu juste réutiliser ces fonctionnalités, voir
+de corriger quelques signatures pour permettre leurs réutilisations.
+
+Il aura aussi fallu réutiliser quelques plugin maven déjà existant comme jetty:run
+pour le déploiement de l'application dans un serveur de test local.
+
+La création d'un plugin maven passe simplement par une implémentation java d'un
+projet avec un pom définissant sa nature de plugin maven. Le reste c'est du java,
+on implémente une interface "Mojo" défini dans maven. On doit aussi à l'aide de
+tag définir certains paramètres, d'autres tags servent aussi pour que le moteur
+de maven puisse injecter des paramètres à l'exécution du plugin permettant de
+récupérer des composants/objet de maven comme le build ou l'objet correspondant
+au pom.
+
+\lstset{ %
+language=java, % the language of the code
+basicstyle=\footnotesize, % the size of the fonts that are used for the code % where to put the line-numbers
+ % the size of the fonts that are used for the line-numbers
+ % the step between two line-numbers. If it's 1, each line
+keywordstyle=\color[rgb]{1,0,1},
+ % will be numbered
+numbersep=5pt, % how far the line-numbers are from the code
+showspaces=false, % show spaces adding particular underscores
+showstringspaces=false, % underline spaces within strings
+showtabs=false, % show tabs within strings adding particular underscores
+tabsize=2, % sets default tabsize to 2 spaces
+captionpos=b, % sets the caption-position to bottom
+breaklines=true, % sets automatic line breaking
+breakatwhitespace=false, % sets if automatic breaks should only happen at whitespace
+title=\lstname, % show the filename of files included with \lstinputlisting;
+ % also try caption instead of title
+escapeinside={\%*}{*)}, % if you want to add a comment with
+morekeywords={@goal}
+}
+
+Exemples:
+
+\begin{lstlisting}
+/**
+ * @goal init
+ */
+public class WPInitMojo extends AbstractWPMojo {
+...
+}
+\end{lstlisting}
+
+Ici le tag goal permet de définir que la commande pour cette classe sera wp:init
+(le wp le préfixe du plugin en question).
+
+\begin{lstlisting}
+ /**
+ * The mandatory application name.
+ *
+ * @parameter expression="${wp.applicationName}"
+ * @required
+ */
+ protected String applicationName;
+
+ /**
+ * The component used for creating artifact instances.
+ * @required
+ * @component
+ */
+ private ArtifactFactory artifactFactory;
+
+\end{lstlisting}
+
+Le tag parameter associé à l'expression permet de récupérer le paramètre de
+configuration du plugin wp dans le pom(comme présenté précédement).
+Le tag component est un tag traité par le moteur de maven qui à l'exécution
+du plugin l'injection de l'objet demandé. C'est à ça que peuvent servir les
+tags dans un plugin maven.
+
+
+%rééutilisation de plug in existant
+
+%Comment qu'on fait un plug in maven:
+%héritage de mojo
+%utilisation de taglet
+%pour récupérer les éléments de l'éxécution
+%comme le pom et tout
+
+
Added: trunk/wikitty-publication/src/site/rapport/part/wikittypublication.tex
===================================================================
--- trunk/wikitty-publication/src/site/rapport/part/wikittypublication.tex (rev 0)
+++ trunk/wikitty-publication/src/site/rapport/part/wikittypublication.tex 2011-08-29 09:11:40 UTC (rev 1194)
@@ -0,0 +1,108 @@
+\section{Wikitty Publication}
+
+Wikitty publication est le sous module Wikitty sur lequel j'ai été amené à
+travailler durant mon stage. Mon travail s'est articulé autour de plusieurs
+partie à l'intérieur de module, avant de rentrer dans le détail, il me faut
+présenter le module Wikitty Publication.
+
+\subsection{Concept}
+
+Wikitty publication est un projet basé sur wikitty, dont le but est de permettre
+la création d'application web et leur exécution directement à l'intérieur de
+Wikitty Publication. Publication se présente comme un ensemble de page web qui
+permettent le rendu des wikitty dans un navigateur, ainsi que leurs modifications,
+comme dans un wiki. On distingue des extensions particulières, une extension
+pour les data comme les images et une extension pour le code applicatif.
+
+Les applications doivent pouvoir être développées dans plusieurs langage, pas
+dans un langage spécifique à publication, des langages tel que:
+\begin{itemize}
+\item javascript
+\item groovy
+\item jruby
+\item jython
+\end{itemize}
+
+Ce module doit permettre le développement des applications naturellement
+en développant sur un système de fichier, puis l'importation des applications
+directement dans Wikitty Publication.
+
+Un des objectifs de Wikitty Publication est aussi d'avoir un cœur métier
+écrit en wikitty, qui manipulerait des données d'un autres WikittyService, ainsi on
+pourrait avoir une mutualisation du code métier et des données spécifique
+pour chaque client, utilisateur de Wikitty Publication.
+
+Wikitty publication s'appuie sur le scripting pour l'exécution du code contenu
+dans les wikitty.
+
+
+\subsection{Scripting}
+
+Le scripting permet l'éxécution de langage de script par un autre langage, dans
+notre cas ici, le java qui peut interpréter de langage comme javascript.
+
+Le langage de script est interprété par un script engine tel que le concept est
+défini dans la JSR-223 \footnote{JSR-223 Scripting for java: http://www.jcp.org/en/jsr/detail?id=223}.
+Un script engine permet l'interprétation et l'exécution
+du langage pour lequel il est défini, mais il permet aussi d'insérer des éléments
+de code provenant de l'environnement qui l'exécute. Par exemple on peut initialiser
+une variable javascript avec le contenu d'une variable java, et on peut appeler
+des méthodes java sur des variables java dans le javascript.
+
+Ce mécanisme est un binding, le script engine pour les symboles qu'il ne connait
+pas, avant de renvoyer une erreur, il va chercher dans une map dit de binding
+pour trouver l'objet qui correspond au symbole, et l'interpréter en java pour
+insérer le résultat dans le code.
+
+Exemple :
+
+un objet personne dans la map binding, en clé la chaine "personneBob" et en valeur
+l'objet, avec en attribut un nom égal à "Paulson" et un attribut prénom égal à
+"Robert".
+
+Un morceau de code js qui sera exécuté:
+
+\lstset{ %
+language=JAVA, % the language of the code
+basicstyle=\footnotesize, % the size of the fonts that are used for the code % where to put the line-numbers
+ % the size of the fonts that are used for the line-numbers
+ % the step between two line-numbers. If it's 1, each line
+keywordstyle=\color[rgb]{,0,1},
+ % will be numbered
+numbersep=5pt, % how far the line-numbers are from the code
+showspaces=false, % show spaces adding particular underscores
+showstringspaces=false, % underline spaces within strings
+showtabs=false, % show tabs within strings adding particular underscores
+tabsize=2, % sets default tabsize to 2 spaces
+captionpos=b, % sets the caption-position to bottom
+breaklines=true, % sets automatic line breaking
+breakatwhitespace=false, % sets if automatic breaks should only happen at whitespace
+title=\lstname, % show the filename of files included with \lstinputlisting;
+ % also try caption instead of title
+escapeinside={\%*}{*)}, % if you want to add a comment with
+morekeywords={project,modelVersion,groupId,description,build, plugin,plugins,configuration, applicationName, wikittyServiceUrl, artifactId,serverID,uploadUrl}
+}
+
+\begin{lstlisting}
+var result =
+" <h1>Index</h1>\n"+
+" His name was "+ personneBob.getPrenom() + personneBob.getNom()\n";
+var ponay ="";
+
+
+wpContext.setContentType("text/html");
+result;
+\end{lstlisting}
+
+
+
+A l'exécution sera affiché "His name was Robert Paulson", le javascript sera interprété
+normalement, en y joignant les chaines récupérées dans les bindings. Là l'exemple
+est simple, mais en pratique cela permet de faire beaucoup de chose.
+
+Dans notre cas avec nos bindings (voir les annexes pour les bindings disponible),
+on peut dans du code qui se fera évaluer appeler l'évaluator sur un autre contenu.
+
+
+
+
Added: trunk/wikitty-publication/src/site/rapport/part/wikittypublicationexternalize.tex
===================================================================
--- trunk/wikitty-publication/src/site/rapport/part/wikittypublicationexternalize.tex (rev 0)
+++ trunk/wikitty-publication/src/site/rapport/part/wikittypublicationexternalize.tex 2011-08-29 09:11:40 UTC (rev 1194)
@@ -0,0 +1,211 @@
+\lstset{ %
+language=JAVA, % the language of the code
+basicstyle=\footnotesize, % the size of the fonts that are used for the code % where to put the line-numbers
+ % the size of the fonts that are used for the line-numbers
+ % the step between two line-numbers. If it's 1, each line
+keywordstyle=\color[rgb]{1,0,1},
+ % will be numbered
+numbersep=5pt, % how far the line-numbers are from the code
+showspaces=false, % show spaces adding particular underscores
+showstringspaces=false, % underline spaces within strings
+showtabs=false, % show tabs within strings adding particular underscores
+tabsize=2, % sets default tabsize to 2 spaces
+captionpos=b, % sets the caption-position to bottom
+breaklines=true, % sets automatic line breaking
+breakatwhitespace=false, % sets if automatic breaks should only happen at whitespace
+title=\lstname, % show the filename of files included with \lstinputlisting;
+ % also try caption instead of title
+escapeinside={\%*}{*)}, % if you want to add a comment with
+morekeywords={project,modelVersion,groupId,description,build, plugin,plugins,configuration, applicationName, wikittyServiceUrl, artifactId,serverID,uploadUrl}
+}
+
+
+
+\section{Wikitty Publication Externalize}
+
+La partie Externalize de Wikitty Publication concerne les fonctionnalités
+d'externalisation des wikitty. C'est à dire prendre des wikitty stockés sur un
+système de fichier, via le service correspondant précédemment développé, compiler
+ces wikitty et les stocker dans un jar.
+
+L'objectif recherché par cette partie de Wikitty Publication est la performance,
+en ayant du code compilé on gagne évidement en rapidité d'exécution des wikitty
+compilé. Et du code non modifiable, par exemple dans le cadre de l'utilisation
+multi-contexte, on pourrait avoir un service s'appuyant sur des wikitty stockés
+dans un jar.
+
+Comme pour la synchronisation vers file system, sont concernés par ce mécanisme
+uniquement les Wikitty représentable sur file system. Comme les wikittyPubData,
+qui ne seront pas affecté par le mécanisme. Et les wikittyPubText qui eux seront
+compilé dans le processus d'externalisation.
+
+Un des objectifs, plus secondaire, est la possibilité d'intégrer ce mécanisme
+en tache Ant, ou un plug in maven.
+
+\subsection{Une nouvelle extension de WikittyPub}
+
+Les wikittyPubText qui auront été externalizé, et donc compilé, doivent toujours
+être considéré comme des wikitty, avec toutes les propriétés liées. Pour ce
+faire on définit une extension de WikittyPubText qui contiendra un champ nommé
+ByteCode de type tableau de byte.
+
+Ainsi pour ce type de wikitty d'un coté on aura le code original du
+wikittyPubText dans le champ content et le code java compilé dans le champ
+ByteCode. Cela permet d'avoir l'original dans le cas où l'on voudrait écrire
+un nouveau wikitty avec le même code, ou dans le cas d'une surcharge si
+multi-contexte.
+
+\subsection{Mécanisme de transformation/compilation}
+
+Tout le mécanisme de transformation des WikittyPubText en WikittyPubTextCompiled
+doit doit respecter la finalité de ces wikitty, c'est à dire que le code qu'ils
+contiennent soit exécutable et exécuté.
+
+Quelque soit le contenu des WikittyPubText ils sont compilé, normalement pour les
+langages visés, tel le javascript on ne peut pas le compiler comme on le pourrait
+pour du java. Ce qui est fait c'est que ce code est encapsulé dans un morceau
+de java qui invoque le script engine chargé de son exécution.
+
+Pour le java comme pour l'évaluation on accepte uniquement un corps de méthode,
+corps encapsulé dans la même méthode que pour du code non java:
+
+
+\begin{lstlisting}
+package org.nuiton.wikitty.publication;
+
+import java.util.Map;
+
+public abstract class AbstractDecoredClass {
+ public abstract Object eval(Map<String, Object> bindings) throws Exception ;
+}
+\end{lstlisting}
+
+Donc dans les deux cas le code java qui décore est presque le même, dans le
+cas de java on dépile les éléments de binding avant de remplir le corps de la
+méthode, et dans le cas de wikittyPubText on délègue les bindings à l'évaluator.
+Des exemples de code décoré en annexe.
+
+Et donc dans le processus d'évaluation par Wikitty Publication de ces
+WikittyPubTextCompiled on invoquera directement la méthode eval en lui passant
+les bindings.
+
+En dehors de la compilation et décoration des wikitty, le mécanisme est
+relativement simple. On sélectionne tous les wikitty du dossier local où on
+se trouve avec le service file system, on créer un dossier temporaire,
+on y écrit les wikitty, on compile ceux qui doivent l'être, on y met le fichier
+wikitty original avec le code qu'il contient, un .java et le .class, puis le
+dossier est packager en jar, et le dossier temporaire supprimé.
+
+
+\subsection{Sauvegarde des propriétés des wikitty}
+
+De la même façon que pour le stockage des wikitty sur file system afin de
+pouvoir réutiliser les wikitty et garantir que ce sont toujours des wikitty,
+il faut une inversibilité de la sauvegarde, et donc conserver des propriétés des
+wikitty.
+
+Contrairement à la sauvegarde des wikitty sur File System, ici on peut se
+permettre de centraliser toutes les informations dans les mêmes fichiers de
+propriétés.
+
+Les propriétés conservées seront: les id, les versions ainsi que les MimeType
+des fichiers correspondant. On utilise deux fichiers de propriétés distinct,
+un pour les id et les localisations des wikitty, et un autre pour les autres
+propriétés.
+
+Exemple: % plutot mettre une image
+
+jar:
+\begin{verbatim}
++jar
+|id.properties
+|meta.properties
+|+wp
+||Wiki.wp
+||Wiki.java
+||Wiki.class
+||Logo.png
+||Stat.wp
+||Stat.java
+||Stat.class
+||Home.wp
+||Home.java
+||Home.class
+||WikiMenu.wp
+||WikiMenu.java
+||WikiMenu.class
+||+dossier
+|||dummy.wp
+|||dummy.java
+|||dummy.class
+|||uneAutreImage.jpg
+|||uneImage.jpg
+\end{verbatim}
+
+Fichiers de propriétés correspondant:
+
+
+ids.properties:
+\begin{verbatim}
+62c7d0cd-91c2-4607-bdcf-f0cac6c78d6e=wp/Wiki
+4120d1ba-18ac-4ac5-a329-7f515f704fd0=wp/Logo
+8225d3cb-beb3-4a85-a4ea-4b0e660fab96=wp/Stat
+1968c510-6ba6-4de7-bbb0-67e029119520=wp/WikiMenu
+2ca85aa8-2869-4ad6-8976-c0b0b5526934=wp/dossier/dummy
+12f55beb-af63-49b1-9d74-62131bd0a67a=wp/Home
+b7599025-f425-4dcf-88e6-55e154430d7e=wp/dossier/uneAutreImage
+e443dbbe-b461-41bd-b5b6-b612e964cb0d=wp/dossier/uneImage
+\end{verbatim}
+
+
+meta.properties
+\begin{verbatim}
+#
+#Tue Jul 12 11:19:46 CEST 2011
+8225d3cb-beb3-4a85-a4ea-4b0e660fab96.mime=text/javascript
+4120d1ba-18ac-4ac5-a329-7f515f704fd0.mime=image/png
+12f55beb-af63-49b1-9d74-62131bd0a67a.mime=text/javascript
+1968c510-6ba6-4de7-bbb0-67e029119520.mime=text/javascript
+62c7d0cd-91c2-4607-bdcf-f0cac6c78d6e.mime=text/javascript
+e443dbbe-b461-41bd-b5b6-b612e964cb0d.mime=image/jpg
+b7599025-f425-4dcf-88e6-55e154430d7e.mime=image/jpeg
+2ca85aa8-2869-4ad6-8976-c0b0b5526934.mime=text/javascript
+12f55beb-af63-49b1-9d74-62131bd0a67a.version=1.0
+1968c510-6ba6-4de7-bbb0-67e029119520.version=1.0
+2ca85aa8-2869-4ad6-8976-c0b0b5526934.version=1.0
+4120d1ba-18ac-4ac5-a329-7f515f704fd0.version=1.0
+62c7d0cd-91c2-4607-bdcf-f0cac6c78d6e.version=1.0
+b7599025-f425-4dcf-88e6-55e154430d7e.version=1.0
+e443dbbe-b461-41bd-b5b6-b612e964cb0d.version=1.0
+8225d3cb-beb3-4a85-a4ea-4b0e660fab96.version=1.0
+\end{verbatim}
+
+
+Sous l'id on sauvegarde le chemin pour retrouver le wikitty correspondant,
+avec le mimeType qui permet de retrouver l'extension du fichier, qui sera sauvegardé
+aussi dans le jar, on aura ainsi le fichier original un ".js" par exemple,
+et à coté les ".java" et ".class" correspondant aux versions décorées, compilées .
+
+
+\subsection{Wikitty Service sur jar}
+
+Une fois que les wikitty sont sauvegardés dans un jar, on doit pouvoir les
+récupérer pour les utiliser comme n'importe quels autres wikitty. Pour celà il
+faut donc un wikitty service qui s'appuiera sur un jar et qui exposera les
+wikitty de la même façon.
+
+Ce service propose donc les méthodes de recherche, et de restauration de wikitty,
+mais évidement pas les méthodes de sauvegarde, puisque le but est bien d'avoir
+des wikitty non modifiable.
+
+La création de ce service à été facilité par l'existence du service sur file
+system, puisque le fonctionnement est relativement le même, pour la recherche
+on ne délègue pas à une base de donnée, on manipule directement les objets en
+java, donc pour la recherche c'est le même mécanisme que pour le service sur
+file system.
+
+Ce service sur jar peut s'appuyer sur plusieurs jar, dans sa configuration
+il prend un dossier, dossier qui contient des jar, et il construit un index
+des wikitty disponible avec les fichiers de propriétés.
+
+
Added: trunk/wikitty-publication/src/site/rapport/part/wikittypublicationsite.tex
===================================================================
--- trunk/wikitty-publication/src/site/rapport/part/wikittypublicationsite.tex (rev 0)
+++ trunk/wikitty-publication/src/site/rapport/part/wikittypublicationsite.tex 2011-08-29 09:11:40 UTC (rev 1194)
@@ -0,0 +1,288 @@
+\section{Wikitty Publication Site}
+
+La partie site de Wikitty Publication concerne des fonctionnalités
+destinées à l'administration et les éléments cœur du moteur de publication
+comme l'interprétation du code contenu dans les WikittyPubText.
+
+Ces fonctionnalités ou pages principales sont :
+\begin{itemize}
+\item Raw, qui permet l'affichage des WikittyPubData exemple des images
+\item Edit, qui permet de créer ou d'éditer des wikitty
+\item Eval, qui permet l'évaluation du code contenu dans un WikittyPubText
+\item View, qui permet l'affichage et la recherche des wikitty
+\end{itemize}
+
+Un premier prototype avait été réalisé c'était la base de travail, ce prototype
+était fait avec des jsp/servlet simplement sans support d'un quelconque
+framework comme struts.
+
+Le travail sur cette partie de publication se concentrait donc sur
+l'amélioration de ce prototype sous différent aspect.
+
+
+\subsection{Migration vers struts}
+
+Le premier aspect de l'amélioration du prototype était de migrer les jsp/servlet
+vers le framework struts. Struts est un donc un framework qui permet un bon
+support du modèle MVC pour les applications web.
+
+Struts permet au développeurs de se concentrer sur la vue et le modèle de son
+application Web, à la charge de struts l'aspect contrôleur du modèle MVC. En
+effet on peut définir l'enchainement des actions effectuées et la page qui sera
+affiché en conséquence.
+
+Dans struts on parle d'action, de package et d'intercepteur, les packages
+regroupent les actions et les piles d'intercepteurs. Ces packages peuvent en
+étendre d'autre et donc hériter de leurs propriétés. Les packages peuvent
+posséder un 'namespace' qui leur permet d'être défini pour un sous espace de
+l'application.
+
+\begin{figure}[!ht]
+\centering
+\includegraphics[height=6cm,width=17cm]{image/strutsexplain.png}
+ \caption{Diagramme Struts}
+ \label{diagstruts}
+\end{figure}
+
+Les intercepteurs et piles d'intercepteurs sont des objets qui effectue un pré
+traitement sur les requêtes http reçu par l'application, la figure \ref{diagstruts}
+montre le cheminement possible d'une requête. Le champ d'action des intercepteurs
+est grand, ils ont accès à la session, le contexte, les requêtes http et d'autres choses.
+
+Les actions permettent de décrire l'enchainement des 'écrans', les classes java
+qui doivent exécuter un traitement après la validation d'un formulaire jsp, la
+jsp à afficher et d'autres.
+
+Cette configuration de struts se fait grâce à des xml, ensuite il suffit
+simplement d'écrire des classes java qui implémentent des interfaces
+spécifiques.
+
+Un des aspect important de la migration vers struts aura été la conversation des
+url correspondant aux actions de publications, les url doivent être sous cette
+forme :
+\begin{verbatim}
+/[contextData]/[contextApps]/[action]/[mandatory_args]?[args key=value]
+\end{verbatim}
+
+Les actions:
+\begin{itemize}
+\item Raw
+\item Edit
+\item Eval
+\item View
+\end{itemize}
+
+Le contextData et contextApps seront développé dans la section suivante. Les
+mandatory args servent pour les actions: Raw, Eval et Edit pour trouver le bon
+objet wikitty correspondant. Par exemple :
+
+\begin{verbatim}
+/edit/elt_id:928b573e-b76f-4ffc-95a1-205798034330
+/eval/WikittyPubText.name:Wiki
+/raw/Wiki
+\end{verbatim}
+
+%format des urls à mettre ici
+
+Respectivement :
+\begin{itemize}
+\item l'action edit pour le wikitty avec l'id correspondant
+\item l'action eval pour le wikittyPubText qui possèdent le champ name égal à
+Wiki
+\item l'action raw pour le wikitty qui possède un champ nom égal à Wiki
+\end{itemize}
+
+Ces deux derniers exemples montrent plusieurs formats pour retrouver un même
+wikitty.
+
+Les actions de publication Raw et Eval sont un peu particulières, contrairement
+aux deux autres elles n'ont pas de page jsp de rendu, les actions View et Edit
+ont des jsp pour l'affichage et l'édition/création de wikitty.
+
+L'action Raw par exemple pour les WikittyPubText et PubData affiche le contenu
+des wikitty en fonction de leur mime type, et donc construit lui même son rendu
+html sans passer par une jsp.
+
+L'action Eval elle sert sert du mime type d'un WikittyPubText pour déterminer le
+langage associé au contenu et finalement exécute le code, le résultat de
+l'exécution est donc ensuite renvoyé en tant que résultat.
+
+\subsection{Moteur d'évaluation}
+
+Le moteur d'évaluation s'appuie sur le concept de scripting comme précédemment
+évoqué, on a pu voir que dans les adresses des actions il y a deux paramètres
+dont je n'ai pas vraiment parlé: \emph{contextData} et \emph{contextApps}.
+
+C'est qu'ils prennent toutes leurs importances dans le mécanisme d'évaluation,
+ce mécanisme est délégué au script engine qui va interpréter le contenu
+d'un WikittyPubText en fonction de son mimeType et renvoyer simplement un
+WikittyPubData de la même façon.
+
+Dans ce cadre contextData sert pour savoir connaitre les propriétés, donc
+quels WikittyService instancier. Comme précédement expliqué les WikittyService
+sont instanciés avec des fichiers de propriété, par défaut il existe deux fichiers
+dans l'application qui définisse un wikitty service "classique" avec une base
+de données h2, un dossier de stockage, ainsi qu'un wikitty service sur jar
+en fallback.
+
+Le contextData sert pour deux choses dans ce cadre, il permet de charger un
+fichier de propriété supplémentaire s'il existe voir sur la figure
+\ref{propertiescontext} , et de définir le dossier de stockage de la base.
+
+\begin{figure}[!ht]
+\centering
+\includegraphics[height=3cm,width=6cm]{image/propertiescontext.png}
+ \caption{Fonctionnement du ContextData}
+ \label{propertiescontext}
+\end{figure}
+
+Si par exemple l'adresse de l'action est \verb!/codelutin/chorem/eval/menu.action!
+alors on chargera les propriétés par défaut. On cherchera un fichier de propriété
+codelutin s'il existe(qui peut écraser des propriétés existantes) et un sous dossier
+sera créé pour le contexte de l'application \verb!codelutin!, isolant totalement
+d'un autre contexte \verb!/wp/chorem/eval/menu.action! par exemple, ça ne sera
+pas les mêmes base de donnée, on peut isoler ainsi les contextes
+
+ContextData sert donc pour isoler les services et leurs bases.
+
+ContextApps lui son rôle est "d'isoler" les applications et éviter les collisions
+de nom entre les wikitty. Les noms ne sont pas unique et on peut se retrouver
+dans un même wikitty service avoir plusieurs wikittyPub qui ont les mêmes noms par
+exemple: "menu". Le but est d'éviter des confusions, par exemple une action
+\verb!/codelutin/chorem/eval/menu.action! on va aller chercher le wikittyPub
+avec le nom "menu" dont l'un des labels commence par "chorem", cela permet de
+regrouper les applications sous les mêmes labels, ainsi si dans le contenu du
+"menu" il y a un appel vers un autre wikitty, le moteur "sait" qu'il doit
+aller le chercher sous le même label.
+
+
+\subsection{Ajout d'un mécanisme de login/logout}
+
+Les couches sécurité des WikittyService s'occupe déjà d'un mécanisme de login
+et d'une gestion des droits en fonction. Les utilisateurs sont stockés en tant
+que wikitty dans la base et on peut attribué des droits à ces utilisateurs.
+Ensuite via un WikittyService on peut se loger, sur une authentification on
+récupère un jeton qui sera à passer pour chaque action, cela est géré par le
+WikittyProxy qui encapsule le WikittyService.
+
+Donc pour vérifier qu'une authentification s'est bien passé il faut regarder
+dans le proxy si l'utilisateur est présent. Dans le cas de Wikitty Publication
+au moment de l'action de login, délégué au proxy, on va stocker le jeton et
+l'utilisateur dans la session.
+
+Évidement le mécanisme de Logout lui nettoie simplement la session en la vidant
+de ces informations.
+
+Ensuite le fonction de la gestion de l'authentification se repose sur le
+mécanisme d'intercepteur et de package de struts. On défini une pile
+d'intercepteur personnalisée qui en plus de la pile par defaut rajoute un
+intercepteur d'authenfication qui vérifiera la présence des informations
+utilisateur dans la session, et bloquera l'accès à la page demandé si
+l'utilisateur n'est pas authentifié.
+
+On définit que l'accès aux actions publication utilise cette pile d'intercepteur
+qui gère l'authentification, c'est ainsi que fonctionne le mécanisme dans
+Wikitty Publication.
+
+\subsection{Amélioration des pages d'affichage et d'édition}
+
+Les pages d'édition et d'affichage des wikitty étaient relativement simple, le
+but étant une administration simple et efficace des wikitty. L'amélioration de
+ces pages à consisté en la correction des bugs présent déjà dans le prototype.
+
+Par exemple le support pour les recherches dans wikitty dans la page view,
+dans le prototype cette recherche était très limité et donc ne fonctionnait pas
+très bien. De plus l'affichage des résultats nécessitait une amélioration.
+
+Ensuite pour l'interface d'édition des wikitty j'ai intégré un décorateur de
+Text Area qui permet une colorisation du contenu du champ, on peut choisir le
+langage présent dans le champ pour avoir une colorisation, de l'indentation, des
+outils de recherche/remplacer et d'autre. Une sorte d'ide basique pour
+faciliter le développement de code dans les WikittyPubText.
+
+% mettre screen shot du décorateur de textarea
+
+
+\subsection{Mécanisme de multicontext}
+
+Cette fonctionnalité consiste en fait à l'encapsulation par un WikittyService
+de deux autres WikittyService, quelque soit leurs natures, c'est un
+WikittyFallbackService. On peut voir un schéma de fonctionnement sur la figure
+\ref{diagmulticontext}
+
+Ce multi-contexte exécute ses recherches un WikittyService principal, et
+compléte ses recherches si besoin avec les données du WikittyService dit
+fallback. A titre d'exemple si on effectue une recherche que l'on réclame un
+résultat d'au moins 30 wikitty, si à l'issue de la recherche sur le WikittyService
+principal il n'y a pas 30 wikitty, alors on cherchera sur le service
+fallback pour compléter la recherche.
+
+Ainsi si l'on cherche à retrouver un wikitty particulier avec son id, si il
+se trouve sur le principal ça sera le wikitty du principal qui sera renvoyé,
+par contre si il ne se trouve pas sur celui si, on ira le chercher sur le second
+service.
+
+De même l'écriture s'effectue sur le service principal, on n'écrit pas sur le
+service de fallback.
+
+\begin{figure}[!ht]
+ %[height=12cm,width=15cm]
+\centering
+\includegraphics{image/multicontext.png}
+ \caption{Diagramme multicontexte}
+ \label{diagmulticontext}
+\end{figure}
+
+
+Son utilisation n'est pas nécessairement limité à Wikitty Publication, il s'agit
+finalement d'une implémentation différente de l'interface WikittyService.
+
+Ce mécanisme peut permettre la surcharge d'un wikitty, dans le sens ou on peut
+modifier un wikitty qui aura été chargé depuis le fallback, mais à la sauvegarde
+il sera restauré depuis le wikitty principal, puisque celui ci est prioritaire.
+
+On peut avoir ainsi un WikittyService statique, et un autre dynamique, par
+exemple le WikittyService statique qui serait partagé et utilisé par d'autre
+WikittyService multicontext, une base commune de wikitty.
+
+Ce WikittyService à été pensé et écrit pendant l'enrichissement de la partie
+site de Wikitty Publication, l'idée d'utilisation d'un tel service, est la
+mutualisation d'une application dans un WikittyService, et que cette
+application utilise des données issues de d'autre service. On mutualise le code
+métier, de sorte que plusieurs clients puissent utiliser la même application,
+avec le même service, mais que leurs données soit sur leurs services.
+Le service fallback contiendrait l'application et le service principal
+l'application.
+
+\subsection{Intégration d'interface graphique}
+
+Les applications exécuté au sein de Wikitty Publication le seront à travers
+un navigateur web donc le résultat présenté dans un format compatible.
+Donc générélament pour proposer des choix utilisateurs il faudra des interfaces
+en html.
+
+Le html peut être "aisément" intégré dans du javascript et quand l'évaluateur
+évaluera le javacript et écrira le html contenu dans les variables javascript
+mais cette solution rends l'écriture du code interface pénible.
+
+La solution la plus simple qui a été trouvé est d'avoir la possibilité d'écrire
+du html (pour le moment plus tard d'autre langage) et de faire comme si on était
+dans une jsp, quand on a besoin d'écrire code on ouvre des balises : \verb!<% \%>!
+ou \verb!<%= \%>! et on écrit le code correspondant.
+
+Ce qui se passe derrière c'est que on inverse le code, ce qui se trouve entre
+les balises devient du code exécutable, et ce qui se trouve autour se retrouve
+décoré. Tout simplement comme si initialement le html avait été intégré dans
+le code d'un langage interprété par publication.
+
+Une autre solution était envisagé, qui voulait considérer le html comme un langage
+supporté par publication, et extraire les éléments de binding mais c'était plus
+compliqué.
+
+Une nouvelle fois on va jouer avec le mimeType pour les WikittyPubText qui
+seront des IHM. On leur mettra un mimeType composé de forme: text/html.javascript,
+ce qui signifiera que l'on a un WikittyPubText qui entre les balises de délimitation
+contient du javascript, et que l'on doit se servir des règles de décoration javascript.
+Et que après décoration le contenu sera de mimeType: text/javascript.
+
+Voir annexes pour exemples de décoration interface.
Added: trunk/wikitty-publication/src/site/rapport/part/wikittypublicationsync.tex
===================================================================
--- trunk/wikitty-publication/src/site/rapport/part/wikittypublicationsync.tex (rev 0)
+++ trunk/wikitty-publication/src/site/rapport/part/wikittypublicationsync.tex 2011-08-29 09:11:40 UTC (rev 1194)
@@ -0,0 +1,268 @@
+\section{Wikitty Publication Synchronisation}
+
+La partie synchronisation de Wikitty Publication concerne des fonctionnalités
+destinées à importer une application auprès d'un WikittyService. Mais pas
+seulement, on doit pouvoir synchroniser deux WikittyService quelque soit son
+implémentation, que ce soit un client cajo, hessian, un client base de donné ou
+même un WikittyService sur file system.
+
+Cette approche de la synchronisation permet une grande flexibilité de
+l'application et permet à terme la synchronisation de wikitty entre WikittyService,
+ et pas seulement ceux concerné par l'aspect publication.
+
+Cette approche implique la création d'une implémentation spécifique d'un wikitty
+service pour stocker des wikitty en fichier et restaurer des fichiers en
+wikitty.
+
+
+\subsection{Correspondance Fichiers/Wikitty}
+
+Un fichier est défini par un nom, une extention, un contenu et un chemin.
+dans Wikitty Publication les fichiers sont convertis en fonction de leurs type
+en objet wikitty. Les fichiers sources sont convertit en WikittyPubText et les
+fichiers binaires(eg image, etc) en WikittyPubData.
+
+Ces deux types de wikitty pourrons être dénommés dans la suite sous le nom
+WikittyPub.
+
+Les deux types d'objet ont les mêmes attributs:
+\begin{itemize}
+\item Name: correspondant au nom du fichier
+\item MimeType: correspondant au type mime du contenu, qui donnera l'extension
+\item Content: le contenu binaire pour pour les PubData et textuel pour les
+PubText
+\end{itemize}
+
+Le mimetype détermine le contenu, le mime type est un élément très important,
+la détermination du mimetype d'un fichier n'est pas laissé à une librairie,
+elle est déterminer par un mimeTypeHandler qui contient un mapping défini
+qui permet de connaitre l'extension du fichier et si il s'agit d'un
+WikittyPubText ou WikittyPubData. Le mimeType est aussi très important dans
+le processus d'évaluation d'un WikittyPub.
+
+A ces objets wikitty on associe un wikittyLabel, c'est un objet qui peut
+contenir un ensemble de label différent, un label une chaine de texte.
+Par exemple le label : \emph{src.org.chorem.entities} sert ici pour contenir le
+chemin menant au fichier sur le file system. Un WikittyPub peut avoir un ou
+plusieurs de label, pour les WikittyPub cela indiquera qu'ils appartiennent à
+plusieurs arborescences.
+
+Pour enregistrer un wikitty en fichier, il suffit de construire l'arborescence
+des dossiers en fonction du label du WikittyPub. Le nom du fichier est donné
+par l'attribut nom du WikittyPub, son contenu aussi et l'extension par le mimeType.
+
+Pour assurer la restauration d'un WikittyPub qui aura été sauvegardé en fichier,
+il faut enregistrer en plus des informations supplémentaire. Comme tout Wikitty,
+les WikittyPub possèdent un numéro de version ainsi qu'un id qui les identifient
+de façon unique.
+
+Il faut donc enregistrer ces informations, de plus il faut que le wikitty
+service sur file système gère les modifications sur wikitty et donc modifie la
+version des wikitty si besoin.
+
+La solution qui à été trouvée pour celà est les fichiers de propriétés dans un
+dossier \emph{.wp/}.
+
+On distinguera deux fichiers de propriétés pour les informations, un qui
+conservera les id des wikitty liés à leur nom de fichier. Et un autre fichiers de
+propriété qui conservera un checksum, la version et les id aussi. En sus de
+la sauvegarde des "meta information" des wikitty, ce fichier de propriété
+conservera le nom du label courant, rendant immédiat la restauration (pas
+besoin de traitement complexe sur les noms de fichiers/dossiers).
+
+On conserve les id dans un premier fichier puisque cela permet simplement de
+récupérer l'ensemble des id et leurs noms de fichier lié, sans avoir besoin de
+faire le tri parmi toutes les propriétés enregistrées. On converse l'id aussi
+dans un autre fichier de propriété, à défaut d'avoir un systeme d'enregistrement
+clé/valeur bidirectionnel.
+
+La propriété checksum sera utilisée pour enregistrer la somme de contrôle de
+l'objet lors de son enregistrement, pour plus tard, savoir si celui ci à été
+modifié depuis lors.
+
+Exemple pour un contenu de file system:
+\begin{verbatim}
+ +racine
+ |script.js
+ |test.java
+ |image.png
+ |+.wp
+ ||ids.properties
+ ||meta.properties
+ |+directory2
+ ||script3.js
+ ||+.wp
+ |||meta.properties
+ |||ids.properties
+ ||+directory3
+ |||truc.js
+ |||+.wp
+ ||||meta.properties
+ ||||ids.properties
+ |+directory22
+ ||machin.png
+ ||+.wp
+ |||versions.properties
+ |||ids.properties
+\end{verbatim}
+
+
+Exemples de fichiers de propriétés:
+\begin{verbatim}
+racine/.wp/meta.properties:
+
+current.label=racine
+script.js.version=0.2
+version.scripttut.js=1.5
+version.image.png=12.0
+checksum.script.js=c48e20c27c00779be486ecac8f03c8e7
+checksum.scripttut.js=bffba35cafca7ad1ac9eee1b643579aa
+checksum.image.png=c48e20c27c00779be486ecac8f03c8e7
+id.image.png=97410079-2c0c-47db-958e-8309d7147e2e
+id.test.java=96fe0754-5ba5-47d5-a763-0adf0e839e47
+id.script.js=d5a2597f-c44f-4ed6-a16e-01371ec6d2d0
+\end{verbatim}
+
+\begin{verbatim}
+racine/.wp/ids.properties:
+
+97410079-2c0c-47db-958e-8309d7147e2e=image.png
+96fe0754-5ba5-47d5-a763-0adf0e839e47=test.java
+d5a2597f-c44f-4ed6-a16e-01371ec6d2d0=script.js
+\end{verbatim}
+
+\subsection{Un wikitty service file system}
+
+Un WikittyService implémenté pour un système de fichier doit pouvoir enregistrer
+des wikitty en fichier et inversement. Pour se faire il se servira des fichiers
+de propriétés précédemment exposé, et des conversions telles qu'elles le sont
+proposées.
+
+En plus de la sauvegarde, restauration et suppression, ce type de WikittyService
+doit, c'est la base du système de synchronisation, gérer les recherches par
+critère des wikitty comme si il était stocké de façon classique dans une base.
+
+Pour correctement gérer ces options de sauvegarde, restauration, gestion de
+version des wikitty, pour tout appel à la recherche ce wikitty service indexe
+l'ensemble des fichiers:
+\begin{itemize}
+\item vérifie si il y a des nouveaux fichiers en comparant les valeurs dans les
+fichier de propriétés "id.properties". Si il ya des nouveaux fichiers, il créer
+des id, calcul les sommes de contrôle et enregistre le tout dans les fichiers de
+propriétés.
+\item il vérifie les sommes de contrôles des fichiers existants, et incrémente la
+version pour ceux qui ont changé, et il met à jour la somme de contrôle
+\item il cherche si des fichiers ont été supprimé, et le cas échéant enlève les
+infos concernant le wikitty correspondant au fichier supprimé
+\end{itemize}
+
+Avec ces fonctions le wikitty service file system est "complet" pour la
+synchronisation, et pour tout autre utilisation.
+
+Le mécanisme qui indexe créer automatiquement les fichiers de propriété
+nécessaire, ce qui implique que une arborescence de fichier peut être converti
+en wikitty de cette façon, nul besoin d'initialiser un espace de travail en en
+le créant à partir de wikitty, tout dossier peut devenir "une base wikitty".
+
+\subsection{Fonctionnalités de synchronisation}
+
+\subsubsection{Sync}
+
+La fonctionnalité sync permet de transférer l'ensemble des wikitty ciblés par
+l'uri, d'un service wikitty à un autre. Son fonctionnement doit est similaire à
+la commande linux "rsync".
+
+Quelques options on été reprise:
+\begin{itemize}
+\item Recursion pour savoir si l'on s'occupe des sous labels du label ciblé.
+\item Update, qui permet de mettre à jour la cible et d'y envoyer les nouveaux
+wikitty. Par défaut cette option est active, et est désactivée lorsque
+les autres options (delete ou existing) sont choisis.
+\item Existing qui est un update mais sans l'envois des nouveaux fichiers, on
+envois juste ce qui à été mis à jour et qui existe sur le wikitty service cible.
+\item Delete pour supprimer dans le WikittyService cible, ce qui n'existe plus
+dans le WikittyService origine.
+\end{itemize}
+
+La suppression n'est pas une vraie suppression, elle se contente de supprimer le
+label ciblé du wikitty. L'éventuel suppression définitive du wikitty si celui ci
+se retrouve sans label est à la charge du service.
+
+La partie protocole de l'uri permet de retrouver la bonne implémentation pour
+communiquer avec le WikittyService désigné.
+
+La commande:
+
+\verb!wp sync [--norecursion] [--delete|--existing] [URI orgirine] [URI cible]!
+
+Avec URI sous forme:
+\begin{itemize}
+\item file:///truc/machin/\#label
+\item hessian://www.adresse.com:8827/etc/etc\#label
+\item cajo://www.adresse.com:8827/etc/etc\#label
+\end{itemize}
+
+Évidement le path et le label pour une uri de type file détermine l'espace de
+travail wikitty. eg: \emph{/truc/machin/label} est le repertoire racine
+
+Les labels de l'uri cible et origine peuvent être différent, ce qui signifie que
+les labels ne sont pas transmit, le wikitty sur la cible est modifié mais pas
+ses labels.
+
+Dans le cas de wikitty qui n'existe pas dans la cible, on remplacera le label
+origine qui a permit de trouver ce wikitty par le label cible.
+
+\subsubsection{Commit/update}
+
+Les fonctionnalités commit/update sont des alias pour la commande sync.
+L'utilisation de ces commandes implique la présence d'un espace de travail
+précédemment initialisé/utilisé avec la commande sync.
+
+Les commandes commit et update permette de ne pas avoir besoin de préciser le
+WikittyService cible de la synchronisation. On va synchroniser avec le dernier
+WikittyService ciblé. Pour ce fonctionnement le la commande sync enregistre
+au niveau du répertoire de travail du Service sur File System, un fichier
+de propriété contenant l'adresse du dernier WikittyService avec lequel on l'a
+synchronisé.
+
+
+Un commit sera équivalent à un sync de l'espace de travail local vers un autre
+wikitty service.
+
+Un update sera équivalent à un sync d'un autre wikitty service vers l'espace de
+travail local.
+
+La commande:
+
+\verb!wp [update|commit] [--norecursion] [--delete|--existing] [label] [URI file]!
+
+L'URI file est optionnelle, si pas précisée on va commit/update le dossier
+courant.
+
+Pour le commit/update, on doit forcément préciser le label pour le wikitty
+service cible, cela pour permettre de commit/update au bon endroit.
+La commande supporte évidement les mêmes options que pour une commande sync, en
+toute logique.
+
+
+\subsection{Fonctionnement de sync}
+
+
+Une synchronisation entre deux WikittyService se fait en comparant les wikitty
+qu'ils ont chacun, wikitty qui possèdent soit des labels précis ou des labels
+commençant par une chaine, fonction de l'option récursion.
+
+On distinguera les wikitty qui existent dans les deux services, ceux présent
+uniquement dans le wikitty service cible et ceux uniquement sur le wikitty
+service d'origine.
+
+Ensuite en fonction de l'option de synchronisation ces différentes collection de
+wikitty sont utilisé.
+
+Dans le cas d'une uptate tout les wikitty qui existe uniquement dans l'origine
+son envoyé, et ceux présent dans les deux sont mis à jour.
+
+Dans le cas d'un existing seulement ceux présent dans les deux services sont mis à jour.
+Et dans le cas d'un delete on va supprimer les labels des wikitty seulement
+présent sur la cible.
+
Added: trunk/wikitty-publication/src/site/rapport/part/wikittystruts.tex
===================================================================
--- trunk/wikitty-publication/src/site/rapport/part/wikittystruts.tex (rev 0)
+++ trunk/wikitty-publication/src/site/rapport/part/wikittystruts.tex 2011-08-29 09:11:40 UTC (rev 1194)
@@ -0,0 +1,163 @@
+\section{Wikitty Struts}
+
+Cette partie sur Wikitty n'était pas prévu au départ, mais à l'utilisation
+il s'est avéré que le développement d'un tel module était nécessaire, et que
+le travail précédemment effectué sur la partie site de Wikitty Publication
+pouvait rendre la tache plus rapide.
+
+
+\subsection{Objectfifs}
+
+L'édition de wikitty ou tout simplement l'utilisation de wikitty au sein de
+formulaire deviennent des éléments récurrents dans les applications développées
+chez code lutin. Cela puisque devient Wikitty une solution plus utilisée pour
+le stockage.
+
+L'objectif de ce module wikitty-struts a donc été de créer une taglib permettant
+une génération des formulaires pour les wikitty, afin de ne pas avoir à refaire
+ce que l'on a déjà fait pour une autre application.
+
+Pour avoir une tag lib la plus complète possible, il a été décidé d'en faire une
+qui marcherait de la même façon que la taglib struts de base, et se resservirait
+de ses mécanismes interne, avec les templates.
+
+\subsection{La création d'un tag}
+
+\begin{figure}[!ht]
+ %[height=12cm,width=15cm]
+\centering
+\includegraphics[height=7cm,width=9cm]{image/explicationTag.png}
+ \caption{Diagramme des tags avec struts}
+ \label{diagtagstruts}
+\end{figure}
+
+La création d'un tag classique, sans struts se fait par héritage de classe
+tel que "TagSupport" qui est une des classes définies dans la norme J2E pour la
+création des tags. En plus de la définition de la classe java, il faut écrire
+dans un fichier xml (.tld) la définition du tag. La création de tag ainsi oblige
+à écrire le code html directement dans le corps de la classe ou de devoir prévoir
+l'architecture de support pour des templates.
+
+Les templates permettent en fait de séparer le rendu du post-traitement effectué
+sur les attributs d'un tag, il permettent aussi de supporter plusieurs "thèmes",
+c'est à dire des collections de css pour changer le rendu, etc.
+
+Faire des tag comme struts c'est un peu différent donc, sur la figure \ref{diagtagstruts}
+on voit qu'il y a une certaine architecture déjà mise en place. Il y a une chaine
+d'héritage étendant la norme pour les tag, et de l'autre une chaine d'héritage
+de classe spécifique à struts.
+
+Pour créer des tags spécifiques on se place en bout de chaine, comme on le voit
+avec \emph{classeMontag} en héritant de \emph{AbstractClosingTag} on ne fait pas
+grand chose, on délègue à la classe héritant de \emph{ClosingUiBean} qui contient
+elle la logique de traitement des éléments du tag. Ensuite il faut définir le
+template écrit en \emph{freemarker}, qui lui contient le code html effectif
+qui sera écrit avec les éléments récupérés par la classe héritant de \emph{ClosingUiBean}.
+Il faut aussi écrire le fichier tld pour la description.\\
+\\
+Pour résumer la création d'une taglib c'est:
+
+\begin{itemize}
+\item un fichier descripteur pour la taglib avec chaque tag de décrit
+\item une classe héritant de ClosingUiBean pour chaque tag
+\item une classe héritant de AbstractClosingTag pour chaque tag qui délègue à son ClosingUiBean correspondant
+\item des fichiers de template en freemarker pour chaque tag
+\end{itemize}
+
+Exemple de template freemarker:
+
+\lstset{ %
+language=HTML, % the language of the code
+basicstyle=\footnotesize, % the size of the fonts that are used for the code % where to put the line-numbers
+ % the size of the fonts that are used for the line-numbers
+ % the step between two line-numbers. If it's 1, each line
+keywordstyle=\color[rgb]{0,0,1},
+ % will be numbered
+numbersep=5pt, % how far the line-numbers are from the code
+showspaces=false, % show spaces adding particular underscores
+showstringspaces=false, % underline spaces within strings
+showtabs=false, % show tabs within strings adding particular underscores
+tabsize=2, % sets default tabsize to 2 spaces
+captionpos=b, % sets the caption-position to bottom
+breaklines=true, % sets automatic line breaking
+breakatwhitespace=false, % sets if automatic breaks should only happen at whitespace
+title=\lstname, % show the filename of files included with \lstinputlisting;
+ % also try caption instead of title
+escapeinside={\%*}{*)}, % if you want to add a comment with
+morekeywords={project,modelVersion,groupId,description,build, plugin,plugins,configuration, applicationName, wikittyServiceUrl, artifactId,serverID,uploadUrl}
+}
+
+
+
+\begin{lstlisting}
+<#include "/${parameters.templateDir}/${parameters.theme}/ws-label-commons.ftl" />
+<select
+<#include "/${parameters.templateDir}/${parameters.theme}/ws-commons.ftl" />
+ size="${parameters.selectSize}">
+<#assign optionKeys = parameters.value/>
+ <#list optionKeys as optionKey>
+ <option value="${optionKey.valeur}"
+ <#if optionKey.valeur==parameters.value >
+ selected
+ </#if>
+ > ${optionKey.description} </option>
+ </#list>
+</select>
+\end{lstlisting}
+
+Ce template, est le template pour le rendu en combobox ou liste de sélection,
+il y a les éléments html et les éléments de langages freemarker. Avant que le
+template soit remplit, les classes java correspondantes au tag remplissent
+un map de paramètres à laquelle a accès le template, d'où les structures de contrôle
+pour itérer dans cette exemple.
+
+
+\subsection{La taglib wikitty struts "ws"}
+
+Les tags ainsi développés ont deux utilisations possibles, la création d'un
+formulaire d'édition de wikitty, ou la création de formulaire utilisant les
+champs de wikitty comme champs.
+
+La différenciation de l'utilisation des tags passent par l'utilisation du tag
+de la taglib ws:form, qui implique que dans ce cas on se trouve dans l'édition d'un
+wikitty.
+
+A l'utilisation si on met seulement le tag \emph{ws:form} et la source de donnée
+(le wikitty) un formulaire basique va être créé en fonction du type des champs
+du wikitty. Ensuite en utilisant les autres tags ou différents attributs du tag
+\emph{ws:form} il est possible de choisir d'exclure de l'édition des extensions,
+des champs ou de choisir le type d'affichage pour un champ donné (et identifié
+par son nom complet soit nomExtention.nomChamp).
+
+En plus de fournir des tags pour la création de formulaire, la tag lib propose
+une action qui permet de prendre en compte les modifications de wikitty envoyées
+par le formulaire. Il s'agit d'une action abstraite struts que l'utilisateur à
+besoin d'étendre pour implémenter la méthode accédant au proxy.
+
+Tags commun aux deux types d'utilisations:
+\begin{itemize}
+\item ws:hidden permet d'insérer le champ en tant que champs caché
+\item ws:boolean permet d'insérer le champ en tant que checkbox
+\item ws:textArea permet d'insérer le champ en tant que textArea
+\item ws:textField permet d'insérer le champ en tant que textField
+\item ws:date permet d'avoir un composant intelligent pour les dates
+\item ws:selectFixed permet d'afficher un combobox avec des valeurs fixées à
+l'avance, sera sélectionnée celle correspondant au champs wikitty liés
+\item ws:selectCriteria permet d'afficher un combox box avec des wikitty,
+sera sélectionnée le wikitty correspondant à l'id du wikitty du champ
+(utilisé donc dans le cadre de relation entre wikitty)\\
+\end{itemize}
+
+Tag spécifique pour la création de formulaire:
+\begin{itemize}
+\item ws:form tag pour la création d'un formulaire d'édition des wikitty \\
+\end{itemize}
+
+Tags spécifiques à l'utilisation champ:
+\begin{itemize}
+\item ws:selectAssociation tag pour l'affichage de champ wikitty de type collection
+\item ws:select tag pour l'affichage de collection de wikitty en tant que list ou combobox html
+\end{itemize}
+
+
+
Added: trunk/wikitty-publication/src/site/rapport/rapportMain.tex
===================================================================
--- trunk/wikitty-publication/src/site/rapport/rapportMain.tex (rev 0)
+++ trunk/wikitty-publication/src/site/rapport/rapportMain.tex 2011-08-29 09:11:40 UTC (rev 1194)
@@ -0,0 +1,171 @@
+\documentclass[12pt,a4paper,utf8x]{article}
+\usepackage [frenchb]{babel}
+%pour avoir du code source dans le code
+\usepackage{listings}
+\usepackage{color}
+% Pour pouvoir utiliser
+\usepackage{ucs}
+\usepackage[utf8x]{inputenc}
+
+\usepackage{url} % Pour avoir de belles url
+\usepackage {geometry}
+
+% Pour mettre du code source
+\usepackage {listings}
+% Pour pouvoir passer en paysage
+\usepackage{lscape}
+%pour mettre des images
+\usepackage{graphicx}
+
+\usepackage[final]{pdfpages}
+
+% Pour pouvoir faire plusieurs colonnes
+\usepackage {multicol}
+% Pour crééer un index
+\usepackage{makeidx}
+\makeindex
+
+% Pour afficher la bibliographie, mais pas nottoc (Table of Contents), notlof (List of Figures) ni notlot (List of Tables)
+\usepackage[notlof, notlot]{tocbibind}
+
+
+% Pour les entetes de page
+% \usepackage{fancyheadings}
+%\pagestyle{fancy}
+%\renewcommand{\sectionmark}[1]{\markboth{#1}{}}
+%\renewcommand{\subsectionmark}[1]{\markright{#1}}
+
+% Pour l'interligne de 1.5
+\usepackage {setspace}
+% Pour les marges de la page
+\geometry{a4paper, top=2.5cm, bottom=3.5cm, left=1.5cm, right=1.5cm, marginparwidth=1.2cm}
+
+\parskip=5pt %% distance entre § (paragraphe)
+\sloppy %% respecter toujours la marge de droite
+
+% Pour les pénalités :
+\interfootnotelinepenalty=150 %note de bas de page
+\widowpenalty=150 %% veuves et orphelines
+\clubpenalty=150
+
+%Pour la longueur de l'indentation des paragraphes
+%\setlength{\parindent}{15mm}
+
+
+
+%%%% debut macro pour enlever le nom chapitre %%%%
+\makeatletter
+\def\@makechapterhead#1{%
+ \vspace*{50\p@}%
+ {\parindent \z@ \raggedright \normalfont
+ \interlinepenalty\@M
+ \ifnum \c@secnumdepth >\m@ne
+ \Huge\bfseries \thechapter\quad
+ \fi
+ \Huge \bfseries #1\par\nobreaka
+ \vskip 40\p@
+ }}
+
+\def\@makeschapterhead#1{%
+ \vspace*{50\p@}%
+ {\parindent \z@ \raggedright
+ \normalfont
+ \interlinepenalty\@M
+ \Huge \bfseries #1\par\nobreak
+ \vskip 40\p@
+ }}
+\makeatother
+%%%% fin macro %%%%
+
+%Couverture
+\begin{document}
+\begin{titlepage}
+
+\begin{center}
+\normalsize{Master Alma\\
+ Université de Nantes\\
+ 2010-2011}\\
+
+\huge
+{
+
+ \vspace{15mm}
+ \Huge{Wikitty Publication}\\
+ \normalsize{Rapport de stage}
+}
+\vspace{5mm}
+
+\large{FORTUN Manoël}
+
+\vspace{25mm}
+
+
+\begin{figure}[htb]
+ \begin{center}$
+ \begin{array}{cc}
+ \includegraphics[width=\textwidth/4]{image/logofac.png} &
+ \includegraphics[width=\textwidth/3]{image/logolutin.png}
+ \end{array}$
+ \end{center}
+\end{figure}
+
+ \normalsize{\emph{Code Lutin}\\
+ 44, boulevard des Pas Enchantés\\
+ 44230 Saint-Sébastien-Sur-Loire\\
+}
+
+
+ \vspace{25mm}
+ Maitre de stage : \emph{POUSSIN Benjamin} \\
+ Encadrant de stage : \emph{MOLLI Pascal}
+\end{center}
+
+
+
+
+\end{titlepage}
+
+
+%%This is a very basic article template.
+%%There is just one section and two subsections.
+
+
+
+\clearpage
+\newpage
+\null
+\newpage
+
+\include{part/remerciement}
+\clearpage
+\include{part/resume}
+\clearpage
+\include{part/introduction}
+\clearpage
+
+\tableofcontents
+
+\include{part/codelutin}
+\clearpage
+\include{part/organisation}
+\clearpage
+\include{part/wikitty}
+\clearpage
+\include{part/wikittypublication}
+\clearpage
+\include{part/wikittypublicationsync}
+\clearpage
+\include{part/wikittypublicationsite}
+\clearpage
+\include{part/wikittystruts}
+\clearpage
+\include{part/wikittypublicationexternalize}
+\clearpage
+\include{part/wikittymavenplugin}
+\clearpage
+\include{part/conclusion}
+\clearpage
+\include{part/annexes}
+
+
+\end{document}
Added: trunk/wikitty-publication/src/site/rapport/rapport_stage_FORTUN_Manoel_2010-2011.pdf
===================================================================
(Binary files differ)
Property changes on: trunk/wikitty-publication/src/site/rapport/rapport_stage_FORTUN_Manoel_2010-2011.pdf
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: trunk/wikitty-publication/src/site/rapport/ressources/planningprev.ods
===================================================================
(Binary files differ)
Property changes on: trunk/wikitty-publication/src/site/rapport/ressources/planningprev.ods
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: trunk/wikitty-publication/src/site/rapport/ressources/planningprev2.ods
===================================================================
(Binary files differ)
Property changes on: trunk/wikitty-publication/src/site/rapport/ressources/planningprev2.ods
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: trunk/wikitty-publication/src/site/rapport/ressources/planningprev2.pdf
===================================================================
(Binary files differ)
Property changes on: trunk/wikitty-publication/src/site/rapport/ressources/planningprev2.pdf
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: trunk/wikitty-publication/src/site/rapport/ressources/pom.xml
===================================================================
--- trunk/wikitty-publication/src/site/rapport/ressources/pom.xml (rev 0)
+++ trunk/wikitty-publication/src/site/rapport/ressources/pom.xml 2011-08-29 09:11:40 UTC (rev 1194)
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.exemple</groupId>
+ <artifactId>stub</artifactId>
+ <version>1.0</version>
+ <description>exemple project</description>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.nuiton.wikitty</groupId>
+ <artifactId>wp-maven-plugin</artifactId>
+ <version>3.2-SNAPSHOT</version>
+ <configuration>
+ <applicationName>example</applicationName>
+ <wikittyServiceUrl>cajo://localhost:1111/wikitty</wikittyServiceUrl>
+ <serveurID>serveurTest</serveurID>
+ <uploadUrl>http://localhost/</uploadUrl>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
Added: trunk/wikitty-publication/src/site/rapport/stage-sujet-2011-wikitty-publication lutin.pdf
===================================================================
(Binary files differ)
Property changes on: trunk/wikitty-publication/src/site/rapport/stage-sujet-2011-wikitty-publication lutin.pdf
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
1
0
28 Aug '11
Author: mfortun
Date: 2011-08-28 16:55:30 +0200 (Sun, 28 Aug 2011)
New Revision: 1193
Url: http://nuiton.org/repositories/revision/wikitty/1193
Log:
*add example application to svn
Added:
trunk/wikitty-publication/src/site/exemple/
trunk/wikitty-publication/src/site/exemple/resourceAppli/
trunk/wikitty-publication/src/site/exemple/resourceAppli/pom.xml
trunk/wikitty-publication/src/site/exemple/resourceAppli/src/
trunk/wikitty-publication/src/site/exemple/resourceAppli/src/main/
trunk/wikitty-publication/src/site/exemple/resourceAppli/src/main/resources/
trunk/wikitty-publication/src/site/exemple/resourceAppli/src/main/resources/images/
trunk/wikitty-publication/src/site/exemple/resourceAppli/src/main/resources/images/wikittypubuml.png
trunk/wikitty-publication/src/site/exemple/resourceAppli/src/main/resources/jar/
trunk/wikitty-publication/src/site/exemple/resourceAppli/src/main/wp/
trunk/wikitty-publication/src/site/exemple/resourceAppli/src/main/wp/JavaView.java
trunk/wikitty-publication/src/site/exemple/resourceAppli/src/main/wp/Javahtml.htmlja
trunk/wikitty-publication/src/site/exemple/resourceAppli/src/main/wp/SelfModify.htmljs
trunk/wikitty-publication/src/site/exemple/resourceAppli/src/main/wp/Test.java
trunk/wikitty-publication/src/site/exemple/resourceAppli/src/main/wp/clearProxy.java
trunk/wikitty-publication/src/site/exemple/resourceAppli/src/main/wp/dummy.htmljs
trunk/wikitty-publication/src/site/exemple/resourceAppli/src/main/wp/resources.htmljs
trunk/wikitty-publication/src/site/exemple/resourceAppli/src/main/wp/view.htmljs
trunk/wikitty-publication/src/site/exemple/resourceEntity/
trunk/wikitty-publication/src/site/exemple/resourceEntity/LICENSE.tx
trunk/wikitty-publication/src/site/exemple/resourceEntity/LICENSE.txt
trunk/wikitty-publication/src/site/exemple/resourceEntity/README.txt
trunk/wikitty-publication/src/site/exemple/resourceEntity/changelog.txt
trunk/wikitty-publication/src/site/exemple/resourceEntity/pom.xml
trunk/wikitty-publication/src/site/exemple/resourceEntity/src/
trunk/wikitty-publication/src/site/exemple/resourceEntity/src/main/
trunk/wikitty-publication/src/site/exemple/resourceEntity/src/main/java/
trunk/wikitty-publication/src/site/exemple/resourceEntity/src/main/resources/
trunk/wikitty-publication/src/site/exemple/resourceEntity/src/main/xmi/
trunk/wikitty-publication/src/site/exemple/resourceEntity/src/main/xmi/wp-resource.properties
trunk/wikitty-publication/src/site/exemple/resourceEntity/src/main/xmi/wp-resource.zargo
Added: trunk/wikitty-publication/src/site/exemple/resourceAppli/pom.xml
===================================================================
--- trunk/wikitty-publication/src/site/exemple/resourceAppli/pom.xml (rev 0)
+++ trunk/wikitty-publication/src/site/exemple/resourceAppli/pom.xml 2011-08-28 14:55:30 UTC (rev 1193)
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.codelutin</groupId>
+ <artifactId>reseapplication</artifactId>
+ <version>1.0</version>
+ <description>An exemple application to understand how build application
+within wikitty publication</description>
+
+<dependencies>
+ <dependency>
+ <groupId>commons-fileupload</groupId>
+ <artifactId>commons-fileupload</artifactId>
+ <version>1.2.2</version>
+ </dependency>
+</dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.nuiton.wikitty</groupId>
+ <artifactId>wp-maven-plugin</artifactId>
+ <version>3.2-SNAPSHOT</version>
+ <configuration>
+ <applicationName>example</applicationName>
+ <wikittyServiceUrl>cajo://localhost:1111/wikitty</wikittyServiceUrl>
+ <serveurID>serveurTest</serveurID>
+ <uploadUrl>http://localhost/</uploadUrl>
+ <publicationVersion>3.2-SNAPSHOT</publicationVersion>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
Added: trunk/wikitty-publication/src/site/exemple/resourceAppli/src/main/resources/images/wikittypubuml.png
===================================================================
(Binary files differ)
Property changes on: trunk/wikitty-publication/src/site/exemple/resourceAppli/src/main/resources/images/wikittypubuml.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: trunk/wikitty-publication/src/site/exemple/resourceAppli/src/main/wp/JavaView.java
===================================================================
--- trunk/wikitty-publication/src/site/exemple/resourceAppli/src/main/wp/JavaView.java (rev 0)
+++ trunk/wikitty-publication/src/site/exemple/resourceAppli/src/main/wp/JavaView.java 2011-08-28 14:55:30 UTC (rev 1193)
@@ -0,0 +1,11 @@
+
+wpContext.setContentType("text/html; charset=UTF-8");
+
+String result = "ceci va être intégré à un corps de méthode java" +
+ "Compiler et éxécuté ensuite, et on aura accès au binding"
+ + "exemple le nom de la page "+wpPage;
+
+return result;
+
+
+
Added: trunk/wikitty-publication/src/site/exemple/resourceAppli/src/main/wp/Javahtml.htmlja
===================================================================
--- trunk/wikitty-publication/src/site/exemple/resourceAppli/src/main/wp/Javahtml.htmlja (rev 0)
+++ trunk/wikitty-publication/src/site/exemple/resourceAppli/src/main/wp/Javahtml.htmlja 2011-08-28 14:55:30 UTC (rev 1193)
@@ -0,0 +1,14 @@
+<html>
+<body>
+
+<%
+String result = "ceci va être intégré à un corps de méthode java" +
+ "Compiler et éxécuté ensuite, et on aura accès au binding"
+ + "exemple le nom de la page "+wpPage;
+
+%>
+
+
+<h1><%=result%></h1>
+</body>
+<html>
Added: trunk/wikitty-publication/src/site/exemple/resourceAppli/src/main/wp/SelfModify.htmljs
===================================================================
--- trunk/wikitty-publication/src/site/exemple/resourceAppli/src/main/wp/SelfModify.htmljs (rev 0)
+++ trunk/wikitty-publication/src/site/exemple/resourceAppli/src/main/wp/SelfModify.htmljs 2011-08-28 14:55:30 UTC (rev 1193)
@@ -0,0 +1,45 @@
+<%
+var content="Que je peux me tripoter le content";
+%>
+
+
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<head>
+<body>
+<h1>Je suis le Wikitty id: <%=wpWikitty.getId()%></h1>
+<h2>Et je tiens a dire: <%=content%></h2>
+<br>
+
+<form action="<%=wpPage%>.action" method ="post">
+Changer mon message: <input type="text" value="" name="message"/>
+<br/>
+<input type="submit" name="post" value="post"/>
+</form>
+</body>
+</html>
+
+
+<%
+if (wpContext.getArgument("post")!=""){
+ importPackage(org.nuiton.wikitty.publication.entities);
+
+ var wikittyPubText = new WikittyPubTextImpl();
+ var futurMessage = wpContext.getArgument("message");
+
+
+ var thisWikitty = wpContext.getWikittyProxy().restore(wikittyPubText.getClass(), wpWikitty.getId());
+
+ var content= thisWikitty.getContent();
+
+ content = content.replaceFirst("var content=\".*\";", "var content=\""+futurMessage+"\";");
+
+
+ thisWikitty.setContent(content);
+
+ wpContext.getWikittyProxy().store(thisWikitty);
+}
+%>
+
+
Added: trunk/wikitty-publication/src/site/exemple/resourceAppli/src/main/wp/Test.java
===================================================================
--- trunk/wikitty-publication/src/site/exemple/resourceAppli/src/main/wp/Test.java (rev 0)
+++ trunk/wikitty-publication/src/site/exemple/resourceAppli/src/main/wp/Test.java 2011-08-28 14:55:30 UTC (rev 1193)
@@ -0,0 +1,3 @@
+WikittyRessource tt = new WikittyRessourceImpl();
+
+return "yo";
Added: trunk/wikitty-publication/src/site/exemple/resourceAppli/src/main/wp/clearProxy.java
===================================================================
--- trunk/wikitty-publication/src/site/exemple/resourceAppli/src/main/wp/clearProxy.java (rev 0)
+++ trunk/wikitty-publication/src/site/exemple/resourceAppli/src/main/wp/clearProxy.java 2011-08-28 14:55:30 UTC (rev 1193)
@@ -0,0 +1,6 @@
+String result = "Proxy Clear";
+wpContext.getWikittyProxy().clear();
+
+String youhou ="youhou";
+
+return youhou;
Added: trunk/wikitty-publication/src/site/exemple/resourceAppli/src/main/wp/dummy.htmljs
===================================================================
--- trunk/wikitty-publication/src/site/exemple/resourceAppli/src/main/wp/dummy.htmljs (rev 0)
+++ trunk/wikitty-publication/src/site/exemple/resourceAppli/src/main/wp/dummy.htmljs 2011-08-28 14:55:30 UTC (rev 1193)
@@ -0,0 +1,19 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<head>
+<body>
+
+
+<!--afficher les ressources réservée ici-->
+
+<h1><%=wpContext.getArgument("yo")%></h1>
+
+
+<form method="post" action="<%=wpPage%>.action">
+<input type="type" value="chaussette" name="yo">
+<input type="submit" name="post" value="post"/>
+</form>
+</body>
+</html>
+
Added: trunk/wikitty-publication/src/site/exemple/resourceAppli/src/main/wp/resources.htmljs
===================================================================
--- trunk/wikitty-publication/src/site/exemple/resourceAppli/src/main/wp/resources.htmljs (rev 0)
+++ trunk/wikitty-publication/src/site/exemple/resourceAppli/src/main/wp/resources.htmljs 2011-08-28 14:55:30 UTC (rev 1193)
@@ -0,0 +1,85 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<head>
+<body>
+
+<%
+if (wpContext.getArgument("save")!=""){
+ importPackage(org.nuiton.wikitty.entities);
+ var resource = new WikittyResourceImpl();
+
+ resource.setName(wpContext.getArgument("nom"));
+ resource.setDescription(wpContext.getArgument("description"));
+
+ wpContext.getWikittyProxy().store(resource);
+
+ wp_result += "<p>Nouvelle ressource Sauvegardées Wikitty-Id" + resource.getWikittyId()+"</p>";
+}
+
+if (wpContext.getArgument("delete")!=""){
+
+ var idtodelete = wpContext.getArgument("id_delete");
+ /*Little did you know that delete is a key word in javascript ?
+ So to call delete on wikitty proxy, as you can call a method
+ on a javascript object simply add the method name like this:
+ ['methodName'](param, other param)*/
+ wpContext.getWikittyProxy()['delete'](idtodelete);
+
+ wp_result += "<p>Wikitty supprimé" + idtodelete+"</p>";
+}
+
+
+%>
+
+Création de nouvelle ressources:
+<form method="post" action="<%=wpPage%>.action">
+Nom :<input type="text" name="nom"/></br>
+Description :<input type="text" name="description"/>
+
+<input type="submit" name="save" value="save"/>
+
+</form>
+
+Listes des ressources existantes:
+
+<%
+importPackage( org.nuiton.wikitty.search);
+importPackage(org.nuiton.wikitty.entities);
+
+var wikittyResourceClazz = new WikittyResourceImpl();
+
+var searchResult = wpContext.getWikittyProxy().findAllByCriteria(
+ Search.query().exteq(WikittyResource.EXT_WIKITTYRESOURCE).criteria());
+
+var listWikitty = searchResult.cast(wpContext.getWikittyProxy(), wikittyResourceClazz.getClass());
+listWikitty = listWikitty.getAll();
+
+var size = listWikitty.size();
+
+
+wp_result+="<table border=\"1\">\n";
+wp_result+="<tr><td>Id</td><td>Nom</td><td>Description</td>\n";
+for (var gg=0; gg < size; gg++){
+var w = listWikitty.get(gg);
+wp_result+="<tr>\n";
+wp_result+= "<td>"+w.getWikittyId()+"</td>\n";
+wp_result+= "<td>"+w.getName()+"</td>\n";
+wp_result+= "<td>"+w.getDescription()+"</td>\n";
+wp_result+= "<td><form><input type='hidden' value='"+w.getWikittyId()+"' name ='id_delete'/> <input type='submit' name='delete' value='delete'/></form></td>";
+wp_result+="</tr>\n";
+}
+
+wp_result+="</table>";
+
+%>
+</body>
+</html>
+
+
+
+
+
+
+
+
Added: trunk/wikitty-publication/src/site/exemple/resourceAppli/src/main/wp/view.htmljs
===================================================================
--- trunk/wikitty-publication/src/site/exemple/resourceAppli/src/main/wp/view.htmljs (rev 0)
+++ trunk/wikitty-publication/src/site/exemple/resourceAppli/src/main/wp/view.htmljs 2011-08-28 14:55:30 UTC (rev 1193)
@@ -0,0 +1,121 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<head>
+<title>Liste des réservations</title>
+<body>
+
+<%
+importPackage( org.nuiton.wikitty.search);
+importPackage(org.nuiton.wikitty.entities);
+
+
+
+if (wpContext.getArgument("save")!=""){
+ var resource = new WikittyResaImpl();
+
+
+ resource.setDescription(wpContext.getArgument("description"));
+ resource.setWikittyResource(wpContext.getArgument("resource"));
+ resource.setEmail(wpContext.getArgument("mail"))
+ resource.setDateFin(wpContext.getArgument("dateFin"))
+ resource.setDateDebut(wpContext.getArgument("dateDebut"))
+
+
+ wpContext.getWikittyProxy().store(resource);
+
+ wp_result += "<p>Nouvelle ressource Sauvegardées Wikitty-Id" + resource.getWikittyId()+"</p>";
+}
+
+if (wpContext.getArgument("delete")!=""){
+
+ var idtodelete = wpContext.getArgument("id_delete");
+ /*Little did you know that delete is a key word in javascript ?
+ So to call delete on wikitty proxy, as you can call a method
+ on a javascript object simply add the method name like this:
+ ['methodName'](param, other param)*/
+ wpContext.getWikittyProxy()['delete'](idtodelete);
+
+ wp_result += "<p>Wikitty supprimé" + idtodelete+"</p>";
+}
+
+
+
+var wikittyResaClazz = new WikittyResaImpl();
+var wikittyResourceClazz = new WikittyResourceImpl();
+
+var searchResult = wpContext.getWikittyProxy().findAllByCriteria(
+ Search.query().exteq(WikittyResa.EXT_WIKITTYRESA).criteria());
+
+var listWikitty = searchResult.cast(wpContext.getWikittyProxy(), wikittyResaClazz.getClass());
+listWikitty = listWikitty.getAll();
+
+var size = listWikitty.size();
+
+
+wp_result+="<table border=\"1\">\n";
+wp_result+="<tr><td>Id</td><td>Email</td><td>Date Debut</td><td>Date fin</td> <td>ressource</td>\n";
+for (var gg=0; gg < size; gg++){
+var w = listWikitty.get(gg);
+wp_result+="<tr>\n";
+wp_result+= "<td>"+w.getWikittyId()+"</td>\n";
+wp_result+= "<td>"+w.getEmail()+"</td>\n";
+wp_result+= "<td>"+w.getDateDebut()+"</td>\n";
+wp_result+= "<td>"+w.getDateFin()+"</td>\n";
+var resourceLinked = wpContext.getWikittyProxy().restore( wikittyResourceClazz.getClass(),w.getWikittyResource())
+var ressourceName = "";
+if ( resourceLinked != null){
+ ressourceName = resourceLinked.getName()
+}
+wp_result+= "<td>"+ressourceName+"</td>\n";
+wp_result+= "<td><form><input type='hidden' value='"+w.getWikittyId()+"' name ='id_delete'/> <input type='submit' name='delete' value='delete'/></form></td>";
+wp_result+="</tr>\n";
+}
+
+wp_result+="</table>";
+
+
+
+%>
+
+
+Création de nouvelle réservation:
+<form method="post" action="<%=wpPage%>.action">
+Email :<input type="text" name="mail"/></br>
+DateDébut :<input type="text" name="dateDebut"/></br>
+DateFin :<input type="text" name="dateFin"/></br>
+Description :<input type="text" name="description"/></br>
+ressource :<select name="resource" size="1">
+ <option value="" selected="true"></option>
+<%
+var searchrResource = wpContext.getWikittyProxy().findAllByCriteria(
+ Search.query().exteq(WikittyResource.EXT_WIKITTYRESOURCE).criteria());
+
+var listWResource = searchrResource.cast(wpContext.getWikittyProxy(), wikittyResourceClazz.getClass());
+listWResource = listWResource.getAll();
+
+var sizeR = listWResource.size();
+
+for (var gg=0; gg < sizeR; gg++){
+var w = listWResource.get(gg);
+
+wp_result+= "<option value="+w.getWikittyId()+" >"+w.getName()+"</option>\n";
+}
+
+%>
+</select>
+
+
+<input type="submit" name="save" value="save"/>
+
+</form>
+
+
+
+
+
+
+
+
+</body>
+</html>
Added: trunk/wikitty-publication/src/site/exemple/resourceEntity/pom.xml
===================================================================
--- trunk/wikitty-publication/src/site/exemple/resourceEntity/pom.xml (rev 0)
+++ trunk/wikitty-publication/src/site/exemple/resourceEntity/pom.xml 2011-08-28 14:55:30 UTC (rev 1193)
@@ -0,0 +1,186 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.nuiton</groupId>
+ <artifactId>mavenpom4redmine</artifactId>
+ <version>3.0.2</version>
+ </parent>
+
+ <!-- ************************************************************* -->
+ <!-- *** POM Relationships *************************************** -->
+ <!-- ************************************************************* -->
+
+ <groupId>org.nuiton.wikitty</groupId>
+ <artifactId>resource</artifactId>
+<version>1.0</version>
+
+ <!--properties>
+ <i18n.bundleOutputName>wikitty-publication</i18n.bundleOutputName>
+ </properties-->
+
+ <dependencies>
+ <dependency>
+ <groupId>org.nuiton.wikitty</groupId>
+ <artifactId>wikitty-api</artifactId>
+ <version>3.2-SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ </dependency>
+
+
+ <dependency>
+ <groupId>commons-lang</groupId>
+ <artifactId>commons-lang</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>commons-collections</groupId>
+ <artifactId>commons-collections</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>javassist</groupId>
+ <artifactId>javassist</artifactId>
+ <version>${javassistVersion}</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.nuiton</groupId>
+ <artifactId>nuiton-utils</artifactId>
+ <version>${nuitonUtilsVersion}</version>
+ <scope>compile</scope>
+ </dependency>
+
+
+ <dependency>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ </dependency>
+
+
+
+
+ </dependencies>
+
+ <properties>
+ <platform>nuiton.org</platform>
+ <projectId>wikitty</projectId>
+
+ <!-- common versions used in sub-poms -->
+ <eugeneVersion>2.3.5</eugeneVersion>
+ <nuitonUtilsVersion>2.2</nuitonUtilsVersion>
+ <nuitonI18nVersion>2.4.1</nuitonI18nVersion>
+ <processPluginVersion>1.1</processPluginVersion>
+ <jettyVersion>7.4.2.v20110526</jettyVersion>
+ <struts2jqueryVersion>3.1.0</struts2jqueryVersion>
+ <struts2Version>2.2.3</struts2Version>
+ <javassistVersion>3.8.0.GA</javassistVersion>
+ <jspapiversion>2.1</jspapiversion>
+
+ <nuitonProcessessorVersion>1.2.2-SNAPSHOT</nuitonProcessessorVersion>
+ <nuiton-struts2>1.3</nuiton-struts2>
+ <!--Multilanguage maven-site -->
+ <locales>fr,en</locales>
+
+ </properties>
+
+
+ <!-- ************************************************************* -->
+ <!-- *** Project Information ************************************* -->
+ <!-- ************************************************************* -->
+
+ <name>Ressource exemple entity</name>
+
+ <description>Web publication api for Wikitty publication</description>
+ <inceptionYear>2011</inceptionYear>
+
+ <!-- ************************************************************* -->
+ <!-- *** Build Settings ****************************************** -->
+ <!-- ************************************************************* -->
+
+ <build>
+
+ <resources>
+ <resource>
+ <directory>src/main/resources</directory>
+ </resource>
+ <resource>
+ <directory>
+ ${project.build.directory}/generated-sources/models
+ </directory>
+ <includes>
+ <include>*.objectmodel</include>
+ <include>*.properties</include>
+ </includes>
+ </resource>
+ </resources>
+
+ <plugins>
+ <!--plugin>
+ <groupId>org.nuiton.i18n</groupId>
+ <artifactId>maven-i18n-plugin</artifactId>
+ <version>${nuitonI18nVersion}</version>
+ <configuration>
+ <bundles>fr_FR,en_GB</bundles>
+ </configuration>
+ <executions>
+ <execution>
+ <id>scan-and-gen</id>
+ <goals>
+ <goal>parserJava</goal>
+ <goal>gen</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin-->
+
+ <plugin>
+ <groupId>org.nuiton.eugene</groupId>
+ <artifactId>maven-eugene-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>api-generation</id>
+ <phase>generate-sources</phase>
+ <configuration>
+ <inputs>
+ <input>zargo</input>
+ </inputs>
+ <fullPackagePath>
+ org.nuiton.wikitty.entities
+ </fullPackagePath>
+ <defaultPackage>
+ org.nuiton.wikitty.entities
+ </defaultPackage>
+ <extractedPackages>
+ org.nuiton.wikitty.entities
+ </extractedPackages>
+ <templates>
+ org.nuiton.wikitty.generator.WikittyMetaGenerator
+ </templates>
+ </configuration>
+ <goals>
+ <goal>smart-generate</goal>
+ </goals>
+ </execution>
+ </executions>
+ <dependencies>
+ <dependency>
+ <groupId>org.nuiton.wikitty</groupId>
+ <artifactId>wikitty-generators</artifactId>
+ <version>3.2-SNAPSHOT</version>
+ </dependency>
+ </dependencies>
+ </plugin>
+ </plugins>
+ </build>
+
+
+</project>
Added: trunk/wikitty-publication/src/site/exemple/resourceEntity/src/main/xmi/wp-resource.properties
===================================================================
--- trunk/wikitty-publication/src/site/exemple/resourceEntity/src/main/xmi/wp-resource.properties (rev 0)
+++ trunk/wikitty-publication/src/site/exemple/resourceEntity/src/main/xmi/wp-resource.properties 2011-08-28 14:55:30 UTC (rev 1193)
@@ -0,0 +1,29 @@
+###
+# #%L
+# Wikitty :: api
+#
+# $Id: wikitty-publication.properties 1136 2011-08-12 14:24:03Z tchemit $
+# $HeadURL: http://svn.nuiton.org/svn/wikitty/trunk/wikitty-publication/src/main/xmi/wi… $
+# %%
+# Copyright (C) 2009 - 2010 CodeLutin, Benjamin Poussin
+# %%
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Lesser Public License for more details.
+#
+# You should have received a copy of the GNU General Lesser Public
+# License along with this program. If not, see
+# <http://www.gnu.org/licenses/lgpl-3.0.html>.
+# #L%
+###
+org.nuiton.wikitty.entities.WikittyRessource.class.tagvalue.version=1.0
+org.nuiton.wikitty.entities.WikittyResa.class.tagvalue.version=1.0
+
+
+
Added: trunk/wikitty-publication/src/site/exemple/resourceEntity/src/main/xmi/wp-resource.zargo
===================================================================
(Binary files differ)
Property changes on: trunk/wikitty-publication/src/site/exemple/resourceEntity/src/main/xmi/wp-resource.zargo
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
1
0
r1192 - in trunk: wikitty-publication/src/main/java/org/nuiton/wikitty/publication/synchro wp-maven-plugin/src/main/java/org/nuiton/wikitty/plugin
by mfortun@users.nuiton.org 28 Aug '11
by mfortun@users.nuiton.org 28 Aug '11
28 Aug '11
Author: mfortun
Date: 2011-08-28 16:33:49 +0200 (Sun, 28 Aug 2011)
New Revision: 1192
Url: http://nuiton.org/repositories/revision/wikitty/1192
Log:
* correct synchronise to save wikitty service targeted only if needed
*add a new goal that clean properties dir created by wikitty service over file system
Added:
trunk/wp-maven-plugin/src/main/java/org/nuiton/wikitty/plugin/WPCleanMojo.java
Modified:
trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/synchro/WikittyPublicationSynchronize.java
Modified: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/synchro/WikittyPublicationSynchronize.java
===================================================================
--- trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/synchro/WikittyPublicationSynchronize.java 2011-08-26 17:48:28 UTC (rev 1191)
+++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/synchro/WikittyPublicationSynchronize.java 2011-08-28 14:33:49 UTC (rev 1192)
@@ -65,7 +65,8 @@
public class WikittyPublicationSynchronize {
/** to use log facility, just put in your code: log.info(\"...\"); */
- final static private Log log = LogFactory.getLog(WikittyPublicationSynchronize.class);
+ final static private Log log = LogFactory
+ .getLog(WikittyPublicationSynchronize.class);
/**
* Key for the other uri, usefull in the case of commit/update with a file
@@ -117,21 +118,18 @@
*/
static public String HESSIAN_URI_PREFIX = "hessian";
-
/**
* The file name of the wikitty service property
*/
static public String WIKITTY_FILE_SERVICE = "ws.properties";
-
+
/*
- * Two flag for commit/update mechanism
- * if main true and flag commit false and if service is servive over
- * file system, so write property to "know" the last service used to
- * synchronise
+ * Two flag for commit/update mechanism if main true and flag commit false
+ * and if service is servive over file system, so write property to "know"
+ * the last service used to synchronise
*/
- static protected boolean MAIN_ENABLE=false;
- static protected boolean FLAG_COMMIT_UPDATE=false;
-
+ static protected boolean MAIN_ENABLE = false;
+ static protected boolean FLAG_COMMIT_UPDATE = false;
static {
applicationConfig = new ApplicationConfig();
@@ -141,7 +139,7 @@
* correct encoding
*/
FileUtil.ENCODING = "UTF-8";
-
+
/*
* TODO mfortun-2011-04-14 construct option def instance to initialize
* correctly application config
@@ -181,7 +179,6 @@
"org.nuiton.wikitty.publication.synchro.WikittyPublication#update");
}
-
/*
* Class don't have to be instantiate
*/
@@ -195,13 +192,13 @@
*/
static public void main(String[] args) throws Exception {
MAIN_ENABLE = true;
-
+
// parsing
applicationConfig.parse(args);
// execution
applicationConfig.doAction(0);
}
-
+
static public void synchronisation(String origin, String target)
throws URISyntaxException {
@@ -215,13 +212,11 @@
synchronisationServices(origin, target, isRecur, isDelete, isExisting);
}
-
-
+
static public void synchronisationServices(String origin, String target,
boolean isRecur, boolean isDelete, boolean isExisting)
throws URISyntaxException {
-
// update operation is the default operation
boolean isUpdate = !isDelete && !isExisting;
@@ -509,8 +504,7 @@
WikittyConfigOption.WIKITTY_WIKITTYSERVICE_COMPONENTS
.getKey(), WikittyPublicationFileSystem.class
.getName());
-
-
+
writeProperty(url);
} else if (uri.getScheme().equals(CAJO_URI_PREFIX)) {
result.setOption(
@@ -569,9 +563,9 @@
static protected void commitUpdateDelegate(String label, boolean isCommit,
String... uriFileSystem) throws Exception {
-
+
FLAG_COMMIT_UPDATE = true;
-
+
File currentDir = new File(FileUtil.getCurrentDirectory()
.getAbsolutePath());
@@ -659,7 +653,7 @@
File workingDir = new File(originUri.getPath());
homeProperty = WikittyPublicationFileSystem
.getWikittyPublicationProperties(workingDir,
- WIKITTY_FILE_SERVICE);
+ WIKITTY_FILE_SERVICE);
wikittyServiceInter = (String) homeProperty
.get(WIKITTY_SERVICE_INTERLOCUTEUR);
@@ -715,71 +709,74 @@
+ "''wp [update|commit] [--norecursion] [--delete|--existing] [URI file]''";
System.out.println(usage);
}
-
-
+
/**
- * Called when syncrhonising with file system, used to store info about
- * the "other" service used. Infos used when try to commit
- * update from a service over file system
+ * Called when syncrhonising with file system, used to store info about the
+ * "other" service used. Infos used when try to commit update from a service
+ * over file system
+ *
* @param label
*/
protected static void writeProperty(String ur) {
- try {
- URI uri = new URI(ur);
- String label = uri.getFragment();
-
- File homeFile = new File(uri.getPath());
-
-
- File homeProperty = new File(homeFile.getAbsolutePath()
- + File.separator
- + WikittyPublicationFileSystem.PROPERTY_DIRECTORY);
- if (!homeProperty.exists()) {
- homeProperty.mkdir();
- }
+ // Only if not commit/update and syncrhonising from main
+ if (!FLAG_COMMIT_UPDATE && MAIN_ENABLE) {
+ try {
+ URI uri = new URI(ur);
+ String label = uri.getFragment();
- // write/update the "home property file"
- PropertiesExtended propertyWikittyService;
-
- propertyWikittyService = WikittyPublicationFileSystem
- .getWikittyPublicationProperties(homeFile,
- WIKITTY_FILE_SERVICE);
+ File homeFile = new File(uri.getPath());
- // the original label use to create if not exist
- if (!propertyWikittyService
- .containsKey(WikittyPublicationSynchronize.LABEL_KEY)) {
- log.debug("Writing home property label"
- + propertyWikittyService.getOrigin());
- propertyWikittyService.setProperty(
- WikittyPublicationSynchronize.LABEL_KEY, label);
- }
- // the service use to update or commit
- String uriService = applicationConfig
- .getOption(WikittyPublicationSynchronize.WIKITTY_SERVICE_INTERLOCUTEUR);
- if (uriService != null) {
- log.debug("Writing home property service on:"
- + propertyWikittyService.getOrigin() + " uri"
- + uriService);
+ File homeProperty = new File(homeFile.getAbsolutePath()
+ + File.separator
+ + WikittyPublicationFileSystem.PROPERTY_DIRECTORY);
- propertyWikittyService
- .setProperty(
- WikittyPublicationSynchronize.WIKITTY_SERVICE_INTERLOCUTEUR,
- uriService);
- }
+ if (!homeProperty.exists()) {
+ homeProperty.mkdir();
+ }
- propertyWikittyService.store();
+ // write/update the "home property file"
+ PropertiesExtended propertyWikittyService;
- } catch (Exception e) {
- //TODO mfortun-2011-08-25
- if (log.isErrorEnabled()) {
- log.error("Error while writing properties for commit update", e);
+ propertyWikittyService = WikittyPublicationFileSystem
+ .getWikittyPublicationProperties(homeFile,
+ WIKITTY_FILE_SERVICE);
+
+ // the original label use to create if not exist
+ if (!propertyWikittyService
+ .containsKey(WikittyPublicationSynchronize.LABEL_KEY)) {
+ log.debug("Writing home property label"
+ + propertyWikittyService.getOrigin());
+ propertyWikittyService.setProperty(
+ WikittyPublicationSynchronize.LABEL_KEY, label);
+ }
+ // the service use to update or commit
+ String uriService = applicationConfig
+ .getOption(WikittyPublicationSynchronize.WIKITTY_SERVICE_INTERLOCUTEUR);
+ if (uriService != null) {
+ log.debug("Writing home property service on:"
+ + propertyWikittyService.getOrigin() + " uri"
+ + uriService);
+
+ propertyWikittyService
+ .setProperty(
+ WikittyPublicationSynchronize.WIKITTY_SERVICE_INTERLOCUTEUR,
+ uriService);
+ }
+
+ propertyWikittyService.store();
+
+ } catch (Exception e) {
+ // TODO mfortun-2011-08-25
+ if (log.isErrorEnabled()) {
+ log.error(
+ "Error while writing properties for commit update",
+ e);
+ }
}
}
-
}
-
-
+
/**
* Use to search and return the home property that containt informations
* about wikitty service use to synchronise a wikitty publication file
@@ -803,7 +800,8 @@
// adress of the interlocuteur
File propertyDirectory = new File(start.getCanonicalPath()
- + File.separator + WikittyPublicationFileSystem.PROPERTY_DIRECTORY);
+ + File.separator
+ + WikittyPublicationFileSystem.PROPERTY_DIRECTORY);
if (propertyDirectory.exists()) {
File propertie = new File(propertyDirectory.getCanonicalPath()
Added: trunk/wp-maven-plugin/src/main/java/org/nuiton/wikitty/plugin/WPCleanMojo.java
===================================================================
--- trunk/wp-maven-plugin/src/main/java/org/nuiton/wikitty/plugin/WPCleanMojo.java (rev 0)
+++ trunk/wp-maven-plugin/src/main/java/org/nuiton/wikitty/plugin/WPCleanMojo.java 2011-08-28 14:33:49 UTC (rev 1192)
@@ -0,0 +1,57 @@
+package org.nuiton.wikitty.plugin;
+
+import java.io.File;
+import java.io.FileFilter;
+import java.util.List;
+
+import org.nuiton.util.FileUtil;
+import org.nuiton.wikitty.publication.synchro.WikittyPublicationFileSystem;
+
+/**
+ * Goal to remove properties files used by WikittyService over file system to
+ * ensure transformation wikitty-file. Delete ".wp" dirs.
+ *
+ * @author mfortun <manoel.fortun(a)gmail.com>
+ * @version
+ * @goal clean
+ * @requiresProject true
+ * @requiresOnline true
+ * @requiresDependencyResolution runtime
+ * @since 3.2
+ */
+public class WPCleanMojo extends AbstractWPMojo {
+
+ protected FileFilter propertiesDirFilter = new FileFilter() {
+
+ @Override
+ public boolean accept(File pathname) {
+ return pathname.isDirectory()
+ && pathname.getName().equals(
+ WikittyPublicationFileSystem.PROPERTY_DIRECTORY);
+
+ }
+ };
+
+ @Override
+ protected void init() throws Exception {
+
+ }
+
+ @Override
+ protected void doAction() throws Exception {
+
+ File baseDir = project.getBasedir();
+ // filter all properties dir
+ List<File> propertiesDir = FileUtil.getFilteredElements(baseDir,
+ propertiesDirFilter, true);
+ // delete them
+ for (File fipropsdir : propertiesDir) {
+ if (getLog().isDebugEnabled()) {
+ getLog().debug("Delete dir:" + fipropsdir);
+ }
+ FileUtil.deleteRecursively(fipropsdir);
+ }
+
+ }
+
+}
1
0
r1191 - in trunk/wikitty-publication-ui/src/main: resources webapp/WEB-INF/jsp
by mfortun@users.nuiton.org 26 Aug '11
by mfortun@users.nuiton.org 26 Aug '11
26 Aug '11
Author: mfortun
Date: 2011-08-26 19:48:28 +0200 (Fri, 26 Aug 2011)
New Revision: 1191
Url: http://nuiton.org/repositories/revision/wikitty/1191
Log:
* correct fragment bug due to contextData feature
Modified:
trunk/wikitty-publication-ui/src/main/resources/struts.xml
trunk/wikitty-publication-ui/src/main/webapp/WEB-INF/jsp/view.jsp
Modified: trunk/wikitty-publication-ui/src/main/resources/struts.xml
===================================================================
--- trunk/wikitty-publication-ui/src/main/resources/struts.xml 2011-08-26 15:56:00 UTC (rev 1190)
+++ trunk/wikitty-publication-ui/src/main/resources/struts.xml 2011-08-26 17:48:28 UTC (rev 1191)
@@ -149,8 +149,9 @@
</package>
<package name="fragment" namespace="/fragment" extends="publicArea">
- <action name="wikittyInfo"
+ <action name="*/wikittyInfo"
class="org.nuiton.wikitty.publication.ui.action.PublicationActionRestoreWikitty">
+ <param name="contextData">{1}</param>
<result>/WEB-INF/jsp/wikittyInfo.jsp</result>
</action>
</package>
Modified: trunk/wikitty-publication-ui/src/main/webapp/WEB-INF/jsp/view.jsp
===================================================================
--- trunk/wikitty-publication-ui/src/main/webapp/WEB-INF/jsp/view.jsp 2011-08-26 15:56:00 UTC (rev 1190)
+++ trunk/wikitty-publication-ui/src/main/webapp/WEB-INF/jsp/view.jsp 2011-08-26 17:48:28 UTC (rev 1191)
@@ -116,7 +116,11 @@
href="${urleval}">Eval</a>
<!-- <a id="ajaxlink_<%=i%>" href="javascript:void(0)">View</a> -->
- <s:url var="urlFragment" action="wikittyInfo" namespace="/fragment">
+
+ <s:set
+ var="contextData"><%=action.getContextData()%></s:set>
+
+ <s:url var="urlFragment" action="%{#contextData}/wikittyInfo" namespace="/fragment">
<s:param name="id"><%=w.getId()%></s:param>
</s:url>
1
0
r1190 - in trunk: wikitty-publication/src/main/java/org/nuiton/wikitty/publication wikitty-publication/src/main/java/org/nuiton/wikitty/publication/externalize wikitty-publication/src/main/java/org/nuiton/wikitty/publication/synchro wikitty-publication-ui/src/main/java/org/nuiton/wikitty/publication/ui
by mfortun@users.nuiton.org 26 Aug '11
by mfortun@users.nuiton.org 26 Aug '11
26 Aug '11
Author: mfortun
Date: 2011-08-26 17:56:00 +0200 (Fri, 26 Aug 2011)
New Revision: 1190
Url: http://nuiton.org/repositories/revision/wikitty/1190
Log:
*correct encoding issue, due to FileUtils and static encoding param
Modified:
trunk/wikitty-publication-ui/src/main/java/org/nuiton/wikitty/publication/ui/ApplicationListener.java
trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/CodeDecorator.java
trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/externalize/WikittyPublicationExternalize.java
trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/synchro/WikittyPublicationSynchronize.java
Modified: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/CodeDecorator.java
===================================================================
--- trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/CodeDecorator.java 2011-08-26 15:11:47 UTC (rev 1189)
+++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/CodeDecorator.java 2011-08-26 15:56:00 UTC (rev 1190)
@@ -102,9 +102,7 @@
List<URL> urlsRessourceFilters = Resource.getResources(
filtersOptionDirName + FILTERS_FILE_NAME_REGEX, Thread
.currentThread().getContextClassLoader());
- // /"+filtersOptionDirName+"/filters-\\w*\\.properties"
- System.out.println(urlsRessourceFilters);
for (URL propFil : urlsRessourceFilters) {
Properties props = new Properties();
Modified: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/externalize/WikittyPublicationExternalize.java
===================================================================
--- trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/externalize/WikittyPublicationExternalize.java 2011-08-26 15:11:47 UTC (rev 1189)
+++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/externalize/WikittyPublicationExternalize.java 2011-08-26 15:56:00 UTC (rev 1190)
@@ -62,9 +62,17 @@
static public String PATH_SEPARATOR_PROPERTIE_KEY = "path.separator";
/*
- * Class don't have to be instantiate
+ * needed to ensure that fileUtils used inside execution is set with the
+ * correct encoding
*/
+ static {
+ FileUtil.ENCODING = "UTF-8";
+ }
+
+ /* Class don't have to be instantiate
+ */
private WikittyPublicationExternalize() {
+
}
static public void main(String[] args) throws ArgumentsParserException,
Modified: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/synchro/WikittyPublicationSynchronize.java
===================================================================
--- trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/synchro/WikittyPublicationSynchronize.java 2011-08-26 15:11:47 UTC (rev 1189)
+++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/synchro/WikittyPublicationSynchronize.java 2011-08-26 15:56:00 UTC (rev 1190)
@@ -137,6 +137,12 @@
applicationConfig = new ApplicationConfig();
/*
+ * needed to ensure that fileUtils used inside execution is set with the
+ * correct encoding
+ */
+ FileUtil.ENCODING = "UTF-8";
+
+ /*
* TODO mfortun-2011-04-14 construct option def instance to initialize
* correctly application config
*/
Modified: trunk/wikitty-publication-ui/src/main/java/org/nuiton/wikitty/publication/ui/ApplicationListener.java
===================================================================
--- trunk/wikitty-publication-ui/src/main/java/org/nuiton/wikitty/publication/ui/ApplicationListener.java 2011-08-26 15:11:47 UTC (rev 1189)
+++ trunk/wikitty-publication-ui/src/main/java/org/nuiton/wikitty/publication/ui/ApplicationListener.java 2011-08-26 15:56:00 UTC (rev 1190)
@@ -10,6 +10,7 @@
import org.nuiton.i18n.I18n;
import org.nuiton.i18n.init.DefaultI18nInitializer;
import org.nuiton.i18n.init.I18nInitializer;
+import org.nuiton.util.FileUtil;
public class ApplicationListener implements ServletContextListener {
@@ -18,6 +19,11 @@
@Override
public void contextInitialized(ServletContextEvent sce) {
+ /*
+ * needed to ensure that fileUtils used inside execution is set with the
+ * correct encoding
+ */
+ FileUtil.ENCODING = "UTF-8";
if (log.isInfoEnabled()) {
log.info("Initializing I18n...");
1
0
r1189 - trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication
by mfortun@users.nuiton.org 26 Aug '11
by mfortun@users.nuiton.org 26 Aug '11
26 Aug '11
Author: mfortun
Date: 2011-08-26 17:11:47 +0200 (Fri, 26 Aug 2011)
New Revision: 1189
Url: http://nuiton.org/repositories/revision/wikitty/1189
Log:
*conf option to constant
Modified:
trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/CodeDecorator.java
Modified: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/CodeDecorator.java
===================================================================
--- trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/CodeDecorator.java 2011-08-26 15:09:10 UTC (rev 1188)
+++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/CodeDecorator.java 2011-08-26 15:11:47 UTC (rev 1189)
@@ -1,7 +1,6 @@
package org.nuiton.wikitty.publication;
-import java.io.File;
-import java.io.FileFilter;
+
import java.io.IOException;
import java.io.InputStream;
import java.io.StringReader;
@@ -11,7 +10,6 @@
import java.util.List;
import java.util.Map;
import java.util.Properties;
-
import org.apache.commons.lang.StringEscapeUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
@@ -26,10 +24,11 @@
import org.nuiton.wikitty.publication.entities.WikittyPubTextHelper;
import org.nuiton.wikitty.search.operators.Element;
-import temp.Mainer;
public class CodeDecorator {
+ protected static final String FILTERS_FILE_NAME_REGEX = "filters-\\w*\\.properties";
+
static private Log log = LogFactory.getLog(CodeDecorator.class);
/*
@@ -52,7 +51,8 @@
static {
- InputStream input = CodeDecorator.class.getResourceAsStream("/"+filtersOptionDirName + filtersOptionDefault);
+ InputStream input = CodeDecorator.class.getResourceAsStream("/"
+ + filtersOptionDirName + filtersOptionDefault);
Properties mimeProps = new Properties();
@@ -99,11 +99,10 @@
// add basic value js and htmlp
filtersOptions.put(defaultFilterOption.getKey(), defaultFilterOption);
try {
- List<URL> urlsRessourceFilters = Resource.getResources( filtersOptionDirName +"filters-\\w*\\.properties",
- Thread.currentThread().getContextClassLoader()
- );
- ///"+filtersOptionDirName+"/filters-\\w*\\.properties"
-
+ List<URL> urlsRessourceFilters = Resource.getResources(
+ filtersOptionDirName + FILTERS_FILE_NAME_REGEX, Thread
+ .currentThread().getContextClassLoader());
+ // /"+filtersOptionDirName+"/filters-\\w*\\.properties"
System.out.println(urlsRessourceFilters);
for (URL propFil : urlsRessourceFilters) {
@@ -111,7 +110,7 @@
Properties props = new Properties();
InputStream propsstrem = propFil.openStream();
props.load(propsstrem);
-
+
// parse properties
FilterOption option = new FilterOption();
option.setOpeningTemplate(props
@@ -232,7 +231,6 @@
String mimeKeyOption = helper.pubUiMimeToConverterOption(mime);
return filtersOptions.containsKey(mimeKeyOption);
}
-
public boolean isDecorated(String string) {
return filtersOptions.containsKey(string);
1
0
r1188 - in trunk: wikitty-publication/src/main/java/org/nuiton/wikitty/publication wikitty-publication/src/main/resources wikitty-publication/src/main/resources/filters-properties wikitty-publication-ui/src/main/java/org/nuiton/wikitty/publication/ui/action
by mfortun@users.nuiton.org 26 Aug '11
by mfortun@users.nuiton.org 26 Aug '11
26 Aug '11
Author: mfortun
Date: 2011-08-26 17:09:10 +0200 (Fri, 26 Aug 2011)
New Revision: 1188
Url: http://nuiton.org/repositories/revision/wikitty/1188
Log:
* allow dev to add new filters to transform for exemple text/html.javascript to text/javascript
* add filters/support for html gui inside java as text/html.java
Added:
trunk/wikitty-publication/src/main/resources/filters-properties/
trunk/wikitty-publication/src/main/resources/filters-properties/README.txt
trunk/wikitty-publication/src/main/resources/filters-properties/filters-default.properties
trunk/wikitty-publication/src/main/resources/filters-properties/filters-java.properties
Modified:
trunk/wikitty-publication-ui/src/main/java/org/nuiton/wikitty/publication/ui/action/PublicationActionEval.java
trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/CodeDecorator.java
trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/FilterOption.java
trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/MimeTypePubHelper.java
trunk/wikitty-publication/src/main/resources/mimetype.properties
Modified: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/CodeDecorator.java
===================================================================
--- trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/CodeDecorator.java 2011-08-26 09:15:04 UTC (rev 1187)
+++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/CodeDecorator.java 2011-08-26 15:09:10 UTC (rev 1188)
@@ -1,10 +1,16 @@
package org.nuiton.wikitty.publication;
+import java.io.File;
+import java.io.FileFilter;
import java.io.IOException;
+import java.io.InputStream;
import java.io.StringReader;
import java.io.StringWriter;
+import java.net.URL;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
+import java.util.Properties;
import org.apache.commons.lang.StringEscapeUtils;
import org.apache.commons.lang.StringUtils;
@@ -13,57 +19,131 @@
import org.nuiton.processor.Processor;
import org.nuiton.processor.filters.GeneratorTemplatesFilter;
import org.nuiton.processor.filters.GeneratorTemplatesFilterIn;
+import org.nuiton.util.Resource;
import org.nuiton.util.StringUtil;
import org.nuiton.wikitty.entities.Wikitty;
import org.nuiton.wikitty.publication.entities.WikittyPubText;
import org.nuiton.wikitty.publication.entities.WikittyPubTextHelper;
import org.nuiton.wikitty.search.operators.Element;
+import temp.Mainer;
+
public class CodeDecorator {
static private Log log = LogFactory.getLog(CodeDecorator.class);
-
+
/*
* Après le script engine le ui Code décorateur
*
* décorer à l'inverse en fait transformer du html en js qui contient du
* html par exemple
*
- * regex for html end token need to add /n at the end
- * "</[\\w\\d]*>"
+ * regex for html end token need to add /n at the end "</[\\w\\d]*>"
*/
- protected String DEFAULT_MIME_TYPE_RETURN = "text/html; charset=UTF-8";
- protected String MIME_SEP = "/";
+ static protected String MIME_SEP = "/";
+ static protected String filtersOptionDirName = "filters-properties/";
+ static protected String filtersOptionDefault = "filters-default.properties";
+
protected Map<String, FilterOption> filtersOptions;
-
static protected FilterOption defaultFilterOption;
static {
+
+ InputStream input = CodeDecorator.class.getResourceAsStream("/"+filtersOptionDirName + filtersOptionDefault);
+
+ Properties mimeProps = new Properties();
+
+ try {
+ mimeProps.load(input);
+
+ } catch (IOException e) {
+ // TODO mfortun-2011-08-16 Exception not really handled
+ if (log.isErrorEnabled()) {
+ log.error(
+ "Error while reading properties Fie that containt filters option mapping ",
+ e);
+ }
+ }
+
defaultFilterOption = new FilterOption();
- defaultFilterOption.setOpeningTemplate("var wp_result=\"");
- defaultFilterOption.setWriteString("wp_result");
- defaultFilterOption.setStringDelim("\"");
- defaultFilterOption.setConcatChar("+");
- defaultFilterOption.setEndingCar(";");
- defaultFilterOption.setClosingWriterChar("");
- defaultFilterOption.setOpeningWriterChar("+=");
- defaultFilterOption.setClosingTemplate("\";");
- defaultFilterOption.setMimeType("application/javascript");
-
-
-
+ defaultFilterOption.setOpeningTemplate(mimeProps
+ .getProperty(FilterOption.OpeningTemplate));
+ defaultFilterOption.setWriteString(mimeProps
+ .getProperty(FilterOption.WriteString));
+ defaultFilterOption.setStringDelim(mimeProps
+ .getProperty(FilterOption.StringDelim));
+ defaultFilterOption.setConcatChar(mimeProps
+ .getProperty(FilterOption.ConcatChar));
+ defaultFilterOption.setEndingCar(mimeProps
+ .getProperty(FilterOption.EndingCar));
+ defaultFilterOption.setClosingWriterChar(mimeProps
+ .getProperty(FilterOption.ClosingWriterChar));
+ defaultFilterOption.setOpeningWriterChar(mimeProps
+ .getProperty(FilterOption.OpeningWriterChar));
+ defaultFilterOption.setClosingTemplate(mimeProps
+ .getProperty(FilterOption.ClosingTemplate));
+ defaultFilterOption.setMimeType(mimeProps
+ .getProperty(FilterOption.MimeType));
+ defaultFilterOption.setKey(mimeProps.getProperty(FilterOption.Key));
+ defaultFilterOption.setContentType(mimeProps
+ .getProperty(FilterOption.ContentType));
+
}
public CodeDecorator() {
filtersOptions = new HashMap<String, FilterOption>();
-
- // add basic value js and htmlp
- filtersOptions.put("html.javascript", defaultFilterOption);
+ // add basic value js and htmlp
+ filtersOptions.put(defaultFilterOption.getKey(), defaultFilterOption);
+ try {
+ List<URL> urlsRessourceFilters = Resource.getResources( filtersOptionDirName +"filters-\\w*\\.properties",
+ Thread.currentThread().getContextClassLoader()
+ );
+ ///"+filtersOptionDirName+"/filters-\\w*\\.properties"
+
+ System.out.println(urlsRessourceFilters);
+ for (URL propFil : urlsRessourceFilters) {
+
+ Properties props = new Properties();
+ InputStream propsstrem = propFil.openStream();
+ props.load(propsstrem);
+
+ // parse properties
+ FilterOption option = new FilterOption();
+ option.setOpeningTemplate(props
+ .getProperty(FilterOption.OpeningTemplate));
+ option.setWriteString(props
+ .getProperty(FilterOption.WriteString));
+ option.setStringDelim(props
+ .getProperty(FilterOption.StringDelim));
+ option.setConcatChar(props.getProperty(FilterOption.ConcatChar));
+ option.setEndingCar(props.getProperty(FilterOption.EndingCar));
+ option.setClosingWriterChar(props
+ .getProperty(FilterOption.ClosingWriterChar));
+ option.setOpeningWriterChar(props
+ .getProperty(FilterOption.OpeningWriterChar));
+ option.setClosingTemplate(props
+ .getProperty(FilterOption.ClosingTemplate));
+ option.setMimeType(props.getProperty(FilterOption.MimeType));
+ option.setKey(props.getProperty(FilterOption.Key));
+ option.setContentType(props
+ .getProperty(FilterOption.ContentType));
+
+ // addfilters options
+ filtersOptions.put(option.getKey(), option);
+ }
+
+ } catch (IOException e) {
+ if (log.isErrorEnabled()) {
+ // TODO mfortun-2011-08-26 Exception simply handled
+ log.error("Error While reading filters option properties file",
+ e);
+ }
+ }
}
public Wikitty transformPubUIToPubText(Wikitty wikitty) throws IOException {
@@ -106,7 +186,7 @@
// set default content result (override if wikitty content define it)
decoredContent += WikittyPublicationConstant.CONTEXT_VAR
- + ".setContentType(\"" + DEFAULT_MIME_TYPE_RETURN + "\")"
+ + ".setContentType(\"" + foption.getContentType() + "\")"
+ foption.getEndingCar();
Processor proc = new Processor();
@@ -142,28 +222,28 @@
return isMimeTypeUi(mime);
}
-
public boolean isTransformationNeeded(WikittyPubText wikitty) {
String mime = wikitty.getMimeType();
return isMimeTypeUi(mime);
}
-
- public boolean isMimeTypeUi(String mime){
+ public boolean isMimeTypeUi(String mime) {
MimeTypePubHelper helper = new MimeTypePubHelper();
String mimeKeyOption = helper.pubUiMimeToConverterOption(mime);
return filtersOptions.containsKey(mimeKeyOption);
}
+
public boolean isDecorated(String string) {
return filtersOptions.containsKey(string);
-
+
}
-
-
+
/**
* Use to transform wikittyPubText.content into compilable Java
- * @param wikitty the wikitty pub text
+ *
+ * @param wikitty
+ * the wikitty pub text
* @return the java code
*/
public String getCode(Wikitty wikitty) {
@@ -200,7 +280,7 @@
classContent += "public Object eval(Map<String, Object> bindings ) throws Exception {";
- if (mimeType.equals(MimeTypePubHelper.JAVA_TYPE)){
+ if (mimeType.equals(MimeTypePubHelper.JAVA_TYPE)) {
/*
* Iterate on element that must be in the context and write
@@ -211,16 +291,17 @@
*/
// contruct variables that can be used inside the java code.
-
- classContent += PublicationContext.class.getSimpleName()+" "
- + WikittyPublicationConstant.CONTEXT_VAR
- + " = (" +PublicationContext.class.getSimpleName()+ ") bindings.get(\""
+ classContent += PublicationContext.class.getSimpleName() + " "
+ + WikittyPublicationConstant.CONTEXT_VAR + " = ("
+ + PublicationContext.class.getSimpleName()
+ + ") bindings.get(\""
+ WikittyPublicationConstant.CONTEXT_VAR + "\");";
- classContent += EvalInterface.class.getSimpleName() +" "
- + WikittyPublicationConstant.EVAL_VAR
- + " = (" +EvalInterface.class.getSimpleName() + ") bindings.get(\""
+ classContent += EvalInterface.class.getSimpleName() + " "
+ + WikittyPublicationConstant.EVAL_VAR + " = ("
+ + EvalInterface.class.getSimpleName() + ") bindings.get(\""
+ WikittyPublicationConstant.EVAL_VAR + "\");";
- classContent += "String " + WikittyPublicationConstant.PAGE_NAME_VAR
+ classContent += "String "
+ + WikittyPublicationConstant.PAGE_NAME_VAR
+ " = (String) bindings.get(\""
+ WikittyPublicationConstant.PAGE_NAME_VAR + "\");";
classContent += "List<String> "
@@ -234,7 +315,8 @@
classContent += content;
} else {
- // TODO mfortun-2011-07-08 write a better "filter" must isolate specific
+ // TODO mfortun-2011-07-08 write a better "filter" must isolate
+ // specific
// mime type that correspond to precompilable langague
classContent += "Object result = null;";
classContent += "String content = \""
@@ -251,5 +333,13 @@
return classContent;
}
-
+
+ public Map<String, FilterOption> getFiltersOptions() {
+ return filtersOptions;
+ }
+
+ public void setFiltersOptions(Map<String, FilterOption> filtersOptions) {
+ this.filtersOptions = filtersOptions;
+ }
+
}
Modified: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/FilterOption.java
===================================================================
--- trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/FilterOption.java 2011-08-26 09:15:04 UTC (rev 1187)
+++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/FilterOption.java 2011-08-26 15:09:10 UTC (rev 1188)
@@ -2,6 +2,22 @@
public class FilterOption {
+
+ public static String OpeningTemplate = "OpeningTemplate";
+ public static String WriteString = "WriteString";
+ public static String StringDelim = "StringDelim";
+ public static String ConcatChar = "ConcatChar";
+ public static String EndingCar = "EndingCar";
+ public static String ClosingWriterChar = "ClosingWriterChar";
+ public static String OpeningWriterChar = "OpeningWriterChar";
+ public static String ClosingTemplate = "ClosingTemplate";
+ public static String MimeType = "MimeType";
+ public static String Key = "Key";
+ public static String ContentType = "ContentType";
+
+
+
+
protected String writeString;
protected String stringDelim;
protected String concatChar;
@@ -10,7 +26,21 @@
protected String closingWriterChar;
protected String closingTemplate;
protected String mimeType;
+ protected String contentType;
+ protected String key;
+ public String getContentType() {
+ return contentType;
+ }
+ public void setContentType(String contentType) {
+ this.contentType = contentType;
+ }
+ public String getKey() {
+ return key;
+ }
+ public void setKey(String key) {
+ this.key = key;
+ }
public String getMimeType() {
return mimeType;
}
Modified: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/MimeTypePubHelper.java
===================================================================
--- trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/MimeTypePubHelper.java 2011-08-26 09:15:04 UTC (rev 1187)
+++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/MimeTypePubHelper.java 2011-08-26 15:09:10 UTC (rev 1188)
@@ -50,7 +50,7 @@
public class MimeTypePubHelper {
static private Log log = LogFactory.getLog(MimeTypePubHelper.class);
-
+
public static final String JAVA_TYPE = "text/java";
public static final String JAR_TYPE = "application/jar";
/**
@@ -59,24 +59,21 @@
protected BidiMap bidiMap;
// TODO mfortun-2011-08-05 change this, this is a hack
// change this to a handler to have specific langage compiler as jython etc
- protected List<String> compilable;
+
protected ScriptEngineManager manager;
protected CodeDecorator decorator;
-
- static public String COMMON_MIME_SEP ="/";
- static public String PUBLICATION_MIME_SEP=".";
-
- static public String PREFIX_MIME_PUB_TEXT= "text";
- static public String MIME_PROPERTIE="mimetype.properties";
+
+ static public String COMMON_MIME_SEP = "/";
+ static public String PUBLICATION_MIME_SEP = ".";
+
+ static public String PREFIX_MIME_PUB_TEXT = "text";
+ static public String MIME_PROPERTIE = "mimetype.properties";
/**
- * match pub text that must be converted via ui decorateur
- * text/\w*\.\w*
- * as
+ * match pub text that must be converted via ui decorateur text/\w*\.\w* as
* text/html.javascript
*/
static public String REGEX_PUB_TEXT_TRANSFORM = "text/\\w*\\.\\w*";
-
/**
* The default mime type
*/
@@ -84,44 +81,37 @@
public MimeTypePubHelper() {
decorator = new CodeDecorator();
- compilable = new LinkedList<String>();
bidiMap = new DualHashBidiMap();
manager = ScriptEvaluator.getScriptEnginManager(null);
- compilable.add(JAVA_TYPE);
-
- InputStream input = MimeTypePubHelper.class.getResourceAsStream("/mimetype.properties");
-
+
+ InputStream input = MimeTypePubHelper.class
+ .getResourceAsStream("/mimetype.properties");
+
Properties mimeProps = new Properties();
try {
mimeProps.load(input);
-
+
} catch (IOException e) {
// TODO mfortun-2011-08-16 Exception not really handled
- if (log.isErrorEnabled()){
- log.error("Error while reading properties Fie that containt mimetype mapping ", e );
+ if (log.isErrorEnabled()) {
+ log.error(
+ "Error while reading properties Fie that containt mimetype mapping ",
+ e);
}
}
-
-
- for ( Map.Entry<Object, Object> en : mimeProps.entrySet()){
+
+ for (Map.Entry<Object, Object> en : mimeProps.entrySet()) {
bidiMap.put(en.getValue(), en.getKey());
}
-
+
/*
*
- * si type commence par text alors -> pubtext
- * si text/machin.truc ça veut dire qu'on doit le préprosesser
- * avec le bon truc
- *
- *
+ * si type commence par text alors -> pubtext si text/machin.truc ça
+ * veut dire qu'on doit le préprosesser avec le bon truc
*/
-
-
+
}
-
-
-
/**
* Return the corresponding mime Type for an extension, default if not
* recognized
@@ -133,14 +123,11 @@
*/
public String getExtensionForMime(String mime) {
bidiMap = bidiMap.inverseBidiMap();
- String result = (String) bidiMap.get(mime);
+ String result = (String) bidiMap.get(mime);
bidiMap = bidiMap.inverseBidiMap();
return result;
}
-
-
-
/**
* Return the corresponding mime Type for an extension, default if not
* recognized
@@ -169,60 +156,64 @@
*/
public boolean isPubTextMime(String mimeType) {
// will check if there is an engine for the mimetype
-
+
boolean result;
-
+
// check if mimetype startwith the PUbtext prefix
result = mimeType.startsWith(PREFIX_MIME_PUB_TEXT);
-
+
// if mimetype match the regex for wikitty pub text that must be
// decorate by uidecorator,
- if (mimeType.matches(REGEX_PUB_TEXT_TRANSFORM)){
+ if (mimeType.matches(REGEX_PUB_TEXT_TRANSFORM)) {
String[] mimeTab = StringUtil.split(mimeType, COMMON_MIME_SEP);
// construct final mime of the script after transformation
String originalMime = mimeTab[0];
- originalMime+=COMMON_MIME_SEP+StringUtil.split(mimeType,PUBLICATION_MIME_SEP)[1];
-
- //check if there is an engine to execute final script
- result = manager.getEngineByMimeType(originalMime)!=null;
+ originalMime += COMMON_MIME_SEP
+ + StringUtil.split(mimeType, PUBLICATION_MIME_SEP)[1];
+
+ // check if there is an engine to execute final script
+ result = manager.getEngineByMimeType(originalMime) != null
+ || originalMime.equals(JAVA_TYPE);
// check if there rules to transform the script
result = result && decorator.isDecorated(mimeTab[1]);
}
-
+
return result;
}
-
-
- public String pubUiMimeToConverterOption (String mime){
+
+ public String pubUiMimeToConverterOption(String mime) {
String result = mime;
- if (mime.matches(REGEX_PUB_TEXT_TRANSFORM)){
+ if (mime.matches(REGEX_PUB_TEXT_TRANSFORM)) {
result = StringUtil.split(mime, COMMON_MIME_SEP)[1];
}
return result;
}
-
- public String pubUiMimeToTargetMime (String mime){
+
+ public String pubUiMimeToTargetMime(String mime) {
String result = mime;
- if (mime.matches(REGEX_PUB_TEXT_TRANSFORM)){
+ if (mime.matches(REGEX_PUB_TEXT_TRANSFORM)) {
String[] mimeTab = StringUtil.split(mime, COMMON_MIME_SEP);
// construct final mime of the script after transformation
result = mimeTab[0];
- result += COMMON_MIME_SEP+StringUtil.split(mime,PUBLICATION_MIME_SEP)[1];
+ result += COMMON_MIME_SEP
+ + StringUtil.split(mime, PUBLICATION_MIME_SEP)[1];
}
return result;
}
-
+
/**
- * used to check if a file have to be converted as a wikittyPubText
- * with his extension similar to :
- * <br>isPubTextMime(getMimeForExtension(extension))</br>
- * @param extension the file extension
+ * used to check if a file have to be converted as a wikittyPubText with his
+ * extension similar to : <br>
+ * isPubTextMime(getMimeForExtension(extension))</br>
+ *
+ * @param extension
+ * the file extension
* @return if the extension correspond to a wikittyPubText
*/
public boolean isPubTextExtension(String extension) {
return isPubTextMime(getMimeForExtension(extension));
}
-
+
/**
* Add an entry in the map that store mapping between extension and
* mimeType.
@@ -233,7 +224,7 @@
public void addExtensionMime(String extension, String mime) {
bidiMap.put(extension, mime);
}
-
+
public ScriptEngineManager getManager() {
return manager;
}
@@ -242,11 +233,4 @@
this.manager = manager;
}
-
- public boolean isReallyCompilable(String mimeType){
- return compilable.contains(mimeType);
- }
-
-
-
}
Added: trunk/wikitty-publication/src/main/resources/filters-properties/README.txt
===================================================================
--- trunk/wikitty-publication/src/main/resources/filters-properties/README.txt (rev 0)
+++ trunk/wikitty-publication/src/main/resources/filters-properties/README.txt 2011-08-26 15:09:10 UTC (rev 1188)
@@ -0,0 +1,11 @@
+OpeningTemplate
+WriteString
+StringDelim
+ConcatChar
+EndingCar
+ClosingWriterChar
+OpeningWriterChar
+ClosingTemplate
+MimeType
+Key
+ContentType
\ No newline at end of file
Added: trunk/wikitty-publication/src/main/resources/filters-properties/filters-default.properties
===================================================================
--- trunk/wikitty-publication/src/main/resources/filters-properties/filters-default.properties (rev 0)
+++ trunk/wikitty-publication/src/main/resources/filters-properties/filters-default.properties 2011-08-26 15:09:10 UTC (rev 1188)
@@ -0,0 +1,11 @@
+WriteString=wp_result
+OpeningTemplate=var wp_result="
+StringDelim="
+ConcatChar=+
+EndingCar=;
+ClosingWriterChar=
+OpeningWriterChar=+=
+ClosingTemplate=";
+MimeType=application\/javascript
+Key=html.javascript
+ContentType=text\/html; charset=UTF-8
\ No newline at end of file
Added: trunk/wikitty-publication/src/main/resources/filters-properties/filters-java.properties
===================================================================
--- trunk/wikitty-publication/src/main/resources/filters-properties/filters-java.properties (rev 0)
+++ trunk/wikitty-publication/src/main/resources/filters-properties/filters-java.properties 2011-08-26 15:09:10 UTC (rev 1188)
@@ -0,0 +1,11 @@
+WriteString=wp_result
+OpeningTemplate=String wp_result="
+StringDelim="
+ConcatChar=+
+EndingCar=;
+ClosingWriterChar=
+OpeningWriterChar=+=
+ClosingTemplate="; return wp_result;
+MimeType=text\/java
+Key=html.java
+ContentType=text\/html; charset=UTF-8
\ No newline at end of file
Modified: trunk/wikitty-publication/src/main/resources/mimetype.properties
===================================================================
--- trunk/wikitty-publication/src/main/resources/mimetype.properties 2011-08-26 09:15:04 UTC (rev 1187)
+++ trunk/wikitty-publication/src/main/resources/mimetype.properties 2011-08-26 15:09:10 UTC (rev 1188)
@@ -11,6 +11,7 @@
# for this mime type)
text/javascript=wp
text/html.javascript=htmljs
+text/html.java=htmlja
image/jpeg=jpg
image/png=png
text/java=java
Modified: trunk/wikitty-publication-ui/src/main/java/org/nuiton/wikitty/publication/ui/action/PublicationActionEval.java
===================================================================
--- trunk/wikitty-publication-ui/src/main/java/org/nuiton/wikitty/publication/ui/action/PublicationActionEval.java 2011-08-26 09:15:04 UTC (rev 1187)
+++ trunk/wikitty-publication-ui/src/main/java/org/nuiton/wikitty/publication/ui/action/PublicationActionEval.java 2011-08-26 15:09:10 UTC (rev 1188)
@@ -161,7 +161,7 @@
classloader = new WikittyPublicationClassLoader(urls);
// REALLY IMPORTANT put the classloader with the jarloaded
-
+
Thread.currentThread().setContextClassLoader(classloader);
doAction(this, getMandatoryArguments());
@@ -211,109 +211,8 @@
|| WikittyPubTextHelper.getMimeType(w).equals(
MimeTypePubHelper.JAVA_TYPE)) {
- if (WikittyPubTextHelper.getMimeType(w).equals(
- MimeTypePubHelper.JAVA_TYPE)) {
- String name = WikittyPubTextHelper.getName(w);
- if (!FileUtils.getTempDirectory().exists()) {
- FileUtils.getTempDirectory().mkdir();
- }
+ result = evalJava(context, subContext, decorator, criteria, w);
- File javaWikittyFile = new File(FileUtils
- .getTempDirectory().getAbsolutePath()
- + File.separator + JAVA_TEMP_DIR_NAME);
- if (!javaWikittyFile.exists()) {
- javaWikittyFile.mkdir();
- }
-
- String javaContent = decorator.getCode(w);
-
- String content = null;
- try {
- File javaFile = new File(
- javaWikittyFile.getAbsolutePath()
- + File.separator + name + ".java");
- File clazzFile = new File(
- javaWikittyFile.getAbsolutePath()
- + File.separator + name + ".class");
-
- if (javaFile.exists()) {
- content = FileUtil.readAsString(javaFile);
- }
- if (content == null
- || !StringUtil.encodeMD5(javaContent).equals(
- StringUtil.encodeMD5(content))
- || !clazzFile.exists()) {
- javaFile.createNewFile();
- FileUtil.writeString(javaFile, javaContent);
-
- PrintWriter writer = new PrintWriter(System.out);
- // compile
- CompileHelper.compile(classPathSup,
- javaWikittyFile, javaFile, javaWikittyFile,
- writer);
- }
-
- File classFile = new File(
- javaWikittyFile.getAbsolutePath()
- + File.separator + name + ".class");
-
- byte[] wikittyByte = FileUtil.fileToByte(classFile);
-
- w.addExtension(WikittyPubTextCompiledImpl.extensionWikittyPubTextCompiled);
- WikittyPubTextCompiledHelper
- .setByteCode(w, wikittyByte);
- } catch (Exception e) {
- // TODO mfortun-2011-08-16 really handle exception
- if (log.isErrorEnabled()) {
- log.error(
- "Error while transforming wikittyPubText to wikittyPubTextCompiled wikitty:"
- + w, e);
- }
-
- result = getError(context);
- }
-
- }
-
- byte[] content = WikittyPubTextCompiledHelper.getByteCode(w);
- if (content == null) {
- result = getError(context);
- } else {
-
- /*
- * if wikitty pub text compiled we load the class
- * corresponding to the byte code contained. And then invoke
- * the eval method on it
- */
- String name = WikittyPubTextHelper.getName(w);
-
- // supprime de subcontext ce qui a ete utilise dans cette
- // methode
- subContext = new ArrayList<String>(subContext.subList(1,
- subContext.size()));
-
- Map<String, Object> bindings = new HashMap<String, Object>();
- bindings.put(WikittyPublicationConstant.PAGE_NAME_VAR,
- criteria.getName());
- bindings.put(WikittyPublicationConstant.CONTEXT_VAR,
- context);
- bindings.put(WikittyPublicationConstant.SUBCONTEXT_VAR,
- subContext);
- bindings.put(WikittyPublicationConstant.WIKITTY_VAR, w);
- bindings.put(WikittyPublicationConstant.EVAL_VAR, this);
-
- Class<? extends AbstractDecoredClass> clazz = (Class<? extends AbstractDecoredClass>) classloader
- .addClass(name, content);
-
- try {
- result = clazz.newInstance().eval(bindings);
- } catch (Exception e) {
- // TODO Mfortun-2011-07-08 really handle exception
- e.printStackTrace();
- result = getError(context);
- }
- }
-
} else {
log.debug("Check if transformed needed");
@@ -333,30 +232,41 @@
if (content == null) {
result = getError(context);
+
} else {
String mimetype = WikittyPubTextHelper.getMimeType(w);
+ // check if after decoration this is java
+ if (mimetype.equals(MimeTypePubHelper.JAVA_TYPE)) {
+ result = evalJava(context, subContext, decorator,
+ criteria, w);
- // supprime de subcontext ce qui a ete utilise dans cette
- // methode
- subContext = new ArrayList<String>(subContext.subList(1,
- subContext.size()));
+ } else {
+ // supprime de subcontext ce qui a ete utilise dans
+ // cette
+ // methode
+ subContext = new ArrayList<String>(subContext.subList(
+ 1, subContext.size()));
- Map<String, Object> bindings = new HashMap<String, Object>();
- bindings.put(WikittyPublicationConstant.PAGE_NAME_VAR,
- criteria.getName());
- bindings.put(WikittyPublicationConstant.CONTEXT_VAR,
- context);
- bindings.put(WikittyPublicationConstant.SUBCONTEXT_VAR,
- subContext);
- bindings.put(WikittyPublicationConstant.WIKITTY_VAR, w);
- bindings.put(WikittyPublicationConstant.EVAL_VAR, this);
+ Map<String, Object> bindings = new HashMap<String, Object>();
+ bindings.put(WikittyPublicationConstant.PAGE_NAME_VAR,
+ criteria.getName());
+ bindings.put(WikittyPublicationConstant.CONTEXT_VAR,
+ context);
+ bindings.put(WikittyPublicationConstant.SUBCONTEXT_VAR,
+ subContext);
+ bindings.put(WikittyPublicationConstant.WIKITTY_VAR, w);
+ bindings.put(WikittyPublicationConstant.EVAL_VAR, this);
- // TODO mfortun-2011-08-08 construire un class path avec
- // des jar et les classes contenu dans wikitty publication
-
- result = ScriptEvaluator.eval(classloader,
- criteria.getName(), content, mimetype, bindings);
+ // TODO mfortun-2011-08-08 construire un class path avec
+ // des jar et les classes contenu dans wikitty
+ // publication
+
+ result = ScriptEvaluator
+ .eval(classloader, criteria.getName(), content,
+ mimetype, bindings);
+ }
+
}
}
}
@@ -365,6 +275,117 @@
return result;
}
+ /**
+ * Method to evaluate java kind of wikittyPubText
+ * @param context the context
+ * @param subContext the subcontex
+ * @param decorator instance codeDecorator
+ * @param criteria the criteria
+ * @param w the wikitty
+ * @return the result of wikittyPubText content evaluation
+ */
+ protected Object evalJava(PublicationContext context,
+ List<String> subContext, CodeDecorator decorator,
+ Criteria criteria, Wikitty w) {
+
+ Object result;
+
+ if (WikittyPubTextHelper.getMimeType(w).equals(
+ MimeTypePubHelper.JAVA_TYPE)) {
+ String name = WikittyPubTextHelper.getName(w);
+ if (!FileUtils.getTempDirectory().exists()) {
+ FileUtils.getTempDirectory().mkdir();
+ }
+
+ File javaWikittyFile = new File(FileUtils.getTempDirectory()
+ .getAbsolutePath() + File.separator + JAVA_TEMP_DIR_NAME);
+ if (!javaWikittyFile.exists()) {
+ javaWikittyFile.mkdir();
+ }
+
+ String javaContent = decorator.getCode(w);
+
+ String content = null;
+ try {
+ File javaFile = new File(javaWikittyFile.getAbsolutePath()
+ + File.separator + name + ".java");
+ File clazzFile = new File(javaWikittyFile.getAbsolutePath()
+ + File.separator + name + ".class");
+
+ if (javaFile.exists()) {
+ content = FileUtil.readAsString(javaFile);
+ }
+ if (content == null
+ || !StringUtil.encodeMD5(javaContent).equals(
+ StringUtil.encodeMD5(content))
+ || !clazzFile.exists()) {
+ javaFile.createNewFile();
+ FileUtil.writeString(javaFile, javaContent);
+
+ PrintWriter writer = new PrintWriter(System.out);
+ // compile
+ CompileHelper.compile(classPathSup, javaWikittyFile,
+ javaFile, javaWikittyFile, writer);
+ }
+
+ File classFile = new File(javaWikittyFile.getAbsolutePath()
+ + File.separator + name + ".class");
+
+ byte[] wikittyByte = FileUtil.fileToByte(classFile);
+
+ w.addExtension(WikittyPubTextCompiledImpl.extensionWikittyPubTextCompiled);
+ WikittyPubTextCompiledHelper.setByteCode(w, wikittyByte);
+ } catch (Exception e) {
+ // TODO mfortun-2011-08-16 really handle exception
+ if (log.isErrorEnabled()) {
+ log.error(
+ "Error while transforming wikittyPubText to wikittyPubTextCompiled wikitty:"
+ + w, e);
+ }
+
+ result = getError(context);
+ }
+
+ }
+
+ byte[] content = WikittyPubTextCompiledHelper.getByteCode(w);
+ if (content == null) {
+ result = getError(context);
+ } else {
+
+ /*
+ * if wikitty pub text compiled we load the class corresponding to
+ * the byte code contained. And then invoke the eval method on it
+ */
+ String name = WikittyPubTextHelper.getName(w);
+
+ // supprime de subcontext ce qui a ete utilise dans cette
+ // methode
+ subContext = new ArrayList<String>(subContext.subList(1,
+ subContext.size()));
+
+ Map<String, Object> bindings = new HashMap<String, Object>();
+ bindings.put(WikittyPublicationConstant.PAGE_NAME_VAR,
+ criteria.getName());
+ bindings.put(WikittyPublicationConstant.CONTEXT_VAR, context);
+ bindings.put(WikittyPublicationConstant.SUBCONTEXT_VAR, subContext);
+ bindings.put(WikittyPublicationConstant.WIKITTY_VAR, w);
+ bindings.put(WikittyPublicationConstant.EVAL_VAR, this);
+
+ Class<? extends AbstractDecoredClass> clazz = (Class<? extends AbstractDecoredClass>) classloader
+ .addClass(name, content);
+
+ try {
+ result = clazz.newInstance().eval(bindings);
+ } catch (Exception e) {
+ // TODO Mfortun-2011-07-08 really handle exception
+ e.printStackTrace();
+ result = getError(context);
+ }
+ }
+ return result;
+ }
+
/*
* (non-Javadoc)
*
@@ -497,7 +518,7 @@
@Override
public String getArgument(String name) {
- return getArgument(name, StringUtils.EMPTY);
+ return getArgument(name, StringUtils.EMPTY);
}
}
1
0
r1187 - trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication
by mfortun@users.nuiton.org 26 Aug '11
by mfortun@users.nuiton.org 26 Aug '11
26 Aug '11
Author: mfortun
Date: 2011-08-26 11:15:04 +0200 (Fri, 26 Aug 2011)
New Revision: 1187
Url: http://nuiton.org/repositories/revision/wikitty/1187
Log:
*correct encoding issue
Modified:
trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/CodeDecorator.java
Modified: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/CodeDecorator.java
===================================================================
--- trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/CodeDecorator.java 2011-08-26 09:07:24 UTC (rev 1186)
+++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/CodeDecorator.java 2011-08-26 09:15:04 UTC (rev 1187)
@@ -33,7 +33,7 @@
* "</[\\w\\d]*>"
*/
- protected String DEFAULT_MIME_TYPE_RETURN = "text/html";
+ protected String DEFAULT_MIME_TYPE_RETURN = "text/html; charset=UTF-8";
protected String MIME_SEP = "/";
protected Map<String, FilterOption> filtersOptions;
1
0
r1186 - trunk/wikitty-publication-ui/src/main/webapp/WEB-INF/jsp
by mfortun@users.nuiton.org 26 Aug '11
by mfortun@users.nuiton.org 26 Aug '11
26 Aug '11
Author: mfortun
Date: 2011-08-26 11:07:24 +0200 (Fri, 26 Aug 2011)
New Revision: 1186
Url: http://nuiton.org/repositories/revision/wikitty/1186
Log:
*add wikittyPub* Name to view page
Modified:
trunk/wikitty-publication-ui/src/main/webapp/WEB-INF/jsp/view.jsp
Modified: trunk/wikitty-publication-ui/src/main/webapp/WEB-INF/jsp/view.jsp
===================================================================
--- trunk/wikitty-publication-ui/src/main/webapp/WEB-INF/jsp/view.jsp 2011-08-26 08:56:14 UTC (rev 1185)
+++ trunk/wikitty-publication-ui/src/main/webapp/WEB-INF/jsp/view.jsp 2011-08-26 09:07:24 UTC (rev 1186)
@@ -28,6 +28,11 @@
Author : poussin
--%>
+<%@page import="org.nuiton.wikitty.publication.entities.WikittyPubDataHelper"%>
+<%@page import="org.nuiton.wikitty.publication.entities.WikittyPubData"%>
+<%@page import="org.nuiton.wikitty.publication.entities.WikittyPubTextHelper"%>
+<%@page import="org.apache.commons.lang.StringUtils"%>
+<%@page import="org.nuiton.wikitty.publication.entities.WikittyPubText"%>
<%@page import="org.apache.commons.lang.StringEscapeUtils"%>
<%@page
import="org.nuiton.wikitty.publication.ui.action.PublicationActionView"%>
@@ -91,6 +96,7 @@
<td>Wikitty Id</td>
<td>Version</td>
<td>Extensions</td>
+ <td>WikittyPub* Name</td>
</tr>
@@ -122,6 +128,17 @@
<td><%=w.getId()%></td>
<td><%=w.getVersion()%></td>
<td><%=w.getExtensionNames()%></td>
+ <td>
+ <%
+ String currentWikittyName = StringUtils.EMPTY;
+ if (w.hasExtension(WikittyPubText.EXT_WIKITTYPUBTEXT)){
+ currentWikittyName = WikittyPubTextHelper.getName(w);
+ } else if (w.hasExtension(WikittyPubData.EXT_WIKITTYPUBDATA)) {
+ currentWikittyName = WikittyPubDataHelper.getName(w);
+ }
+ %>
+ <%=currentWikittyName%>
+ </td>
</tr>
<%
i++;
1
0