Changeset 5524

Show
Ignore:
Timestamp:
01/21/11 18:25:29 (16 months ago)
Author:
mtld
Message:

merged changes from pustefix 0.15 branch revision 5417 to 5500

Location:
branches/release-0.16.x
Files:
8 removed
152 modified
29 copied

Legend:

Unmodified
Added
Removed
  • branches/release-0.16.x

  • branches/release-0.16.x/ChangeLog

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/release-0.16.x/INSTALL

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/release-0.16.x/LGPL.txt

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/release-0.16.x/LICENSE

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/release-0.16.x/pom.xml

    r5419 r5524  
    9292 
    9393  <build> 
    94     <plugins> 
    95       <plugin> 
    96         <groupId>org.apache.maven.plugins</groupId> 
    97         <artifactId>maven-eclipse-plugin</artifactId> 
    98         <version>2.5.1</version> 
    99       </plugin> 
    100       <plugin> 
    101         <groupId>org.apache.maven.plugins</groupId> 
    102         <artifactId>maven-compiler-plugin</artifactId> 
    103         <configuration> 
    104           <source>1.5</source> 
    105           <target>1.5</target> 
    106         </configuration> 
    107       </plugin> 
    108       <plugin> 
    109         <groupId>org.apache.maven.plugins</groupId> 
    110         <artifactId>maven-jar-plugin</artifactId> 
    111         <configuration> 
    112           <archive> 
    113             <addMavenDescriptor>false</addMavenDescriptor> 
    114             <manifest> 
    115               <addDefaultImplementationEntries>true</addDefaultImplementationEntries> 
    116               <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries> 
    117             </manifest> 
    118           </archive> 
    119         </configuration> 
    120       </plugin>  
    121       <plugin> 
    122          <groupId>org.apache.maven.plugins</groupId> 
    123          <artifactId>maven-release-plugin</artifactId> 
    124          <version>2.1</version> 
    125          <configuration> 
    126            <!-- TODO: also building the site failed persistently with !ClassNotFoundException for !GlobalConfig  
     94    <extensions> 
     95      <extension> 
     96        <groupId>org.apache.maven.wagon</groupId> 
     97        <artifactId>wagon-ssh-external</artifactId> 
     98        <version>1.0-beta-7</version> 
     99      </extension> 
     100    </extensions> 
     101    <pluginManagement> 
     102      <plugins> 
     103        <plugin> 
     104          <groupId>org.apache.maven.plugins</groupId> 
     105          <artifactId>maven-eclipse-plugin</artifactId> 
     106          <version>2.8</version> 
     107          <configuration> 
     108            <downloadSources>true</downloadSources> 
     109          </configuration> 
     110        </plugin> 
     111        <plugin> 
     112          <groupId>org.apache.maven.plugins</groupId> 
     113          <artifactId>maven-install-plugin</artifactId> 
     114          <version>2.3.1</version> 
     115        </plugin> 
     116        <plugin> 
     117          <groupId>org.apache.maven.plugins</groupId> 
     118          <artifactId>maven-surefire-plugin</artifactId> 
     119          <version>2.7.1</version> 
     120          <configuration> 
     121            <useFile>false</useFile> 
     122          </configuration> 
     123        </plugin> 
     124        <plugin> 
     125          <groupId>org.apache.maven.plugins</groupId> 
     126          <artifactId>maven-jar-plugin</artifactId> 
     127          <version>2.3.1</version> 
     128          <configuration> 
     129            <archive> 
     130              <addMavenDescriptor>false</addMavenDescriptor> 
     131              <manifest> 
     132                <addDefaultImplementationEntries>true</addDefaultImplementationEntries> 
     133                <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries> 
     134              </manifest> 
     135            </archive> 
     136          </configuration> 
     137        </plugin> 
     138        <plugin> 
     139          <groupId>org.apache.maven.plugins</groupId> 
     140          <artifactId>maven-source-plugin</artifactId> 
     141          <version>2.1.2</version> 
     142        </plugin> 
     143        <plugin> 
     144          <groupId>org.apache.maven.plugins</groupId> 
     145          <artifactId>maven-clean-plugin</artifactId> 
     146          <version>2.4.1</version> 
     147        </plugin> 
     148        <plugin> 
     149          <groupId>org.apache.maven.plugins</groupId> 
     150          <artifactId>maven-deploy-plugin</artifactId> 
     151          <version>2.5</version> 
     152        </plugin> 
     153        <plugin> 
     154          <groupId>org.apache.maven.plugins</groupId> 
     155          <artifactId>maven-resources-plugin</artifactId> 
     156          <version>2.4.3</version> 
     157        </plugin> 
     158        <plugin> 
     159          <groupId>org.apache.maven.plugins</groupId> 
     160          <artifactId>maven-compiler-plugin</artifactId> 
     161          <version>2.3.2</version> 
     162          <configuration> 
     163            <source>1.5</source> 
     164            <target>1.5</target> 
     165          </configuration> 
     166        </plugin> 
     167        <plugin> 
     168           <groupId>org.apache.maven.plugins</groupId> 
     169           <artifactId>maven-release-plugin</artifactId> 
     170           <version>2.1</version> 
     171           <configuration> 
     172             <!-- TODO: also building the site failed persistently with !ClassNotFoundException for !GlobalConfig  
    127173                      (yes, I tried mvn install, it did not help). --> 
    128            <goals>deploy</goals> 
    129            <!-- Workaround for http://jira.codehaus.org/browse/MRELEASE-271 --> 
    130            <preparationGoals>clean install</preparationGoals> 
    131          </configuration> 
    132        </plugin> 
    133     </plugins> 
     174             <goals>deploy</goals> 
     175             <!-- Workaround for http://jira.codehaus.org/browse/MRELEASE-271 --> 
     176             <preparationGoals>clean install</preparationGoals> 
     177           </configuration> 
     178         </plugin> 
     179      </plugins> 
     180    </pluginManagement> 
    134181  </build> 
    135182  <reporting> 
     
    143190        <groupId>org.apache.maven.plugins</groupId> 
    144191        <artifactId>maven-javadoc-plugin</artifactId> 
     192        <version>2.7</version> 
    145193      </plugin> 
    146194      <plugin> 
    147195        <groupId>org.apache.maven.plugins</groupId> 
    148196        <artifactId>maven-changelog-plugin</artifactId> 
     197        <version>2.2</version> 
    149198      </plugin> 
    150199      <plugin> 
    151200        <groupId>org.apache.maven.plugins</groupId> 
    152201        <artifactId>maven-jxr-plugin</artifactId> 
     202        <version>2.2</version> 
    153203      </plugin> 
    154204    </plugins> 
  • branches/release-0.16.x/profiles.xml.sample

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/release-0.16.x/pustefix-archetypes/pustefix-archetype-application/pom.xml

    r5419 r5524  
    2323        <groupId>org.apache.maven.archetype</groupId> 
    2424        <artifactId>archetype-packaging</artifactId> 
    25         <version>2.0-alpha-4</version> 
     25        <version>2.0</version> 
    2626      </extension> 
    2727    </extensions> 
     
    2929      <plugin> 
    3030        <artifactId>maven-archetype-plugin</artifactId> 
    31         <version>2.0-alpha-4</version> 
     31        <version>2.0</version> 
    3232        <extensions>true</extensions> 
    3333      </plugin> 
  • branches/release-0.16.x/pustefix-archetypes/pustefix-archetype-application/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/web.xml

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/release-0.16.x/pustefix-archetypes/pustefix-archetype-basic

    • Property svn:ignore
      •  

        old new  
         1pustefix-archetype-basic.i?? 
        12.classpath 
        23.project 
  • branches/release-0.16.x/pustefix-archetypes/pustefix-archetype-basic/pom.xml

    r5419 r5524  
    2323        <groupId>org.apache.maven.archetype</groupId> 
    2424        <artifactId>archetype-packaging</artifactId> 
    25         <version>2.0-alpha-5</version> 
     25        <version>2.0</version> 
    2626      </extension> 
    2727    </extensions> 
     
    3131        <plugin> 
    3232          <artifactId>maven-archetype-plugin</artifactId> 
    33           <version>2.0-alpha-5</version> 
     33          <version>2.0</version> 
    3434          <extensions>true</extensions> 
    3535        </plugin> 
    3636      </plugins> 
    3737    </pluginManagement> 
     38    <resources> 
     39      <resource> 
     40        <targetPath>${project.build.directory}/classes</targetPath> 
     41        <filtering>false</filtering> 
     42        <directory>src/main/resources</directory> 
     43        <excludes> 
     44          <exclude>META-INF/maven/archetype-metadata.xml</exclude> 
     45        </excludes> 
     46      </resource> 
     47      <resource> 
     48        <targetPath>${project.build.directory}/classes</targetPath> 
     49        <filtering>true</filtering> 
     50        <directory>src/main/resources</directory> 
     51        <includes> 
     52          <include>META-INF/maven/archetype-metadata.xml</include> 
     53        </includes> 
     54      </resource> 
     55    </resources> 
    3856  </build> 
    3957 
  • branches/release-0.16.x/pustefix-archetypes/pustefix-archetype-basic/src/main/resources/META-INF/maven/archetype-metadata.xml

    r5208 r5524  
    5050      <defaultValue>mytld.myorg.myapp</defaultValue> 
    5151    </requiredProperty> 
     52    <requiredProperty key="pustefixVersion"> 
     53      <defaultValue>${pom.version}</defaultValue> 
     54    </requiredProperty> 
    5255  </requiredProperties> 
    5356</archetype-descriptor> 
  • branches/release-0.16.x/pustefix-archetypes/pustefix-archetype-basic/src/main/resources/archetype-resources/pom.xml

    r5412 r5524  
    1313 
    1414  <properties> 
    15     <pustefix.version>0.15.11-SNAPSHOT</pustefix.version> 
     15    <pustefix.version>${pustefixVersion}</pustefix.version> 
    1616    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    1717  </properties> 
  • branches/release-0.16.x/pustefix-archetypes/pustefix-archetype-module/pom.xml

    r5419 r5524  
    2222        <groupId>org.apache.maven.archetype</groupId> 
    2323        <artifactId>archetype-packaging</artifactId> 
    24         <version>2.0-alpha-4</version> 
     24        <version>2.0</version> 
    2525      </extension> 
    2626    </extensions> 
     
    2828      <plugin> 
    2929        <artifactId>maven-archetype-plugin</artifactId> 
    30         <version>2.0-alpha-4</version> 
     30        <version>2.0</version> 
    3131        <extensions>true</extensions> 
    3232      </plugin> 
  • branches/release-0.16.x/pustefix-core

  • branches/release-0.16.x/pustefix-core/pom.xml

    r5436 r5524  
    8484      <groupId>org.springframework</groupId> 
    8585      <artifactId>spring-context</artifactId> 
    86       <version>3.0.3.RELEASE</version> 
     86      <version>3.0.5.RELEASE</version> 
    8787    </dependency> 
    8888    <dependency> 
    8989      <groupId>org.springframework</groupId> 
    9090      <artifactId>spring-webmvc</artifactId> 
    91       <version>3.0.3.RELEASE</version> 
     91      <version>3.0.5.RELEASE</version> 
    9292    </dependency> 
    9393    <dependency> 
    9494      <groupId>org.springframework</groupId> 
    9595      <artifactId>spring-test</artifactId> 
    96       <version>3.0.3.RELEASE</version> 
     96      <version>3.0.5.RELEASE</version> 
    9797    </dependency> 
    9898 
  • branches/release-0.16.x/pustefix-core/src/data/core

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/release-0.16.x/pustefix-core/src/main/java

  • branches/release-0.16.x/pustefix-core/src/main/java/de

  • branches/release-0.16.x/pustefix-core/src/main/java/de/schlund/pfixcore/generator/annotation/IWrapper.java

    r4517 r5524  
    3535    String name() default ""; 
    3636    Class<? extends IHandler> ihandler() default IHandler.class; 
     37    String beanRef() default ""; 
    3738 
    3839} 
  • branches/release-0.16.x/pustefix-core/src/main/java/de/schlund/pfixcore/generator/iwrpgen/IWrapperAnnotationProcessor.java

    r5114 r5524  
    5656import com.sun.mirror.util.SimpleDeclarationVisitor; 
    5757 
     58import de.schlund.pfixcore.generator.IHandler; 
     59 
    5860/** 
    5961 * @author mleidig@schlund.de 
     
    198200                iwrapperClass = getIWrapperName(classDecl); 
    199201 
     202                Element ihandlerElem = doc.createElementNS(XMLNS_IWRP, "iwrp:ihandler"); 
     203                root.appendChild(ihandlerElem); 
     204                 
     205                String beanRef = null; 
     206                String ihandlerClass = null; 
     207                 
     208                AnnotationValue beanRefValue = MirrorApiUtils.getAnnotationValue(iwrpMirror, "beanRef"); 
     209                if(beanRefValue != null) { 
     210                    beanRef = beanRefValue.getValue().toString(); 
     211                    if(beanRef.equals("")) beanRef = null; 
     212                } 
    200213                AnnotationValue ihandlerValue = MirrorApiUtils.getAnnotationValue(iwrpMirror, "ihandler"); 
    201                 if (ihandlerValue != null) { 
    202                     Element ihandlerElem = doc.createElementNS(XMLNS_IWRP, "iwrp:ihandler"); 
    203                     root.appendChild(ihandlerElem); 
    204                     ihandlerElem.setAttribute("class", ihandlerValue.getValue().toString()); 
     214                if(ihandlerValue != null) { 
     215                    ihandlerClass = ihandlerValue.getValue().toString(); 
     216                    if(ihandlerClass.equals(IHandler.class.getName())) ihandlerClass = null; 
     217                } 
     218                if(beanRef == null && ihandlerClass == null) { 
     219                    env.getMessager().printError("Neither beanRef nor ihandler is set: " + classDecl.getQualifiedName()); 
     220                } else if(beanRef != null && ihandlerClass != null) { 
     221                    env.getMessager().printError("Setting both, beanRef and ihandler, isn't allowed: " + classDecl.getQualifiedName()); 
     222                } else if(beanRef != null) { 
     223                    ihandlerElem.setAttribute("bean-ref", beanRef); 
     224                } else if(ihandlerClass != null) { 
     225                    ihandlerElem.setAttribute("class", ihandlerClass); 
    205226                } 
    206227 
  • branches/release-0.16.x/pustefix-core/src/main/java/de/schlund/pfixcore/util/JarFileCache.java

    r5396 r5524  
    11package de.schlund.pfixcore.util; 
    22import java.io.File; 
     3import java.io.FileNotFoundException; 
    34import java.io.FileOutputStream; 
    45import java.io.IOException; 
     
    8283        if(!file.exists()) { 
    8384            JarEntry entry = cacheEntry.jarFile.getJarEntry(path); 
    84             long lastModified = entry.getTime(); 
    85             InputStream in = cacheEntry.jarFile.getInputStream(entry); 
    86             if(!file.getParentFile().exists()) file.getParentFile().mkdirs(); 
    87             FileOutputStream out = new FileOutputStream(file); 
    88             byte[] buffer = new byte[4096]; 
    89             int no = 0; 
    90             try { 
    91                 while ((no = in.read(buffer)) != -1) 
    92                     out.write(buffer, 0, no); 
    93             } finally { 
    94                 in.close(); 
    95                 out.close(); 
     85            if(entry == null) throw new FileNotFoundException("Jar entry '" + path +  
     86                    "' not found in file '" + jarURL.toString() +"'"); 
     87            //Work around JDK bug: calling getJarEntry() for directory entry using name with  
     88            //no trailing slash returns JarEntry object keeping this name, and calling  
     89            //isDirectory() on this object checks for the slash and returns false. 
     90            //Therefor we additionally check entries with with size 0 and try to get 
     91            //an entry with a trailing slash 
     92            if(!entry.isDirectory() && entry.getSize() == 0) { 
     93                String dirPath = path + "/"; 
     94                JarEntry dirEntry = cacheEntry.jarFile.getJarEntry(dirPath); 
     95                if(dirEntry != null) entry = dirEntry; 
    9696            } 
    97             file.setLastModified(lastModified); 
     97            if(entry.isDirectory()) { 
     98                file.mkdirs(); 
     99            } else { 
     100                long lastModified = entry.getTime(); 
     101                InputStream in = cacheEntry.jarFile.getInputStream(entry); 
     102                if(!file.getParentFile().exists()) file.getParentFile().mkdirs(); 
     103                FileOutputStream out = new FileOutputStream(file); 
     104                byte[] buffer = new byte[4096]; 
     105                int no = 0; 
     106                try { 
     107                    while ((no = in.read(buffer)) != -1) 
     108                        out.write(buffer, 0, no); 
     109                } finally { 
     110                    in.close(); 
     111                    out.close(); 
     112                } 
     113                file.setLastModified(lastModified); 
     114            } 
    98115        } 
    99116        return file;     
  • branches/release-0.16.x/pustefix-core/src/main/java/de/schlund/pfixcore/util/JarFileURLConnection.java

    r5379 r5524  
    5757     
    5858    @Override 
    59     public int getContentLength() { 
     59    public synchronized int getContentLength() { 
    6060        int len = -1; 
    6161        try { 
     
    8282        JarEntry entry = getJarFile().getJarEntry(getEntryName()); 
    8383        if(entry == null) throw new FileNotFoundException("JAR entry "+ getEntryName() + "not found in " + getJarFileURL()); 
     84        //Work around JDK bug: calling getJarEntry() for directory entry using name with  
     85        //no trailing slash returns JarEntry object keeping this name, and calling  
     86        //isDirectory() on this object checks for the slash and returns false. 
     87        //Therefor we additionally check entries with with size 0 and try to get 
     88        //an entry with a trailing slash 
     89        if(!entry.isDirectory() && entry.getSize() == 0) { 
     90            String dirPath = getEntryName() + "/"; 
     91            JarEntry dirEntry = getJarFile().getJarEntry(dirPath); 
     92            if(dirEntry != null) entry = dirEntry; 
     93        } 
    8494        return entry; 
    8595    } 
  • branches/release-0.16.x/pustefix-core/src/main/java/de/schlund/pfixcore/util/ModuleDescriptor.java

    r5375 r5524  
    5252    private Map<String,Set<String>> moduleToResourcePaths = new HashMap<String,Set<String>>(); 
    5353    private Map<String,Set<String>> moduleToResourcePathPatterns = new HashMap<String,Set<String>>(); 
     54    private List<String> staticPaths = new ArrayList<String>(); 
    5455     
    5556    private AntPathMatcher antPathMatcher = new AntPathMatcher(); 
     
    104105        } 
    105106        return false; 
     107    } 
     108     
     109    public void addStaticPath(String staticPath) { 
     110        staticPaths.add(staticPath); 
     111    } 
     112     
     113    public List<String> getStaticPaths() { 
     114        return staticPaths; 
    106115    } 
    107116     
     
    144153                } 
    145154            } 
     155            Element staticElem = getSingleChildElement(root, "static", false); 
     156            if(staticElem != null) { 
     157                List<Element> pathElems = getChildElements(staticElem, "path"); 
     158                for(Element pathElem: pathElems) { 
     159                    String path = pathElem.getTextContent().trim(); 
     160                    if(!path.equals("")) { 
     161                        if(!path.startsWith("/")) path = "/" + path; 
     162                        if(path.endsWith("/")) path = path.substring(0, path.length() - 1); 
     163                        if(path.equals("") || path.equals("/PUSTEFIX-INF")) path = "/"; 
     164                        else if(path.startsWith("/PUSTEFIX-INF")) path = path.substring(13); 
     165                        moduleInfo.addStaticPath(path); 
     166                    } 
     167                } 
     168            } 
    146169        } else throw new Exception("Illegal module descriptor"); 
    147170        return moduleInfo; 
  • branches/release-0.16.x/pustefix-core/src/main/java/de/schlund/pfixcore/util/TransformerCallback.java

    r5507 r5524  
    3838import org.pustefixframework.config.contextxmlservice.ProcessActionPageRequestConfig; 
    3939import org.pustefixframework.http.BotDetector; 
     40import org.pustefixframework.util.FrameworkInfo; 
    4041import org.w3c.dom.Document; 
    4142import org.w3c.dom.Element; 
     
    399400    } 
    400401     
     402    public static String getFrameworkVersion() { 
     403        return FrameworkInfo.getVersion(); 
     404    } 
     405     
    401406} 
  • branches/release-0.16.x/pustefix-core/src/main/java/de/schlund/pfixcore/util/email/EmailSender.java

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/release-0.16.x/pustefix-core/src/main/java/de/schlund/pfixxml/IncludeDocumentExtension.java

    r5332 r5524  
    3434import org.xml.sax.SAXException; 
    3535 
     36import de.schlund.pfixxml.resources.DynamicResourceInfo; 
     37import de.schlund.pfixxml.resources.DynamicResourceProvider; 
    3638import de.schlund.pfixxml.resources.FileResource; 
    3739import de.schlund.pfixxml.resources.Resource; 
     
    6870     
    6971    private static Pattern dynamicUriPattern = Pattern.compile("dynamic://[^?#]*(\\?([^#]*))?(#.*)?"); 
     72     
     73    private static DynamicResourceProvider dynamicResourceProvider = new DynamicResourceProvider(); 
    7074     
    7175    //~ Methods 
     
    327331        return resolvedUri.get(); 
    328332    } 
     333     
     334    public static String getDynIncInfo(String part, String theme, String path, String resolvedModule, String requestedModule) { 
     335        try { 
     336            StringBuilder sb = new StringBuilder(); 
     337            sb.append(part).append("|").append(theme).append("|").append(path).append("|").append(resolvedModule); 
     338            sb.append("|").append(requestedModule).append("|"); 
     339            if(!path.startsWith("/")) path = "/" + path; 
     340            URI uri = new URI("dynamic://" + requestedModule + path + "?part=" + part); 
     341            DynamicResourceInfo info = new DynamicResourceInfo(); 
     342            dynamicResourceProvider.getResource(uri, info); 
     343            sb.append(info.toString()); 
     344            return sb.toString(); 
     345        } catch (Exception x) { 
     346            LOG.error("Error getting dynamic include information", x); 
     347            return "n/a"; 
     348        } 
     349    } 
    329350 
    330351    private static final Node errorNode(XsltContext context,String prodname) { 
  • branches/release-0.16.x/pustefix-core/src/main/java/de/schlund/pfixxml/IncludeDocumentExtensionSaxon1.java

    r4517 r5524  
    5454        return IncludeDocumentExtension.getResolvedURI(); 
    5555    } 
     56     
     57    public static String getDynIncInfo(String part, String theme, String path, String resolvedModule, String requestedModule) { 
     58        return IncludeDocumentExtension.getDynIncInfo(part, theme, path, resolvedModule, requestedModule); 
     59    } 
    5660 
    5761} 
  • branches/release-0.16.x/pustefix-core/src/main/java/de/schlund/pfixxml/IncludeDocumentExtensionSaxon2.java

    r4517 r5524  
    5757    } 
    5858     
     59    public static String getDynIncInfo(String part, String theme, String path, String resolvedModule, String requestedModule) { 
     60        return IncludeDocumentExtension.getDynIncInfo(part, theme, path, resolvedModule, requestedModule); 
     61    } 
     62     
    5963} 
  • branches/release-0.16.x/pustefix-core/src/main/java/de/schlund/pfixxml/config/includes/IncludesResolver.java

    r5328 r5524  
    2424import java.util.List; 
    2525import java.util.Set; 
     26import java.util.regex.Matcher; 
     27import java.util.regex.Pattern; 
    2628 
    2729import javax.xml.transform.TransformerException; 
     
    3840import com.marsching.flexiparse.util.DOMBasedNamespaceContext; 
    3941 
     42import de.schlund.pfixcore.util.ModuleInfo; 
    4043import de.schlund.pfixxml.resources.Resource; 
    4144import de.schlund.pfixxml.resources.ResourceUtil; 
     
    124127                throw new SAXException("The attribute \"file\" must be set for the include tag!"); 
    125128            } 
     129            List<String> includePaths = new ArrayList<String>(); 
     130            boolean wildcardInclude = false; 
    126131            if(module != null) { 
    127                 if(filepath.startsWith("/")) filepath = filepath.substring(1); 
    128                 filepath = "module://" + module + "/" + filepath; 
    129             } 
    130              
    131  
    132             // Look if the same include has been performed ealier in the recursion 
    133             // If yes, we have a cyclic dependency 
    134             Set<Tupel<String, String>> list = includesList.get(); 
    135             if (list == null) { 
    136                 list = new HashSet<Tupel<String, String>>(); 
    137                 includesList.set(list); 
    138             } 
    139             if (list.contains(filepath + "#" + xpath)) { 
    140                 throw new SAXException("Cyclic dependency in include detected: " + filepath.toString()); 
    141             } 
    142              
    143             Resource includeFile = ResourceUtil.getResource(filepath); 
    144             Document includeDocument; 
    145             try { 
    146                 includeDocument = Xml.parseMutable(includeFile); 
    147             } catch (IOException e) { 
    148                 throw new SAXException("I/O exception on included file " + includeFile.toString(), e); 
    149             } 
    150              
    151             if (!CONFIG_FRAGMENTS_NS.equals(includeDocument.getDocumentElement().getNamespaceURI()) || !CONFIG_FRAGMENTS_ROOT_TAG.equals(includeDocument.getDocumentElement().getLocalName())) { 
    152                 throw new SAXException("File " + filepath + " seems not to be a valid configuration fragments file!"); 
    153             } 
    154  
    155             list.add(new Tupel<String, String>(filepath, xpath)); 
    156             try { 
    157                 resolveIncludes(includeDocument); 
    158             } finally { 
    159                 list.remove(new Tupel<String, String>(filepath, xpath)); 
    160             } 
    161              
    162             NodeList includeNodes; 
    163             try { 
    164                 javax.xml.xpath.XPath xpathProc = XPathFactory.newInstance().newXPath(); 
    165                 xpathProc.setNamespaceContext(new DOMBasedNamespaceContext(elem)); 
    166                 includeNodes = (NodeList) xpathProc.evaluate(xpath, includeDocument, XPathConstants.NODESET); 
    167             } catch (XPathExpressionException e) { 
    168                 throw new SAXException("XPath Expression invalid: " + xpath); 
    169             } 
    170              
    171             for (int i=0; i < includeNodes.getLength(); i++) { 
    172                 Node node = includeNodes.item(i); 
    173                 Node newNode = doc.importNode(node, true); 
    174                 if(module != null) { 
    175                         newNode.setUserData("module", module, null); 
    176                 } 
    177                 elem.getParentNode().insertBefore(newNode, elem); 
    178             } 
    179             elem.getParentNode().removeChild(elem); 
    180              
    181             // Trigger event 
    182             FileIncludeEvent ev = new FileIncludeEvent(this, includeFile); 
    183             for (FileIncludeEventListener listener : listeners) { 
    184                 listener.fileIncluded(ev); 
     132                if(filepath.startsWith("/")) filepath = filepath.substring(1); 
     133                if(module.contains("*")) { 
     134                    Pattern modulePattern = Pattern.compile(module.replaceAll("\\*", ".*")); 
     135                    Set<String> moduleNames = ModuleInfo.getInstance().getModules(); 
     136                    for(String moduleName: moduleNames) { 
     137                        if(modulePattern.matcher(moduleName).matches()) { 
     138                            includePaths.add("module://" + moduleName + "/" + filepath); 
     139                        } 
     140                    } 
     141                    wildcardInclude = true; 
     142                } else { 
     143                    filepath = "module://" + module + "/" + filepath; 
     144                    includePaths.add(filepath); 
     145                } 
     146            } else { 
     147                includePaths.add(filepath); 
     148            } 
     149             
     150            for(String includePath: includePaths) { 
     151 
     152                // Look if the same include has been performed ealier in the recursion 
     153                // If yes, we have a cyclic dependency 
     154                Set<Tupel<String, String>> list = includesList.get(); 
     155                if (list == null) { 
     156                    list = new HashSet<Tupel<String, String>>(); 
     157                    includesList.set(list); 
     158                } 
     159                if (list.contains(includePath + "#" + xpath)) { 
     160                    throw new SAXException("Cyclic dependency in include detected: " + includePath.toString()); 
     161                } 
     162                 
     163                Resource includeFile = ResourceUtil.getResource(includePath); 
     164                if(includeFile.exists()) { 
     165                     
     166                    Document includeDocument; 
     167                    try { 
     168                        includeDocument = Xml.parseMutable(includeFile); 
     169                    } catch (IOException e) { 
     170                        throw new SAXException("I/O exception on included file " + includeFile.toString(), e); 
     171                    } 
     172                     
     173                    if (!CONFIG_FRAGMENTS_NS.equals(includeDocument.getDocumentElement().getNamespaceURI()) || !CONFIG_FRAGMENTS_ROOT_TAG.equals(includeDocument.getDocumentElement().getLocalName())) { 
     174                        throw new SAXException("File " + includePath + " seems not to be a valid configuration fragments file!"); 
     175                    } 
     176         
     177                    list.add(new Tupel<String, String>(includePath, xpath)); 
     178                    try { 
     179                        resolveIncludes(includeDocument); 
     180                    } finally { 
     181                        list.remove(new Tupel<String, String>(includePath, xpath)); 
     182                    } 
     183                     
     184                    NodeList includeNodes; 
     185                    try { 
     186                        javax.xml.xpath.XPath xpathProc = XPathFactory.newInstance().newXPath(); 
     187                        xpathProc.setNamespaceContext(new DOMBasedNamespaceContext(elem)); 
     188                        includeNodes = (NodeList) xpathProc.evaluate(xpath, includeDocument, XPathConstants.NODESET); 
     189                    } catch (XPathExpressionException e) { 
     190                        throw new SAXException("XPath Expression invalid: " + xpath); 
     191                    } 
     192                     
     193                    for (int i=0; i < includeNodes.getLength(); i++) { 
     194                        Node node = includeNodes.item(i); 
     195                        Node newNode = doc.importNode(node, true); 
     196                        if(module != null) { 
     197                                newNode.setUserData("module", module, null); 
     198                        } 
     199                        elem.getParentNode().insertBefore(newNode, elem); 
     200                    } 
     201                    elem.getParentNode().removeChild(elem); 
     202                     
     203                    // Trigger event 
     204                    FileIncludeEvent ev = new FileIncludeEvent(this, includeFile); 
     205                    for (FileIncludeEventListener listener : listeners) { 
     206                        listener.fileIncluded(ev); 
     207                    } 
     208                } else if(!wildcardInclude) { 
     209                    throw new SAXException("Included config fragment file '" + includeFile.toString() +"' doesn't exist."); 
     210                } 
    185211            } 
    186212        } 
  • branches/release-0.16.x/pustefix-core/src/main/java/de/schlund/pfixxml/resources/DynamicResourceProvider.java

    r5298 r5524  
    5050     
    5151    public Resource getResource(URI uri) throws ResourceProviderException { 
     52       return getResource(uri, null); 
     53    } 
     54         
     55    public Resource getResource(URI uri, DynamicResourceInfo info) throws ResourceProviderException { 
    5256        if(uri.getScheme()==null)  
    5357            throw new ResourceProviderException("Missing URI scheme: "+uri); 
     
    6973        } 
    7074        if(themes==null) themes = new String[] {""}; 
     75         
     76        Resource infoRes = null; 
    7177         
    7278        //search in local project 
     
    8086                if(resource.exists()) { 
    8187                    resource.setOriginatingURI(uri); 
    82                     if(part == null) return resource; 
    83                     if(containsPart(resource, part)) return resource; 
    84                 } 
     88                    if(part == null) { 
     89                        if(info == null) return resource; 
     90                        else { 
     91                            if(infoRes == null) infoRes = resource; 
     92                            info.addEntry("webapp", true, false); 
     93                        } 
     94                    } else if(containsPart(resource, part)) { 
     95                        if(info == null) return resource; 
     96                        else { 
     97                            if(infoRes == null) infoRes = resource; 
     98                            info.addEntry("webapp", true, true); 
     99                        } 
     100                    } else if(info != null) info.addEntry("webapp", true, false); 
     101                } else if(info != null) info.addEntry("webapp", false, false); 
    85102            } catch(URISyntaxException x) { 
    86103                throw new ResourceProviderException("Error while searching project resource: " + uri, x); 
     
    104121                    if(resource.exists()) { 
    105122                        resource.setOriginatingURI(uri); 
    106                         if(part==null) return resource; 
    107                         if(containsPart(resource, part)) return resource; 
    108                     } 
     123                        if(part==null) { 
     124                            if(info == null) return resource; 
     125                            else { 
     126                                if(infoRes == null) infoRes = resource; 
     127                                info.addEntry(defaultSearchModule, true, false); 
     128                            } 
     129                        } else if(containsPart(resource, part)) { 
     130                            if(info == null) return resource; 
     131                            else { 
     132                                if(infoRes == null) infoRes = resource; 
     133                                info.addEntry(defaultSearchModule, true,true); 
     134                            } 
     135                        } else if(info != null) info.addEntry(defaultSearchModule, true, false); 
     136                    } else if(info != null) info.addEntry(defaultSearchModule, false, false); 
    109137                } catch(URISyntaxException x) { 
    110138                    throw new ResourceProviderException("Error while searching defaultsearch module resource: " + uri, x); 
     
    112140            } 
    113141        } 
    114  
    115         //search in overriding modules 
    116         List<String> overMods = moduleInfo.getOverridingModules(module, path); 
    117         if(overMods.size()>1) { 
    118             LOG.warn("Multiple modules found which override resource '"+path+"' from module '"+module+"'."); 
    119         } 
    120         for(String theme:themes) { 
    121             for(String overMod:overMods) { 
     142         
     143        if(module != null) { 
     144 
     145            //search in overriding modules 
     146            List<String> overMods = moduleInfo.getOverridingModules(module, path); 
     147            if(overMods.size()>1) { 
     148                LOG.warn("Multiple modules found which override resource '"+path+"' from module '"+module+"'."); 
     149            } 
     150            for(String theme:themes) { 
     151                for(String overMod:overMods) { 
     152                    try { 
     153                        String uriPath = uri.getPath(); 
     154                        uriPath = uriPath.replace("THEME", theme); 
     155                        URI modUri = new URI("module://" + overMod + uriPath); 
     156                        if(LOG.isDebugEnabled()) LOG.debug("trying "+modUri.toString()); 
     157                        Resource resource = ResourceUtil.getResource(modUri); 
     158                        if(resource.exists()) { 
     159                            resource.setOriginatingURI(uri); 
     160                            if(part==null) { 
     161                                if(info == null) return resource; 
     162                                else { 
     163                                    if(infoRes == null) infoRes = resource; 
     164                                    info.addEntry(overMod, true, false); 
     165                                } 
     166                            } else if(containsPart(resource, part)) { 
     167                                if(info == null) return resource; 
     168                                else { 
     169                                    if(infoRes == null) infoRes = resource; 
     170                                    info.addEntry(overMod, true, true); 
     171                                } 
     172                            } else if(info != null) info.addEntry(overMod, true, false); 
     173                        } else if(info != null) info.addEntry(overMod, false, false); 
     174                    } catch(URISyntaxException x) { 
     175                        throw new ResourceProviderException("Error while searching overrided module resource: " + uri, x); 
     176                    } 
     177                } 
     178            } 
     179             
     180            //use resource from specified module 
     181            for(String theme:themes) { 
    122182                try { 
    123183                    String uriPath = uri.getPath(); 
    124184                    uriPath = uriPath.replace("THEME", theme); 
    125                     URI modUri = new URI("module://" + overMod + uriPath); 
     185                    URI modUri = new URI("module://" + module + uriPath); 
    126186                    if(LOG.isDebugEnabled()) LOG.debug("trying "+modUri.toString()); 
    127187                    Resource resource = ResourceUtil.getResource(modUri); 
    128188                    if(resource.exists()) { 
    129189                        resource.setOriginatingURI(uri); 
    130                         if(part==null) return resource; 
    131                         if(containsPart(resource, part)) return resource; 
    132                     } 
     190                        if(info == null) return resource; 
     191                        else { 
     192                            if(infoRes == null) infoRes = resource; 
     193                            if(part != null && containsPart(resource, part)) info.addEntry(module, true, true); 
     194                            else info.addEntry(module, true, false); 
     195                        } 
     196                    } else if(info != null) info.addEntry(module, false, false); 
    133197                } catch(URISyntaxException x) { 
    134                     throw new ResourceProviderException("Error while searching overrided module resource: " + uri, x); 
     198                    throw new ResourceProviderException("Error while getting module resource: " + uri, x); 
    135199                } 
    136200            } 
    137         } 
    138          
    139         //use resource from specified module 
    140         for(String theme:themes) { 
    141             try { 
    142                 String uriPath = uri.getPath(); 
    143                 uriPath = uriPath.replace("THEME", theme); 
    144                 URI modUri = new URI("module://" + module + uriPath); 
    145                 if(LOG.isDebugEnabled()) LOG.debug("trying "+modUri.toString()); 
    146                 Resource resource = ResourceUtil.getResource(modUri); 
    147                 if(resource.exists()) { 
    148                     resource.setOriginatingURI(uri); 
    149                     return resource; 
    150                 } 
    151             } catch(URISyntaxException x) { 
    152                 throw new ResourceProviderException("Error while getting module resource: " + uri, x); 
    153             } 
    154         } 
     201         
     202        } 
     203         
     204        if(infoRes != null) return infoRes; 
    155205         
    156206        //Return non-existing project resource if search failed 
  • branches/release-0.16.x/pustefix-core/src/main/java/de/schlund/pfixxml/resources/ModuleResource.java

    r5355 r5524  
    8585 
    8686    public boolean isFile() { 
    87         //TODO: support directory entries 
    88         return true; 
     87        if(url == null) return false; 
     88        try { 
     89            JarURLConnection con = getConnection(); 
     90            JarEntry entry = con.getJarEntry(); 
     91            if(entry == null) return true; //it's a jar file 
     92            return !entry.isDirectory(); 
     93        } catch(IOException x) { 
     94            return false; 
     95        } 
    8996    } 
    9097 
     
    105112            JarEntry entry = con.getJarEntry(); 
    106113            if(entry != null) { 
    107                 return con.getJarEntry().getSize(); 
     114                return entry.getSize(); 
    108115            } 
    109116        } catch(FileNotFoundException x) { 
  • branches/release-0.16.x/pustefix-core/src/main/java/de/schlund/pfixxml/resources/ResourceUtil.java

    r4754 r5524  
    8383        String scheme = uri.getScheme(); 
    8484        if (scheme == null || scheme.equals("")) { 
    85             throw new IllegalArgumentException("Cannot handle URIs without a scheme"); 
     85            throw new IllegalArgumentException("Cannot handle URIs without a scheme: "+uri); 
    8686        } 
    8787        String path = uri.getPath(); 
  • branches/release-0.16.x/pustefix-core/src/main/java/de/schlund/pfixxml/serverutil/SessionAdmin.java

    r5041 r5524  
    235235    } 
    236236     
     237    public void invalidateSessions() throws IOException { 
     238        synchronized(sessioninfo) { 
     239            Iterator<SessionInfoStruct> infos = sessioninfo.values().iterator(); 
     240            while(infos.hasNext()) { 
     241                infos.next().getSession().invalidate(); 
     242            } 
     243        } 
     244    } 
     245     
    237246    public HttpSession getSession(String id) throws IOException { 
    238247        SessionInfoStruct info = getInfo(id); 
  • branches/release-0.16.x/pustefix-core/src/main/java/de/schlund/pfixxml/serverutil/SessionAdminMBean.java

    r4517 r5524  
    2626 
    2727    public void invalidateSession(String id) throws IOException; 
     28    public void invalidateSessions() throws IOException; 
    2829    public int getSessionNumber(); 
    2930     
  • branches/release-0.16.x/pustefix-core/src/main/java/de/schlund/pfixxml/util/SimpleResolver.java

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/release-0.16.x/pustefix-core/src/main/java/org

  • branches/release-0.16.x/pustefix-core/src/main/java/org/pustefixframework/config/contextxmlservice/parser

  • branches/release-0.16.x/pustefix-core/src/main/java/org/pustefixframework/config/contextxmlservice/parser/PageRequestOutputResourceParsingHandler.java

    r4512 r5524  
    5252        if (className.length() == 0 && beanRef.length() == 0) { 
    5353            throw new ParserException("Either attribute 'class' or attribute 'bean-ref' required."); 
    54         } 
    55         if (className.length() > 0) { 
     54        } else if (className.length() > 0 && beanRef.length() > 0) { 
     55            throw new ParserException("Only one of the attributes 'class' or 'bean-ref' is allowed at a 'resource' element: " + 
     56                    "class='" + className + "' bean-ref='" + beanRef +"'"); 
     57        } else if (className.length() > 0) { 
    5658            Class<?> clazz; 
    5759            try { 
  • branches/release-0.16.x/pustefix-core/src/main/java/org/pustefixframework/config/generic/PropertyFileReader.java

    r5404 r5524  
    3333 
    3434import de.schlund.pfixxml.config.EnvironmentProperties; 
     35import de.schlund.pfixxml.config.GlobalConfig; 
    3536import de.schlund.pfixxml.resources.FileResource; 
    3637 
     
    6162     
    6263    public static void read(InputSource in, Properties properties) throws ParserException { 
    63          
    64         PropertiesBasedCustomizationInfo customizationInfo = new PropertiesBasedCustomizationInfo(EnvironmentProperties.getProperties()); 
     64        Properties cusProps = new Properties(EnvironmentProperties.getProperties()); 
     65        if(GlobalConfig.getDocroot() != null) { 
     66            cusProps.setProperty("docroot", GlobalConfig.getDocroot()); 
     67        } 
     68        PropertiesBasedCustomizationInfo customizationInfo = new PropertiesBasedCustomizationInfo(cusProps); 
    6569        ClasspathConfiguredParser parser = new ClasspathConfiguredParser("META-INF/org/pustefixframework/config/generic/properties-config.xml"); 
    6670         
  • branches/release-0.16.x/pustefix-core/src/main/java/org/pustefixframework/config/project/parser/DocrootRequestHandlerParsingHandler.java

    r5421 r5524  
    1919package org.pustefixframework.config.project.parser; 
    2020 
    21 import java.util.ArrayList; 
     21import java.util.List; 
     22import java.util.Set; 
    2223 
    2324import org.pustefixframework.config.Constants; 
     25import org.pustefixframework.config.generic.ParsingUtils; 
     26import org.pustefixframework.config.project.StaticPathInfo; 
    2427import org.pustefixframework.http.DocrootRequestHandler; 
    2528import org.springframework.beans.factory.config.BeanDefinitionHolder; 
     
    2831import org.w3c.dom.NodeList; 
    2932 
     33import com.marsching.flexiparse.configuration.RunOrder; 
    3034import com.marsching.flexiparse.parser.HandlerContext; 
    3135import com.marsching.flexiparse.parser.ParsingHandler; 
    3236import com.marsching.flexiparse.parser.exception.ParserException; 
    3337 
     38import de.schlund.pfixcore.util.ModuleDescriptor; 
     39import de.schlund.pfixcore.util.ModuleInfo; 
    3440import de.schlund.pfixxml.config.EnvironmentProperties; 
    3541 
     
    3743     
    3844    public void handleNode(HandlerContext context) throws ParserException { 
    39         Element applicationElement = (Element) context.getNode(); 
    4045         
    41         String defaultPath = null; 
    42         NodeList defaultPathList = applicationElement.getElementsByTagNameNS(Constants.NS_PROJECT, "default-path"); 
    43         Element defaultPathElement = (Element) defaultPathList.item(0); 
    44         if(defaultPathElement != null) defaultPath = defaultPathElement.getTextContent().trim();  
     46        if(context.getRunOrder() == RunOrder.START) { 
     47         
     48            Element applicationElement = (Element) context.getNode(); 
     49            
     50            String defaultPath = null; 
     51            NodeList defaultPathList = applicationElement.getElementsByTagNameNS(Constants.NS_PROJECT, "default-path"); 
     52            Element defaultPathElement = (Element) defaultPathList.item(0); 
     53            if(defaultPathElement != null) defaultPath = defaultPathElement.getTextContent().trim();  
    4554 
    46         NodeList basePathList = applicationElement.getElementsByTagNameNS(Constants.NS_PROJECT, "docroot-path"); 
    47         if (basePathList.getLength() != 1) { 
    48             throw new ParserException("Found " + basePathList.getLength() + " <docroot-path> elements but expected one."); 
    49         } 
    50         Element basePathElement = (Element)basePathList.item(0); 
    51         String basePath = basePathElement.getTextContent(); 
    52          
    53         ArrayList<String> paths = new ArrayList<String>(); 
    54          
    55         //Add pre-defined static paths 
    56         paths.add("modules/pustefix-core/img"); 
    57         paths.add("modules/pustefix-core/script"); 
    58         paths.add("modules/pustefix-webservices-jaxws/script"); 
    59         paths.add("modules/pustefix-webservices-jsonws/script"); 
    60         paths.add("wsscript"); 
    61          
    62         NodeList staticList = applicationElement.getElementsByTagNameNS(Constants.NS_PROJECT, "static"); 
    63         for (int i = 0; i < staticList.getLength(); i++) { 
    64             Element staticElement = (Element) staticList.item(i); 
    65             NodeList pathList = staticElement.getElementsByTagNameNS(Constants.NS_PROJECT, "path"); 
    66             for (int j = 0; j < pathList.getLength(); j++) { 
    67                 Element pathElement = (Element) pathList.item(j); 
    68                 String path = pathElement.getTextContent(); 
    69                 if (!paths.contains(path)) { 
    70                     paths.add(path); 
     55            NodeList basePathList = applicationElement.getElementsByTagNameNS(Constants.NS_PROJECT, "docroot-path"); 
     56            if (basePathList.getLength() != 1) { 
     57                throw new ParserException("Found " + basePathList.getLength() + " <docroot-path> elements but expected one."); 
     58            } 
     59            Element basePathElement = (Element)basePathList.item(0); 
     60            String basePath = basePathElement.getTextContent(); 
     61             
     62            StaticPathInfo staticPathInfo = new StaticPathInfo(); 
     63            //Add pre-defined static paths 
     64            staticPathInfo.addStaticPath("modules/pustefix-core/img"); 
     65            staticPathInfo.addStaticPath("modules/pustefix-core/script"); 
     66            staticPathInfo.addStaticPath("modules/pustefix-webservices-jaxws/script"); 
     67            staticPathInfo.addStaticPath("modules/pustefix-webservices-jsonws/script"); 
     68            staticPathInfo.addStaticPath("wsscript"); 
     69  
     70            Set<String> moduleNames = ModuleInfo.getInstance().getModules(); 
     71            for(String moduleName: moduleNames) { 
     72                ModuleDescriptor moduleDesc = ModuleInfo.getInstance().getModuleDescriptor(moduleName); 
     73                List<String> paths = moduleDesc.getStaticPaths(); 
     74                for(String path: paths) { 
     75                    staticPathInfo.addStaticPath("modules/" + moduleName + path); 
    7176                } 
    7277            } 
     78             
     79            staticPathInfo.setBasePath(basePath); 
     80            staticPathInfo.setDefaultPath(defaultPath); 
     81             
     82            context.getObjectTreeElement().addObject(staticPathInfo); 
     83         
     84        } else { 
     85             
     86            StaticPathInfo staticPathInfo = ParsingUtils.getSingleObject(StaticPathInfo.class, context); 
     87             
     88            BeanDefinitionBuilder beanBuilder = BeanDefinitionBuilder.genericBeanDefinition(DocrootRequestHandler.class); 
     89            beanBuilder.setScope("singleton"); 
     90            beanBuilder.addPropertyValue("base", staticPathInfo.getBasePath()); 
     91            if(staticPathInfo.getDefaultPath() != null && !staticPathInfo.getDefaultPath().equals("")) beanBuilder.addPropertyValue("defaultPath", staticPathInfo.getDefaultPath()); 
     92            beanBuilder.addPropertyValue("passthroughPaths", staticPathInfo.getStaticPaths()); 
     93            beanBuilder.addPropertyValue("mode", EnvironmentProperties.getProperties().getProperty("mode")); 
     94             
     95            context.getObjectTreeElement().addObject(new BeanDefinitionHolder(beanBuilder.getBeanDefinition(), "org.pustefixframework.http.DocrootRequestHandler")); 
     96             
    7397        } 
    74          
    75         BeanDefinitionBuilder beanBuilder = BeanDefinitionBuilder.genericBeanDefinition(DocrootRequestHandler.class); 
    76         beanBuilder.setScope("singleton"); 
    77         beanBuilder.addPropertyValue("base", basePath); 
    78         if(defaultPath != null && !defaultPath.equals("")) beanBuilder.addPropertyValue("defaultPath", defaultPath); 
    79         beanBuilder.addPropertyValue("passthroughPaths", paths); 
    80         beanBuilder.addPropertyValue("mode", EnvironmentProperties.getProperties().getProperty("mode")); 
    81          
    82         context.getObjectTreeElement().addObject(new BeanDefinitionHolder(beanBuilder.getBeanDefinition(), "org.pustefixframework.http.DocrootRequestHandler")); 
    8398    } 
    8499 
  • branches/release-0.16.x/pustefix-core/src/main/java/org/pustefixframework/config/project/parser/PustefixContextXMLRequestHandlerParsingHandler.java

    r5507 r5524  
    2828import javax.xml.parsers.ParserConfigurationException; 
    2929 
    30 import org.pustefixframework.admin.mbeans.WebappAdmin; 
    3130import org.pustefixframework.config.Constants; 
    3231import org.pustefixframework.config.contextxmlservice.ContextXMLServletConfig; 
     
    4039import org.pustefixframework.config.project.XMLGeneratorInfo; 
    4140import org.pustefixframework.http.PustefixContextXMLRequestHandler; 
     41import org.pustefixframework.http.PustefixInternalsRequestHandler; 
    4242import org.springframework.beans.factory.BeanDefinitionStoreException; 
    4343import org.springframework.beans.factory.config.BeanDefinition; 
     
    185185            beanBuilder.addPropertyValue("testRecording", new RuntimeBeanReference(TestRecording.class.getName())); 
    186186        } 
    187         beanBuilder.addPropertyValue("webappAdmin", new RuntimeBeanReference(WebappAdmin.class.getName())); 
    188187        beanBuilder.addPropertyValue("editorLocation", editorLocation.getLocation()); 
    189188        beanBuilder.addPropertyValue("checkModtime", info.getCheckModtime()); 
     
    205204        context.getObjectTreeElement().addObject(beanHolder); 
    206205         
     206        beanBuilder = BeanDefinitionBuilder.genericBeanDefinition(PustefixInternalsRequestHandler.class); 
     207        beanBuilder.setScope("singleton"); 
     208        beanBuilder.addPropertyValue("sessionAdmin", new RuntimeBeanReference(SessionAdmin.class.getName())); 
     209        beanDefinition = beanBuilder.getBeanDefinition(); 
     210        beanHolder = new BeanDefinitionHolder(beanDefinition, PustefixInternalsRequestHandler.class.getName()); 
     211        context.getObjectTreeElement().addObject(beanHolder); 
     212         
    207213    } 
    208214 
  • branches/release-0.16.x/pustefix-core/src/main/java/org/pustefixframework/http/AbstractPustefixRequestHandler.java

    r5507 r5524  
    3636 
    3737import org.apache.log4j.Logger; 
    38 import org.pustefixframework.admin.mbeans.WebappAdmin; 
    3938import org.pustefixframework.config.contextxmlservice.ServletManagerConfig; 
    4039import org.pustefixframework.container.spring.http.UriProvidingHttpRequestHandler; 
     
    7776    protected String handlerURI; 
    7877    private SessionAdmin sessionAdmin; 
    79     private WebappAdmin webappAdmin; 
    8078    private ExceptionProcessingConfiguration exceptionProcessingConfig; 
    8179    protected SessionTrackingStrategy sessionTrackingStrategy; 
     
    115113 
    116114    public void handleRequest(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { 
    117          
    118         if(webappAdmin!=null) webappAdmin.refreshIfTriggered(); 
    119          
     115          
    120116        req.setCharacterEncoding(servletEncoding); 
    121117        res.setCharacterEncoding(servletEncoding); 
     
    333329    } 
    334330     
    335     public void setWebappAdmin(WebappAdmin webappAdmin) { 
    336         this.webappAdmin = webappAdmin; 
    337     } 
    338      
    339331    public void setExceptionProcessingConfiguration(ExceptionProcessingConfiguration exceptionProcessingConfig) { 
    340332        this.exceptionProcessingConfig = exceptionProcessingConfig; 
  • branches/release-0.16.x/pustefix-core/src/main/java/org/pustefixframework/http/DocrootRequestHandler.java

    r5418 r5524  
    8989    public void handleRequest(HttpServletRequest req, HttpServletResponse res) 
    9090            throws ServletException, IOException { 
    91  
     91         
    9292        String path = req.getPathInfo(); 
    9393         
    9494        // Handle default (root) request 
    9595        if(path == null || path.length() == 0 || (path.equals("/") && !defaultpath.equals("/"))) { 
    96             String redirect = req.getContextPath() + defaultpath; 
    97             if(req.getQueryString() != null) redirect += "?" + req.getQueryString(); 
    98             res.sendRedirect(redirect); 
     96            StringBuilder sb = new StringBuilder(); 
     97            sb.append(req.getScheme()).append("://").append(getServerName(req)); 
     98            if(!(req.getServerPort() == 80 || req.getServerPort() == 443)) sb.append(":" + req.getServerPort()); 
     99            sb.append(req.getContextPath()).append(defaultpath); 
     100            if(req.getQueryString() != null && !req.getQueryString().equals("")) sb.append("?" + req.getQueryString()); 
     101            res.sendRedirect(sb.toString()); 
    99102            return; 
    100103        } 
     
    112115        } 
    113116 
    114         InputStream in = null; 
    115         long contentLength = -1; 
    116         long lastModified = -1; 
    117          
    118         try { 
    119  
    120             if (path.startsWith("/")) { 
    121                 path = path.substring(1); 
    122             } 
    123              
    124             if (passthroughPaths != null) { 
    125                 for (String prefix : this.passthroughPaths) { 
    126                     if (path.startsWith(prefix)) { 
    127                         Resource resource = null; 
    128                         if(path.startsWith("modules/") && !extractedPaths.contains(prefix)) { 
    129                             String moduleUri = "module://" + path.substring(8); 
    130                             resource = ResourceUtil.getResource(moduleUri); 
    131                         } else { 
    132                             resource = ResourceUtil.getFileResourceFromDocroot(path); 
    133                         } 
    134                         if(resource.exists()) { 
    135                             contentLength = resource.length(); 
    136                             lastModified = resource.lastModified(); 
    137                             in = resource.getInputStream(); 
    138                             break; 
    139                         } 
     117        Resource inputResource = null; 
     118        if (path.startsWith("/")) { 
     119            path = path.substring(1); 
     120        } 
     121        if (passthroughPaths != null) { 
     122            for (String prefix : this.passthroughPaths) { 
     123                if (path.startsWith(prefix)) { 
     124                    Resource resource = null; 
     125                    if(path.startsWith("modules/") && !extractedPaths.contains(prefix)) { 
     126                        String moduleUri = "module://" + path.substring(8); 
     127                        resource = ResourceUtil.getResource(moduleUri); 
     128                    } else { 
     129                        resource = ResourceUtil.getFileResourceFromDocroot(path); 
    140130                    } 
    141                 } 
    142                 if (in == null) { 
    143                     FileResource baseResource = ResourceUtil.getFileResource(base); 
    144                     FileResource resource = ResourceUtil.getFileResource(baseResource, path); 
    145                     contentLength = resource.length(); 
    146                     lastModified = resource.lastModified(); 
    147                     in = resource.getInputStream(); 
    148                 } 
    149             } 
    150              
    151         } catch(IOException x) { 
    152             LOG.warn("Resource can't be read: " + path, x); 
    153             //send 'not found' below 
    154         } 
    155              
    156         if(in == null) { 
     131                    if(resource.exists()) { 
     132                        inputResource = resource; 
     133                        break; 
     134                    } 
     135                } 
     136            } 
     137            if (inputResource == null) { 
     138                FileResource baseResource = ResourceUtil.getFileResource(base); 
     139                FileResource resource = ResourceUtil.getFileResource(baseResource, path); 
     140                if(resource.exists()) { 
     141                    inputResource = resource; 
     142                } 
     143            } 
     144        } 
     145         
     146        if(inputResource == null) { 
    157147            res.sendError(HttpServletResponse.SC_NOT_FOUND, path); 
    158148            if(LOG.isDebugEnabled()) { 
     
    161151            return; 
    162152        } 
     153         
     154        if(!inputResource.isFile()) { 
     155            res.sendError(HttpServletResponse.SC_FORBIDDEN, path); 
     156            if(LOG.isDebugEnabled()) { 
     157                LOG.debug("Resource isn't a normal file -> send 'forbidden': " + path); 
     158            } 
     159            return; 
     160        } 
     161         
     162        long contentLength = inputResource.length(); 
     163        long lastModified = inputResource.lastModified(); 
    163164             
    164165        String reqETag = req.getHeader("If-None-Match"); 
     
    174175            } 
    175176        } 
    176              
     177      
    177178        long reqMod = req.getDateHeader("If-Modified-Since"); 
    178179        if(reqMod != -1) { 
     
    209210             
    210211        OutputStream out = new BufferedOutputStream(res.getOutputStream()); 
    211  
     212        InputStream in = inputResource.getInputStream(); 
    212213        int bytes_read; 
    213214        byte[] buffer = new byte[8]; 
     
    246247    } 
    247248     
     249    public static String getServerName(HttpServletRequest req) { 
     250        String forward = req.getHeader("X-Forwarded-Server"); 
     251        if (forward != null && !forward.equals("")) { 
     252            return forward; 
     253        } else { 
     254            return req.getServerName(); 
     255        } 
     256    } 
     257     
     258     
    248259} 
  • branches/release-0.16.x/pustefix-core/src/main/java/org/pustefixframework/http/dereferer/DerefRequestHandler.java

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/release-0.16.x/pustefix-core/src/main/java/org/pustefixframework/http/internal/PustefixInit.java

    r5405 r5524  
    2323import java.io.FileNotFoundException; 
    2424import java.io.IOException; 
     25import java.lang.management.ManagementFactory; 
    2526import java.util.Enumeration; 
    2627import java.util.Properties; 
    2728 
     29import javax.management.MBeanServer; 
     30import javax.management.ObjectName; 
    2831import javax.servlet.ServletContext; 
    2932import javax.xml.parsers.DocumentBuilder; 
     
    4245import org.apache.log4j.Logger; 
    4346import org.apache.log4j.xml.DOMConfigurator; 
     47import org.pustefixframework.admin.mbeans.Admin; 
    4448import org.w3c.dom.Document; 
    4549import org.xml.sax.EntityResolver; 
     
    165169        configureLogging(properties, servletContext); 
    166170        LOG.debug(">>>> LOG4J Init OK <<<<"); 
     171 
     172        initAdminMBean(); 
    167173         
    168174        initDone = true; 
     
    272278    } 
    273279 
     280     
     281    private static void initAdminMBean() { 
     282        String mode = EnvironmentProperties.getProperties().getProperty("mode"); 
     283        if(!mode.equalsIgnoreCase("prod")) { 
     284            try { 
     285                String mletClass = "javax.management.loading.MLet"; 
     286                ObjectName mletName = new ObjectName(Admin.JMX_NAME + ",subtype=MLet"); 
     287                MBeanServer server = ManagementFactory.getPlatformMBeanServer(); 
     288                if(!server.isRegistered(mletName)) { 
     289                    server.createMBean(mletClass, mletName); 
     290                    LOG.debug("Created AdminMlet."); 
     291                    Object mletParams[] = {PustefixInit.class.getProtectionDomain().getCodeSource().getLocation()}; 
     292                    String mletSignature[] = {"java.net.URL"}; 
     293                    server.invoke(mletName, "addURL", mletParams, mletSignature); 
     294                    String mbeanClass = "org.pustefixframework.admin.mbeans.Admin"; 
     295                    ObjectName mbeanName = new ObjectName(Admin.JMX_NAME); 
     296                    if(!server.isRegistered(mbeanName)) { 
     297                        server.createMBean(mbeanClass, mbeanName, mletName); 
     298                        LOG.debug("Created Admin mbean."); 
     299                    } else LOG.debug("Already found a registered Admin mbean."); 
     300                } else LOG.debug("Already found a registered AdminMLet."); 
     301            } catch(Exception x) { 
     302                LOG.error("Can't register Admin MBean", x); 
     303            } 
     304        } 
     305    } 
     306     
    274307} 
  • branches/release-0.16.x/pustefix-core/src/main/java/org/pustefixframework/util/javascript/internal/YUICompressorAdapter.java

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/release-0.16.x/pustefix-core/src/main/resources

  • branches/release-0.16.x/pustefix-core/src/main/resources/META-INF

  • branches/release-0.16.x/pustefix-core/src/main/resources/META-INF/org/pustefixframework/config/context-xml-service/parser/context-xml-service-config.xml

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/release-0.16.x/pustefix-core/src/main/resources/META-INF/org/pustefixframework/config/project/parser/project-config.xml

    r5496 r5524  
    1919   
    2020  <!-- Creates request handler for static resources --> 
    21   <handler class="org.pustefixframework.config.project.parser.DocrootRequestHandlerParsingHandler"> 
     21  <handler class="org.pustefixframework.config.project.parser.DocrootRequestHandlerParsingHandler" run-order="both"> 
    2222    <match>/p:project-config/p:application</match> 
     23  </handler> 
     24   
     25  <handler class="org.pustefixframework.config.project.parser.StaticPathParsingHandler"> 
     26    <match>/p:project-config/p:application/p:static//p:path</match> 
    2327  </handler> 
    2428   
     
    4448  <handler class="org.pustefixframework.config.project.parser.SessionAdminParsingHandler"> 
    4549    <match>/p:project-config/p:application</match> 
    46   </handler> 
    47    
    48   <!-- Adds WebappAdmin bean --> 
    49   <handler class="org.pustefixframework.config.project.parser.WebappAdminParsingHandler"> 
    50     <match>/p:project-config//p:application</match> 
    5150  </handler> 
    5251   
     
    131130    <match>/p:project-config/p:editor/p:choose/p:when</match> 
    132131    <match>/p:project-config/p:properties/p:choose/p:when</match> 
     132    <match>/p:project-config/p:application/p:static/p:choose/p:when</match> 
    133133  </handler> 
    134134   
     
    140140    <match>/p:project-config/p:editor/p:choose/p:otherwise</match> 
    141141    <match>/p:project-config/p:properties/p:choose/p:otherwise</match> 
     142    <match>/p:project-config/p:application/p:static/p:choose/p:otherwise</match> 
    142143  </handler> 
    143144   
  • branches/release-0.16.x/pustefix-core/src/main/resources/PUSTEFIX-INF/dyntxt

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/release-0.16.x/pustefix-core/src/main/resources/PUSTEFIX-INF/schema/context-xml-service-config.xsd

    r5375 r5524  
    720720    <xs:attribute name="refid" type="xs:NCName" use="optional"></xs:attribute> 
    721721    <xs:attribute name="xpath" type="xs:string" use="optional"></xs:attribute> 
     722    <xs:attribute name="module" type="xs:string" use="optional"></xs:attribute> 
    722723  </xs:complexType> 
    723724 
  • branches/release-0.16.x/pustefix-core/src/main/resources/PUSTEFIX-INF/schema/module-descriptor.xsd

    r5116 r5524  
    1111  <xs:complexType name="moduleDescriptorType"> 
    1212    <xs:sequence> 
    13       <xs:element name="module-name" type="md:moduleNameType"></xs:element> 
    14       <xs:element name="resources" type="md:resourcesType" minOccurs="0"></xs:element> 
     13      <xs:element name="module-name" type="md:moduleNameType"/> 
     14      <xs:element name="resources" type="md:resourcesType" minOccurs="0"/> 
     15      <xs:element name="static" type="md:staticType" minOccurs="0"/> 
     16      <xs:element name="override-modules" type="md:overrideType" minOccurs="0"/> 
    1517    </xs:sequence> 
    1618  </xs:complexType> 
     
    2931  </xs:complexType> 
    3032   
     33  <xs:complexType name="staticType"> 
     34    <xs:sequence> 
     35      <xs:element name="path" type="xs:string" maxOccurs="unbounded"/> 
     36    </xs:sequence> 
     37  </xs:complexType> 
     38   
     39  <xs:complexType name="overrideType"> 
     40    <xs:sequence> 
     41      <xs:element name="module"> 
     42        <xs:complexType> 
     43          <xs:sequence> 
     44            <xs:element name="resource" maxOccurs="unbounded"> 
     45              <xs:complexType> 
     46                <xs:attribute name="path" type="xs:string"/> 
     47              </xs:complexType> 
     48            </xs:element> 
     49          </xs:sequence> 
     50          <xs:attribute name="name" type="xs:string"/> 
     51        </xs:complexType> 
     52      </xs:element> 
     53    </xs:sequence> 
     54  </xs:complexType> 
     55   
    3156  <xs:complexType name="resourceMappingType"> 
    3257    <xs:attribute name="srcpath" use="required"></xs:attribute> 
  • branches/release-0.16.x/pustefix-core/src/main/resources/PUSTEFIX-INF/script/httpRequest.js

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/release-0.16.x/pustefix-core/src/main/resources/PUSTEFIX-INF/xsl

  • branches/release-0.16.x/pustefix-core/src/main/resources/PUSTEFIX-INF/xsl/forminput.xsl

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/release-0.16.x/pustefix-core/src/main/resources/PUSTEFIX-INF/xsl/functions.xsl

    r5512 r5524  
    110110  </func:function> 
    111111 
     112  <func:function name="pfx:getFrameworkVersion"> 
     113    <func:result select="callback:getFrameworkVersion()"/> 
     114  </func:function> 
     115   
    112116</xsl:stylesheet> 
  • branches/release-0.16.x/pustefix-core/src/main/resources/PUSTEFIX-INF/xsl/include.xsl

    r5436 r5524  
    257257          <xsl:when test="not($__target_key = '__NONE__') and $prohibitEdit = 'no'"> 
    258258            <ixsl:if test="$__editmode='admin'"> 
    259               <img border="0" alt="[" src="{{$__contextpath}}/modules/pustefix-core/img/edit_start.gif"/> 
     259              <span class="pfx_inc_start"/> 
    260260            </ixsl:if> 
    261261          </xsl:when> 
    262262          <xsl:when test="$__target_key = '__NONE__' and $__editmode = 'admin'"> 
    263             <img border="0" alt="[" src="{$__contextpath}/modules/pustefix-core/img/edit_start.gif"/> 
    264           </xsl:when> 
    265         </xsl:choose> 
     263            <span class="pfx_inc_start"/> 
     264          </xsl:when> 
     265        </xsl:choose>         
    266266        <!-- --> 
    267267        <xsl:variable name="used_theme"> 
     
    300300                  <xsl:call-template name="pfx:include_internal_render_edit"> 
    301301                    <xsl:with-param name="part" select="$part"/> 
    302                     <xsl:with-param name="realpath" select="$realpath"/> 
    303                     <xsl:with-param name="used_theme" select="$used_theme"/> 
     302                    <xsl:with-param name="theme" select="$used_theme"/> 
     303                    <xsl:with-param name="path" select="$realpath"/> 
    304304                    <xsl:with-param name="resolved_uri" select="$__resolveduri"/> 
     305                    <xsl:with-param name="search" select="$search"/> 
     306                    <xsl:with-param name="module" select="$module_name"/> 
    305307                  </xsl:call-template> 
    306308                </xsl:when> 
    307309                <xsl:when test="$incnodes/parent::part/@editable='false'"> 
    308                   <xsl:call-template name="pfx:include_internal_render_noedit"> 
     310                  <xsl:call-template name="pfx:include_internal_render_edit"> 
    309311                    <xsl:with-param name="part" select="$part"/> 
     312                    <xsl:with-param name="theme" select="$used_theme"/> 
     313                    <xsl:with-param name="path" select="$realpath"/> 
    310314                    <xsl:with-param name="resolved_uri" select="$__resolveduri"/> 
     315                    <xsl:with-param name="search" select="$search"/> 
     316                    <xsl:with-param name="module" select="$module_name"/> 
     317                    <xsl:with-param name="editable">false</xsl:with-param> 
    311318                  </xsl:call-template> 
    312319                </xsl:when> 
     
    316323                      <xsl:call-template name="pfx:include_internal_render_edit"> 
    317324                        <xsl:with-param name="part" select="$part"/> 
    318                         <xsl:with-param name="realpath" select="$realpath"/> 
    319                         <xsl:with-param name="used_theme" select="$used_theme"/> 
     325                        <xsl:with-param name="theme" select="$used_theme"/> 
     326                        <xsl:with-param name="path" select="$realpath"/> 
    320327                        <xsl:with-param name="resolved_uri" select="$__resolveduri"/> 
     328                        <xsl:with-param name="search" select="$search"/> 
     329                        <xsl:with-param name="module" select="$module_name"/> 
    321330                      </xsl:call-template> 
    322331                    </ixsl:when> 
    323332                    <ixsl:otherwise> 
    324                       <xsl:call-template name="pfx:include_internal_render_noedit"> 
     333                      <xsl:call-template name="pfx:include_internal_render_edit"> 
    325334                        <xsl:with-param name="part" select="$part"/> 
     335                        <xsl:with-param name="theme" select="$used_theme"/> 
     336                        <xsl:with-param name="path" select="$realpath"/> 
    326337                        <xsl:with-param name="resolved_uri" select="$__resolveduri"/> 
     338                        <xsl:with-param name="search" select="$search"/> 
     339                        <xsl:with-param name="module" select="$module_name"/> 
     340                        <xsl:with-param name="editable">false</xsl:with-param> 
    327341                      </xsl:call-template> 
    328342                    </ixsl:otherwise> 
     
    335349            <xsl:choose> 
    336350              <xsl:when test="$incnodes/parent::part/@editable='true' or (not($incnodes/parent::part/@editable='false') and $__editor_include_parts_editable_by_default='true')"> 
    337                 <xsl:call-template name="pfx:include_internal_render_edit_runtime"> 
     351                <xsl:call-template name="pfx:include_internal_render_edit"> 
    338352                  <xsl:with-param name="part" select="$part"/> 
    339                   <xsl:with-param name="realpath" select="$realpath"/> 
    340                   <xsl:with-param name="used_theme" select="$used_theme"/> 
     353                  <xsl:with-param name="theme" select="$used_theme"/> 
     354                  <xsl:with-param name="path" select="$realpath"/> 
    341355                  <xsl:with-param name="resolved_uri" select="$__resolveduri"/> 
     356                  <xsl:with-param name="search" select="$search"/> 
     357                  <xsl:with-param name="module" select="$module_name"/> 
    342358                </xsl:call-template> 
    343359              </xsl:when> 
    344360              <xsl:otherwise> 
    345                 <xsl:call-template name="pfx:include_internal_render_noedit_runtime"> 
     361                <xsl:call-template name="pfx:include_internal_render_edit"> 
    346362                  <xsl:with-param name="part" select="$part"/> 
     363                  <xsl:with-param name="theme" select="$used_theme"/> 
     364                  <xsl:with-param name="path" select="$realpath"/> 
    347365                  <xsl:with-param name="resolved_uri" select="$__resolveduri"/> 
     366                  <xsl:with-param name="search" select="$search"/> 
     367                  <xsl:with-param name="module" select="$module_name"/> 
     368                  <xsl:with-param name="editable">false</xsl:with-param> 
    348369                </xsl:call-template> 
    349370              </xsl:otherwise> 
     
    357378  <xsl:template name="pfx:include_internal_render_edit"> 
    358379    <xsl:param name="part"/> 
    359     <xsl:param name="realpath"/> 
    360     <xsl:param name="used_theme"/> 
     380    <xsl:param name="theme"/> 
     381    <xsl:param name="path"/> 
    361382    <xsl:param name="resolved_uri"/> 
    362     <a href="#"> 
    363       <ixsl:attribute name="onclick">window.open('<ixsl:value-of select="$__editor_url"/>?__scriptedflow=selectinclude&amp;theme=<xsl:value-of select="string($used_theme)"/>&amp;path=<xsl:value-of select="$resolved_uri"/>&amp;part=<xsl:value-of select="$part"/>&amp;uri=<ixsl:value-of select="$__application_url"/>&amp;type=include&amp;__anchor=left_navi|<xsl:value-of select="$realpath"/>','PustefixEditor','menubar=yes,status=yes,resizable=yes');return(false);</ixsl:attribute> 
    364       <img border="0" src="{{$__contextpath}}/modules/pustefix-core/img/edit.gif" 
    365            alt="] Edit include: '{$part}' in resource '{$resolved_uri}'" 
    366            title="Edit include: '{$part}' in resource '{$resolved_uri}'"/> 
    367     </a> 
    368   </xsl:template> 
    369  
    370   <xsl:template name="pfx:include_internal_render_noedit"> 
    371     <xsl:param name="part"/> 
    372     <xsl:param name="resolved_uri"/> 
    373     <img border="0" src="{{$__contextpath}}/modules/pustefix-core/img/noedit.gif" 
    374       alt="] Info: '{$part}' in resource '{$resolved_uri}'" 
    375       title="Info: '{$part}' in resource '{$resolved_uri}'"/> 
    376   </xsl:template> 
    377  
    378   <xsl:template name="pfx:include_internal_render_edit_runtime"> 
    379     <xsl:param name="part"/> 
    380     <xsl:param name="realpath"/> 
    381     <xsl:param name="used_theme"/> 
    382     <xsl:param name="resolved_uri"/> 
    383     <a href="#"> 
    384       <xsl:attribute name="onClick">window.open('<xsl:value-of select="$__editor_url"/>?__scriptedflow=selectinclude&amp;theme=<xsl:value-of select="string($used_theme)"/>&amp;path=<xsl:value-of select="$realpath"/>&amp;part=<xsl:value-of select="$part"/>&amp;name=<xsl:value-of select="$product"/>&amp;uri=<xsl:value-of select="$__application_url"/>&amp;type=dyninclude&amp;__anchor=left_navi|<xsl:value-of select="$realpath"/>','PustefixEditor','menubar=yes,status=yes,resizable=yes');return(false);</xsl:attribute> 
    385       <img border="0" src="{$__contextpath}/modules/pustefix-core/img/edit.gif" alt="] Edit include: '{$part}' in file '{$realpath}'" title="Edit include: '{$part}' in file '{$realpath}'"/> 
    386     </a> 
    387   </xsl:template> 
    388  
    389   <xsl:template name="pfx:include_internal_render_noedit_runtime"> 
    390     <xsl:param name="part"/> 
    391     <xsl:param name="resolved_uri"/> 
    392     <img border="0" src="{$__contextpath}/modules/pustefix-core/img/noedit.gif" alt="] Info: '{$part}' in file '{$realpath}'" title="Info: '{$part}' in file '{$realpath}'"/> 
     383    <xsl:param name="search"/> 
     384    <xsl:param name="module"/> 
     385    <xsl:param name="editable">true</xsl:param> 
     386    <xsl:variable name="resolved_module"> 
     387      <xsl:choose> 
     388        <xsl:when test="starts-with($resolved_uri,'module://')"><xsl:value-of select="substring-before(substring-after($resolved_uri,'module://'),'/')"/></xsl:when> 
     389        <xsl:otherwise>webapp</xsl:otherwise> 
     390      </xsl:choose> 
     391    </xsl:variable> 
     392    <xsl:variable name="requested_module"> 
     393      <xsl:choose> 
     394        <xsl:when test="not($module = '')"> 
     395          <xsl:choose> 
     396            <xsl:when test="$module='WEBAPP' or $module='webapp'"></xsl:when> 
     397            <xsl:otherwise><xsl:value-of select="$module"/></xsl:otherwise> 
     398          </xsl:choose> 
     399        </xsl:when> 
     400        <xsl:when test="starts-with(include:getSystemId(),'module://')"> 
     401          <xsl:value-of select="substring-before(substring-after(include:getSystemId(),'//'),'/')"/>   
     402        </xsl:when> 
     403      </xsl:choose> 
     404    </xsl:variable> 
     405    <xsl:variable name="classes"> 
     406      <xsl:choose> 
     407        <xsl:when test="$editable='true'">pfx_inc_end</xsl:when> 
     408        <xsl:otherwise>pfx_inc_end pfx_inc_ro</xsl:otherwise> 
     409      </xsl:choose> 
     410    </xsl:variable> 
     411    <xsl:choose> 
     412      <xsl:when test="$search='dynamic'"> 
     413        <xsl:choose> 
     414          <xsl:when test="$__target_key='__NONE__'"> 
     415            <span class="{$classes}" title="{pfx:getDynIncInfo($part,$theme,$path,$resolved_module,$requested_module)}"/> 
     416          </xsl:when> 
     417          <xsl:otherwise> 
     418            <span class="{$classes}" title="{{pfx:getDynIncInfo('{$part}','{$theme}','{$path}','{$resolved_module}','{$requested_module}')}}"/> 
     419          </xsl:otherwise> 
     420        </xsl:choose> 
     421      </xsl:when> 
     422      <xsl:otherwise> 
     423        <span class="{$classes}" title="{$part}|{$theme}|{$path}|{$resolved_module}"/> 
     424      </xsl:otherwise> 
     425    </xsl:choose> 
    393426  </xsl:template> 
    394427 
     
    623656    <func:result select="include:getRelativePathFromSystemId()"/> 
    624657  </func:function> 
     658   
     659  <func:function name="pfx:getDynIncInfo"> 
     660    <xsl:param name="part"/> 
     661    <xsl:param name="theme"/> 
     662    <xsl:param name="path"/> 
     663    <xsl:param name="resolved_module"/> 
     664    <xsl:param name="requested_module"/> 
     665    <func:result select="include:getDynIncInfo($part, $theme, $path, $resolved_module, $requested_module)"/> 
     666  </func:function> 
    625667  
    626668</xsl:stylesheet> 
  • branches/release-0.16.x/pustefix-core/src/main/resources/PUSTEFIX-INF/xsl/master.xsl

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/release-0.16.x/pustefix-core/src/main/resources/PUSTEFIX-INF/xsl/utils.xsl

    r5436 r5524  
    8484                    <img border="0" alt="Show XML" title="Show last XML tree" src="{{$__contextpath}}/modules/pustefix-core/img/show_xml.gif"/></a> 
    8585                </td> 
     86                <td align="left"> 
     87                  <a target="pfixcore_internals__"> 
     88                    <ixsl:attribute name="href"><ixsl:value-of select="$__contextpath"/>/xml/pfxinternals</ixsl:attribute> 
     89                    <img border="0" alt="Show XML" title="Show last XML tree" src="{{$__contextpath}}/modules/pustefix-core/img/show_info.gif"/></a> 
     90                </td> 
    8691              </tr> 
    8792              <tr> 
    88                 <td nowrap="nowrap" colspan="2" style="font-family: Verdana,Sans; font-size: 10px; background-color: black; color: white; padding-left: 5px; padding-right: 2px;"> 
     93                <td nowrap="nowrap" colspan="3" style="font-family: Verdana,Sans; font-size: 10px; background-color: black; color: white; padding-left: 5px; padding-right: 2px;"> 
    8994                  P: <ixsl:value-of select="$page"/> 
    9095                </td> 
    9196              </tr> 
    9297              <tr> 
    93                 <td nowrap="nowrap" colspan="2" style="font-family: Verdana,Sans; font-size: 10px; background-color: black; color: white; padding-left: 5px; padding-right: 2px;"> 
     98                <td nowrap="nowrap" colspan="3" style="font-family: Verdana,Sans; font-size: 10px; background-color: black; color: white; padding-left: 5px; padding-right: 2px;"> 
    9499                  F: <ixsl:value-of select="$__root/formresult/pageflow/@name"/> 
    95100                </td> 
     
    99104        </xsl:when> 
    100105        <xsl:otherwise> 
     106          <script type="text/javascript"> 
     107            if(!window.pfx) pfx={}; 
     108            if(!pfx.editor) pfx.editor={};  
     109            pfx.editor.enrichSpans=function() { 
     110              var spans = document.getElementsByTagName("span"); 
     111              for(var i=0; i&lt;spans.length; i++) { 
     112                if(spans[i].className == 'pfx_inc_start') { 
     113                  spans[i].innerHTML = '<img border="0" alt="[" src="{{$__contextpath}}/modules/pustefix-core/img/edit_start.gif"/>'; 
     114                } else if(spans[i].className == 'pfx_inc_end' || spans[i].className == 'pfx_inc_end pfx_inc_ro') { 
     115                  var data = spans[i].title.split('|'); 
     116                  var partStr = 'part \'' + data[0] + '\''; 
     117                  var pathStr = ' from resource \'' + data[2] + '\''; 
     118                  var modStr = ''; 
     119                  if(data[3] == 'webapp') { 
     120                    modStr = ' within webapp'; 
     121                  } else { 
     122                    modStr = ' within module \'' + data[3] + '\''; 
     123                  } 
     124                  var dynStr = ''; 
     125                  if(data.length > 4) { 
     126                    dynStr = ' having searched \''+ data[5] + '\''; 
     127                  } 
     128                  if(spans[i].className == 'pfx_inc_end') { 
     129                    spans[i].innerHTML = '<a href="#" onclick="pfx.editor.openEditor(\'' + spans[i].title + '\')">' + 
     130                                                  '<img border="0" alt="] Edit ' + partStr + pathStr + modStr + dynStr + '" title="Edit ' + partStr + pathStr + modStr + dynStr + '" src="{{$__contextpath}}/modules/pustefix-core/img/edit.gif"/>'; 
     131                                                  '</a>'; 
     132                  } else { 
     133                    spans[i].innerHTML = '<img border="0" alt="] This is ' + partStr + pathStr + modStr + dynStr + '" title="This is ' + partStr + pathStr + modStr + dynStr + '" src="{{$__contextpath}}/modules/pustefix-core/img/noedit.gif"/>'; 
     134                  } 
     135                } 
     136              } 
     137            } 
     138            pfx.editor.openEditor=function(title) { 
     139                var data = title.split('|'); 
     140                var uri = ''; 
     141                if(data[3]=='webapp') uri = 'docroot:/' + data[2]; 
     142                else uri = 'module://' + data[3] + '/' + data[2]; 
     143                window.open('<ixsl:value-of select="$__editor_url"/>?__scriptedflow=selectinclude&amp;' + 
     144                            'theme=' + data[1] + '&amp;path=' + uri + '&amp;part=' + data[0] + '&amp;' + 
     145                            'uri=<ixsl:value-of select="$__application_url"/>&amp;type=include&amp;__anchor=left_navi|' + data[2] 
     146                            ,'PustefixEditor','menubar=yes,status=yes,resizable=yes'); 
     147                return false; 
     148            } 
     149            pfx.editor.enrichSpans(); 
     150          </script> 
    101151          <script type="text/javascript"> 
    102152            var de_schlund_pfixcore_console_drag_start_x = 0; 
     
    226276                  <ixsl:value-of select="$__uri"/>?__xmlonly=1</ixsl:attribute> 
    227277                  <img border="0" alt="Show XML" title="Show last XML tree" src="{{$__contextpath}}/modules/pustefix-core/img/console_showxml.gif" style="margin-left:5px"/> 
     278                </a> 
     279                <a target="pfixcore_internals__"> 
     280                  <ixsl:attribute name="href"><ixsl:value-of select="$__contextpath"/>/xml/pfxinternals</ixsl:attribute> 
     281                  <img border="0" alt="Show Pustefix internals" title="Show Pustefix internals" src="{{$__contextpath}}/modules/pustefix-core/img/console_showinfo.gif" style="margin-left:5px"/> 
    228282                </a> 
    229283                <xsl:if test="@webserviceconsole='true'"> 
  • branches/release-0.16.x/pustefix-core/src/main/resources/PUSTEFIX-INF/xsl/xmlfontify.xsl

    r5509 r5524  
    2525          .datatable th {padding:4px;text-align:left;font-weight:normal;border-bottom: 1px solid black;} 
    2626          .rowsep {border-bottom: 1px dotted #888888;} 
     27          table.info {padding-left: 20px;} 
     28          table.info th,td {text-align:left; padding:4px;} 
     29          table.info td {color: #666666; font-weight: normal;} 
     30          table.info th {color: #000000; font-weight: normal;} 
    2731        </style> 
    2832      </head> 
  • branches/release-0.16.x/pustefix-core/src/main/resources/pustefix/logging

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/release-0.16.x/pustefix-core/src/main/resources/pustefix/xsl

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/release-0.16.x/pustefix-core/src/main/resources/pustefix/xsl/depend.xsl

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/release-0.16.x/pustefix-core/src/main/resources/pustefix/xsl/lib.xsl

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/release-0.16.x/pustefix-core/src/main/resources/pustefix/xsl/log4j.xsl

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/release-0.16.x/pustefix-core/src/test

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/release-0.16.x/pustefix-core/src/test/java

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/release-0.16.x/pustefix-core/src/test/resources/META-INF

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/release-0.16.x/pustefix-core/src/test/resources/properties.xml

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/release-0.16.x/pustefix-docbook/pom.xml

    r5419 r5524  
    144144        <groupId>org.apache.maven.plugins</groupId> 
    145145        <artifactId>maven-changes-plugin</artifactId> 
     146        <version>2.3</version> 
    146147        <reportSets> 
    147148          <reportSet> 
     
    154155          <tracUser>mvnchr</tracUser> 
    155156          <tracPassword>k7XvGD9i3MNz2bV4d78P</tracPassword> 
    156           <query>order=priority&amp;milestone=${pom.version}</query> 
     157          <query>order=priority&amp;milestone=${project.version}</query> 
    157158        </configuration> 
    158159      </plugin> 
  • branches/release-0.16.x/pustefix-docbook/src/docbkx

  • branches/release-0.16.x/pustefix-docbook/src/docbkx/faq/faq.xml

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/release-0.16.x/pustefix-docbook/src/docbkx/reference/advancedtopics.xml

    r5390 r5524  
    18051805          String name() default ""; 
    18061806          Class<? extends IHandler> ihandler() default IHandler.class; 
     1807          String beanRef() default ""; 
    18071808        } 
    18081809         
     
    18181819        generated IWrapper class (without package). By default the bean name with the 
    18191820        suffix <literal>Wrapper</literal> is used (and the same package). The <literal>ihandler</literal> 
    1820         attribute denotes the <literal>IHandler</literal> implementation class. 
     1821        attribute denotes the <literal>IHandler</literal> implementation class. Alternatively you can 
     1822        use the <literal>beanRef</literal> attribute to reference a Spring managed IHandler bean by name. 
    18211823      </para> 
    18221824      <para> 
  • branches/release-0.16.x/pustefix-docbook/src/docbkx/reference/configuration.xml

    r5406 r5524  
    436436     
    437437    <!-- Configuration fragements are supported as well --> 
    438     <config-include file="myproject/conf/myfile.xml" section="navigation"/> 
     438    <config-include file="conf/myfile.xml" section="navigation" module="mymodule"/> 
    439439  </navigation> 
    440440 
     
    452452  </global> 
    453453 
    454   <config-include file="myproject/conf/myfile.xml" section="targets"/> 
     454  <config-include file="conf/myfile.xml" section="targets" module="mymodule"/> 
    455455 
    456456  <!-- 
     
    15011501    </pagerequest> 
    15021502     
    1503     <config-include file="myproject/conf/myfile.xml" section="pagerequests"/> 
     1503    <config-include file="conf/myfile.xml" section="pagerequests" module="mymodule"/> 
    15041504        ]]></programlisting> 
    15051505        Includes a part of a config fragments file at this location. 
     
    15481548              <td><emphasis>Optional</emphasis>. 
    15491549              Specifies the Pustefix module where the file is located (by default 
    1550               the file is searched in the webapp itself).</td> 
     1550              the file is searched in the webapp itself). You can use simple name patterns to include all  
     1551              or a subset of modules availabe in the classpath (e.g. <literal>"*"</literal> or <literal>"mod-*-us"</literal>).</td> 
    15511552            </tr> 
    15521553          </tbody> 
     
    16501651         page requires no authentication. 
    16511652         <programlisting language="xml"><![CDATA[ 
    1652     <config-include file="myproject/conf/myfile.xml" section="directoutputpagerequests"/> 
     1653    <config-include file="conf/myfile.xml" section="directoutputpagerequests" module="mymodule"/> 
    16531654         ]]></programlisting> 
    16541655        Includes a part of a config-fragments at this location. 
     
    16981699              <td><emphasis>Optional</emphasis>. 
    16991700              Specifies the Pustefix module where the file is located (by default 
    1700               the file is searched in the webapp itself).</td> 
     1701              the file is searched in the webapp itself). You can use simple name patterns to include all  
     1702              or a subset of modules availabe in the classpath (e.g. <literal>"*"</literal> or <literal>"mod-*-us"</literal>).</td> 
    17011703            </tr> 
    17021704 
  • branches/release-0.16.x/pustefix-docbook/src/docbkx/reference/module-support.xml

    r5390 r5524  
    3535  -->   
    3636  <module-name>mytest</module-name> 
     37  <!-- You can optionally add the attribute "unpack" with value "obsolete" to the resources 
     38       element, indicating that the resources shouldn't be extracted in the current or later  
     39       Pustefix versions, unless otherwise configured by adding <unpackObsolete>true</unpackObsolete> 
     40       to the pustefix-webapp-plugin configuration. 
     41  --> 
    3742  <resources> 
    3843    <!-- 
     
    4651    <resource-mapping srcpath="PUSTEFIX-INF/images" targetpath="img"/> 
    4752  </resources> 
     53 
     54  <!-- Here you can define which folders under PUSTEFIX-INF contain static webapp resources  
     55       and should be publicly available. The resources then can be accessed under the URL  
     56       path '/modules/[module-name]/[static-path]'. If you only want to grant access depending  
     57       on the application using the module, you can alternatively configure the static module  
     58       path in the project configuration. 
     59  --> 
     60  <static> 
     61    <path>css</path> 
     62    <path>img</path> 
     63  </static> 
    4864 
    4965  <!-- 
  • branches/release-0.16.x/pustefix-docbook/src/docbkx/reference/news.xml

    r5407 r5524  
    99   
    1010    <section xml:id="news.0_15_6.modules"> 
    11       <title>New module enhancements</title> 
     11      <title>Module enhancements</title> 
    1212      <para> 
    1313        Introduced pre-defined special module names <literal>WEBAPP</literal> and  
     
    2929 
    3030    <section xml:id="news.0_15_7.modules"> 
    31       <title>New module enhancements</title> 
     31      <title>Module enhancements</title> 
    3232      <para> 
    3333        Static web resources now can be delivered directly from modules without having to extract them to the webapp folder first 
     
    5151 
    5252    <section xml:id="news.0_15_11.config"> 
    53       <title>New configuration system enhancements</title> 
     53      <title>Configuration system enhancements</title> 
    5454      <para> 
    5555        We improved the configuration customization support by making context init parameters available as environment properties 
     
    6565  </section> 
    6666 
     67  <section xml:id="news.0_15_13"> 
     68    <title>What's new in Pustefix 0.15.13</title> 
     69 
     70    <section xml:id="news.0_15_13.config"> 
     71      <title>Module/configuration enhancements</title> 
     72      <para> 
     73        Including configuration fragments from modules now can be done without having to directly specify the module names. 
     74        Therefor the <literal>config-include</literal> element now supports <literal>module</literal> attribute values 
     75        containing simple patterns, which will be matched against the names of the modules available in the classpath, 
     76        e.g. <literal>module="*"</literal> will include all according configuration fragments found in the classpath, 
     77        <literal>module="*-us"</literal> will include only fragments from modules whose name ends with <literal>-us</literal>. 
     78      </para> 
     79      <para> 
     80        Added support for conditional unpacking of module resources. 
     81        Within the module descriptor you can set the optional <literal>resources</literal> element's  
     82        attribute <literal>unpack</literal> to <literal>obsolete</literal>. Thus the resources won't be extracted 
     83        in the current or newer Pustefix versions (despite containing resource mappings). 
     84        If you still want that obsolete resources are extracted, you can configure the Maven <literal>pustefix-webapp-plugin</literal> 
     85        by adding <literal>&lt;unpackObsolete&gt;true&lt;/unpackObsolete&gt;</literal> to its configuration. 
     86        This should help migrating modules and applications towards avoiding extracting resources at all, while keeping 
     87        backwards compatibility for modules shared between different applications (see <xref linkend="modulessupport"/>). 
     88      </para> 
     89    </section> 
     90    <section xml:id="news.0_15_13.tooling"> 
     91      <title>Tooling enhancements</title> 
     92      <para> 
     93        When hovering the closing include part delimiters displayed in edit mode, the tooltip now shows additional information for dynamic 
     94        includes. It prints out the complete dynamic search chain, e.g. something like  
     95        <literal>webapp(?) module-a(-) module-aa(+) module-ab(+)</literal>, whereas <literal>(?)</literal> means that the file doesn't 
     96        exist, <literal>(-)</literal> says that the file exists but doesn't contain the part, and <literal>(+)</literal> implies  
     97        that a file containing the part is found. 
     98      </para> 
     99      <para> 
     100        Introduced the Pustefix internals page. Similar to the DOM tree view this page provides some additional information useful 
     101        during development, e.g. environment, JVM and module information (see <xref linkend="tooling.pfxinternals"/>).  
     102      </para> 
     103    </section> 
     104  </section> 
     105 
     106  <section xml:id="news.0_15_14"> 
     107    <title>What's new in Pustefix 0.15.14</title> 
     108 
     109    <section xml:id="news.0_15_14.iwrapper"> 
     110      <title>IWrapper enhancements</title> 
     111      <para>Annotation-based IWrappers now also support assigning IHandler beans by name. Therefor the <literal>@IWrapper</literal> 
     112            annotation provides the new <literal>beanRef</literal> attribute (see <xref linkend="advanced.iwrapperannotations.reference"/>). 
     113      </para> 
     114    </section> 
     115  </section> 
     116 
     117  <section xml:id="news.0_15_17"> 
     118    <title>What's new in Pustefix 0.15.17</title> 
     119 
     120    <section xml:id="news.0_15_17.modules"> 
     121      <title>Module enhancements</title> 
     122      <para>Modules now can define which directories contain static resources and should be publicly available. Thus you don't have 
     123            to configure it in every application using the module. This configuration is done in the module deployment descriptor 
     124            using <literal>&lt;path/&gt;</literal> elements within the <literal>&lt;static/&gt;</literal> top-level section  
     125            (see <xref linkend="modulessupport"/>). 
     126      </para> 
     127    </section> 
     128  </section> 
     129 
    67130</chapter> 
  • branches/release-0.16.x/pustefix-docbook/src/docbkx/reference/reference.xml

    r5436 r5524  
    6767  <xi:include href="testing.xml" /> 
    6868  <xi:include href="upgrade.xml" /> 
     69  <xi:include href="tooling.xml" /> 
    6970  <xi:include href="glossary.xml" /> 
    7071 
  • branches/release-0.16.x/pustefix-docbook/src/docbkx/reference/xslt.xml

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/release-0.16.x/pustefix-docbook/src/docbkx/tutorial/tutorial.xml

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/release-0.16.x/pustefix-docbook/src/site/resources/docbkx/css

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/release-0.16.x/pustefix-docbook/src/site/resources/docbkx/images

  • branches/release-0.16.x/pustefix-docbook/src/uml

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/release-0.16.x/pustefix-editor/pustefix-editor-backend/pom.xml

    r5419 r5524  
    3333      <groupId>org.springframework</groupId> 
    3434      <artifactId>spring-webmvc</artifactId> 
    35       <version>3.0.3.RELEASE</version> 
     35      <version>3.0.5.RELEASE</version> 
    3636    </dependency> 
    3737    <dependency> 
  • branches/release-0.16.x/pustefix-editor/pustefix-editor-webui/pom.xml

    r5419 r5524  
    5858        <groupId>org.mortbay.jetty</groupId> 
    5959        <artifactId>maven-jetty-plugin</artifactId> 
     60        <version>6.1.26</version> 
    6061      </plugin> 
    6162    </plugins> 
  • branches/release-0.16.x/pustefix-editor/pustefix-editor-webui/src/main/webapp/WEB-INF/web.xml

    r5057 r5524  
    11<?xml version="1.0" encoding="UTF-8"?> 
    22<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:jee="http://java.sun.com/xml/ns/javaee"> 
     3   <context-param> 
     4      <!-- Make sure we're in mode "prod" to disable live resolving. 
     5           The editor has strange problem in mode "test":  
     6           the live mechanism causes the editor to load the application's pfixlog.xml instead of his own pfixlog.xml. 
     7           That fails because the jar file for unifiedlogging.Config is not part ot the editor's jar files. 
     8        --> 
     9      <param-name>mode</param-name> 
     10      <param-value>prod</param-value> 
     11   </context-param> 
    312   <!-- 
    413   <context-param> 
  • branches/release-0.16.x/pustefix-plugins/pustefix-webapp-plugin/src/main/java/org/pustefixframework/maven/plugins/Apt.java

    r4517 r5524  
    2222import java.io.FileWriter; 
    2323import java.io.IOException; 
     24import java.io.InputStream; 
     25import java.io.InputStreamReader; 
    2426import java.io.PrintWriter; 
    2527import java.util.ArrayList; 
     
    119121            builder.directory(basedir); 
    120122            builder.redirectErrorStream(true); 
    121             int ret = builder.start().waitFor(); 
    122             if (ret != 0) throw new MojoExecutionException("Error while executing apt (exit value: " + ret + ")."); 
     123            Process process = builder.start(); 
     124            int ret = process.waitFor(); 
     125            InputStream in = process.getInputStream(); 
     126            StringBuilder sb = new StringBuilder(); 
     127            if(in != null) { 
     128                InputStreamReader reader = new InputStreamReader(in); 
     129                char[] buffer = new char[4096]; 
     130                int i = 0; 
     131                try { 
     132                    while ((i = reader.read(buffer)) != -1) 
     133                        sb.append(buffer, 0, i); 
     134                } finally { 
     135                    in.close(); 
     136                } 
     137            } 
     138            if(ret == 0) { 
     139                log.debug(sb.toString()); 
     140            } else { 
     141                log.error(sb.toString()); 
     142                throw new MojoExecutionException("Error while executing apt (exit value: " + ret + ")."); 
     143            } 
    123144        } catch (IOException e) { 
    124145            throw new MojoExecutionException("Error invoking apt", e); 
  • branches/release-0.16.x/pustefix-plugins/pustefix-webapp-plugin/src/main/java/org/pustefixframework/maven/plugins/PustefixWebappMojo.java

    r5405 r5524  
    2929import java.util.Enumeration; 
    3030import java.util.List; 
    31 import java.util.Map; 
    32 import java.util.Properties; 
    3331import java.util.jar.JarEntry; 
    3432import java.util.jar.JarFile; 
     
    7876     */ 
    7977    private String modulesdir; 
     78     
     79    /** 
     80     * Set if resources from modules should be unpacked even though marked as obsolete in the 
     81     * module descriptor. 
     82     *  
     83     * @parameter default-value=false 
     84     */ 
     85    private boolean unpackObsolete; 
    8086     
    8187    /** 
     
    180186    } 
    181187     
    182     private Properties getProperties() { 
    183         Properties orig; 
    184         Properties result; 
    185         String key; 
    186          
    187         result = new Properties(); 
    188         orig = project.getProperties(); 
    189         for (Map.Entry<Object, Object> entry: orig.entrySet()) { 
    190                 key = (String) entry.getKey(); 
    191                 if (key.startsWith("pustefix.")) { 
    192                         result.setProperty(key, (String) entry.getValue()); 
    193                 } 
    194         } 
    195         return result; 
    196     } 
    197      
    198188    private static List<String> pathStrings(Collection<Artifact> artifacts) { 
    199189        List<String> lst; 
     
    219209            throw new MojoExecutionException("Mandatory attribute extractdir is not set!"); 
    220210        } 
    221         artifacts = project.getCompileArtifacts(); 
     211        artifacts = getProjectCompileArtifacts(); 
    222212        count = 0; 
    223213        for (Artifact artifact : artifacts) { 
     
    230220        } 
    231221        return count; 
     222    } 
     223     
     224    @SuppressWarnings("unchecked") 
     225    private List<Artifact> getProjectCompileArtifacts() { 
     226        return (List<Artifact>)project.getCompileArtifacts(); 
    232227    } 
    233228     
     
    347342                return; 
    348343            } 
    349             temp = ((Element)temp.item(0)).getElementsByTagName("resource-mapping"); 
    350344            ArrayList<ResourceMapping> mappings = new ArrayList<ResourceMapping>(); 
    351             for (int i=0; i<temp.getLength(); i++) { 
    352                 Element el = (Element) temp.item(i); 
    353                 String srcpath = el.getAttribute("srcpath"); 
    354                 if (srcpath == null) { 
    355                     throw new TransformerException("Mandatory attribute srcpath not set on resource-mapping attribute"); 
     345            String unpackValue = ((Element)temp.item(0)).getAttribute("unpack").trim(); 
     346            if(!unpackValue.equalsIgnoreCase("obsolete") || unpackObsolete) { 
     347                temp = ((Element)temp.item(0)).getElementsByTagName("resource-mapping"); 
     348                for (int i=0; i<temp.getLength(); i++) { 
     349                    Element el = (Element) temp.item(i); 
     350                    String srcpath = el.getAttribute("srcpath"); 
     351                    if (srcpath == null) { 
     352                        throw new TransformerException("Mandatory attribute srcpath not set on resource-mapping attribute"); 
     353                    } 
     354                    if (srcpath.startsWith("/")) { 
     355                        srcpath = srcpath.substring(1); 
     356                    } 
     357                    if (srcpath.endsWith("/")) { 
     358                        srcpath = srcpath.substring(0, srcpath.length()-1); 
     359                    } 
     360                    String targetpath = el.getAttribute("targetpath"); 
     361                    if (targetpath == null) { 
     362                        targetpath = ""; 
     363                    } 
     364                    if (targetpath.startsWith("/")) { 
     365                        targetpath = targetpath.substring(1); 
     366                    } 
     367                    if (targetpath.endsWith("/")) { 
     368                        targetpath = targetpath.substring(0, targetpath.length()-1); 
     369                    } 
     370                    ResourceMapping rm = new ResourceMapping(); 
     371                    rm.sourcePath = srcpath; 
     372                    rm.targetPath = targetpath; 
     373                    mappings.add(rm); 
    356374                } 
    357                 if (srcpath.startsWith("/")) { 
    358                     srcpath = srcpath.substring(1); 
    359                 } 
    360                 if (srcpath.endsWith("/")) { 
    361                     srcpath = srcpath.substring(0, srcpath.length()-1); 
    362                 } 
    363                 String targetpath = el.getAttribute("targetpath"); 
    364                 if (targetpath == null) { 
    365                     targetpath = ""; 
    366                 } 
    367                 if (targetpath.startsWith("/")) { 
    368                     targetpath = targetpath.substring(1); 
    369                 } 
    370                 if (targetpath.endsWith("/")) { 
    371                     targetpath = targetpath.substring(0, targetpath.length()-1); 
    372                 } 
    373                 ResourceMapping rm = new ResourceMapping(); 
    374                 rm.sourcePath = srcpath; 
    375                 rm.targetPath = targetpath; 
    376                 mappings.add(rm); 
    377375            } 
    378376            this.mappings = mappings; 
  • branches/release-0.16.x/pustefix-samples/moduletest/src/main/webapp/WEB-INF/project.xml

    r5144 r5524  
    3232  <application> 
    3333     
    34     <docroot-path>htdocs</docroot-path> 
     34    <docroot-path>docroot:/htdocs</docroot-path> 
    3535    <default-path>/xml/config</default-path> 
    3636     
  • branches/release-0.16.x/pustefix-samples/pustefix-hangman/pom.xml

    r5419 r5524  
    1818 
    1919  <properties> 
    20     <pustefix.version>0.15.11</pustefix.version> 
    2120    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    2221  </properties> 
     
    4140      <groupId>org.pustefixframework</groupId> 
    4241      <artifactId>pustefix-core</artifactId> 
    43       <version>${pustefix.version}</version> 
     42      <version>0.15.17-SNAPSHOT</version> 
    4443    </dependency> 
    4544  </dependencies> 
     
    5857        <groupId>org.pustefixframework.maven.plugins</groupId> 
    5958        <artifactId>pustefix-webapp-plugin</artifactId> 
    60         <version>${pustefix.version}</version> 
     59        <version>0.15.17-SNAPSHOT</version> 
    6160        <executions> 
    6261          <execution> 
     
    7170        <groupId>org.pustefixframework.maven.plugins</groupId> 
    7271        <artifactId>pustefix-statuscode-plugin</artifactId> 
    73         <version>${pustefix.version}</version> 
     72        <version>0.15.17-SNAPSHOT</version> 
    7473        <executions> 
    7574          <execution> 
     
    8382        <groupId>org.pustefixframework.maven.plugins</groupId> 
    8483        <artifactId>pustefix-iwrapper-plugin</artifactId> 
    85         <version>${pustefix.version}</version> 
     84        <version>0.15.17-SNAPSHOT</version> 
    8685        <executions> 
    8786          <execution> 
  • branches/release-0.16.x/pustefix-samples/pustefix-hangman/src/main/java/sample/games/hangman/Dictionary.java

    r5352 r5524  
    22 
    33import java.util.ArrayList; 
     4import java.util.HashMap; 
    45import java.util.List; 
     6import java.util.Locale; 
     7import java.util.Map; 
    58import java.util.Random; 
    69 
     
    811         
    912        private Random random = new Random(); 
    10         private List<String> words = new ArrayList<String>(); 
     13        private Map<Locale, List<String>> words = new HashMap<Locale, List<String>>(); 
     14        private int maxBeginnerLen = 13; 
     15        private int maxAdvancedLen = 20; 
    1116         
    1217        public Dictionary() { 
    13                 words.add("Transplantationsmedizin"); 
    14                 words.add("Immatrikulationsbescheinigung"); 
    15                 words.add("Naherholungsgebiet"); 
    16                 words.add("Eisenbahnschaffner"); 
    17                 words.add("Koalitionsverhandlung"); 
    18                 words.add("Suchtberatungsstelle"); 
    19                 words.add("Wiederaufbereitungsanlage"); 
    20                 words.add("Atomwaffensperrvertrag"); 
    21                 words.add("Proliferationsabkommen"); 
    22                 words.add("Chemiewaffenkonvention"); 
    23                 words.add("Druckwasserreaktor"); 
    24                 words.add("Bereitstellungskosten"); 
    25                 words.add("Revolutionsromantik"); 
    26                 words.add("Panzerabwehrrakete"); 
    27                 words.add("Reichweitenanalyse"); 
    28                 words.add("Kampfmittelbeseitigungsdienst"); 
    29                 words.add("Ertragsanteilsbesteuerung"); 
    30                 words.add("Fertigungsprozessoptimierung"); 
    31                 words.add("Einlassungsobliegenheit"); 
    32                 words.add("Zentralsteuerungshypothese"); 
    33                 words.add("Nahverkehrsgesellschaft"); 
    34                 words.add("Imperialismustheorie"); 
    35                 words.add("Hydrokulturpflanzen"); 
    36                 words.add("Differentialquotient"); 
    37                 words.add("Infinitesimalrechnung"); 
    38                 words.add("Beschleunigungssensor"); 
    39                 words.add("Kaltluftentstehungsgebiete"); 
    40                 words.add("Revitalisierungskosten"); 
     18             
     19            List<String> wordsDE = new ArrayList<String>(); 
     20            List<String> wordsEN = new ArrayList<String>(); 
     21            words.put(Locale.GERMAN, wordsDE); 
     22            words.put(Locale.ENGLISH, wordsEN); 
     23             
     24            wordsDE.add("Reinigung"); 
     25        wordsDE.add("Regierung"); 
     26        wordsDE.add("Steuerung"); 
     27        wordsDE.add("Regulierung"); 
     28        wordsDE.add("Relativierung"); 
     29        wordsDE.add("Handbetrieb"); 
     30        wordsDE.add("Fehleinkauf"); 
     31            wordsDE.add("Hausschwein"); 
     32            wordsDE.add("Rollentausch"); 
     33         
     34            wordsDE.add("Naherholungsgebiet"); 
     35        wordsDE.add("Eisenbahnschaffner"); 
     36        wordsDE.add("Revolutionsromantik"); 
     37        wordsDE.add("Panzerabwehrrakete"); 
     38        wordsDE.add("Reichweitenanalyse"); 
     39        wordsDE.add("Druckwasserreaktor"); 
     40        wordsDE.add("Bereitstellungskosten"); 
     41        wordsDE.add("Koalitionsverhandlung"); 
     42        wordsDE.add("Suchtberatungsstelle"); 
     43             
     44                wordsDE.add("Transplantationsmedizin"); 
     45                wordsDE.add("Immatrikulationsbescheinigung"); 
     46                wordsDE.add("Wiederaufbereitungsanlage"); 
     47                wordsDE.add("Atomwaffensperrvertrag"); 
     48                wordsDE.add("Proliferationsabkommen"); 
     49                wordsDE.add("Chemiewaffenkonvention"); 
     50                wordsDE.add("Kampfmittelbeseitigungsdienst"); 
     51                wordsDE.add("Ertragsanteilsbesteuerung"); 
     52                wordsDE.add("Fertigungsprozessoptimierung"); 
     53                wordsDE.add("Einlassungsobliegenheit"); 
     54                wordsDE.add("Zentralsteuerungshypothese"); 
     55                wordsDE.add("Nahverkehrsgesellschaft"); 
     56                wordsDE.add("Imperialismustheorie"); 
     57                wordsDE.add("Hydrokulturpflanzen"); 
     58                wordsDE.add("Differentialquotient"); 
     59                wordsDE.add("Infinitesimalrechnung"); 
     60                wordsDE.add("Beschleunigungssensor"); 
     61                wordsDE.add("Kaltluftentstehungsgebiete"); 
     62                wordsDE.add("Revitalisierungskosten"); 
     63                 
     64                wordsEN.add("affirmation"); 
     65                wordsEN.add("insurance"); 
     66                wordsEN.add("assertion"); 
     67                wordsEN.add("assurance"); 
     68                wordsEN.add("accumulator"); 
     69                wordsEN.add("warehouse"); 
     70                wordsEN.add("clearance"); 
     71                wordsEN.add("maintenance"); 
     72                wordsEN.add("brainwash"); 
     73                wordsEN.add("malediction"); 
     74                wordsEN.add("punishment"); 
     75                wordsEN.add("disadvantage"); 
     76                wordsEN.add("subversion"); 
     77                 
     78                wordsEN.add("mispronunciation"); 
     79                wordsEN.add("tintinnabulation"); 
     80                wordsEN.add("plenipotentiary"); 
     81                wordsEN.add("prestidigitation"); 
     82                wordsEN.add("machiavellianism"); 
     83                wordsEN.add("hypervitaminosis"); 
     84                 
     85                wordsEN.add("disproportionableness"); 
     86                wordsEN.add("antitransubstantiationalist"); 
     87                wordsEN.add("psychophysicotherapeutics"); 
     88                wordsEN.add("radioimmunoelectrophoresis"); 
     89                wordsEN.add("floccinaucinihilipilification"); 
     90                wordsEN.add("honorificabilitudinitatibus"); 
     91                wordsEN.add("antidisestablishment"); 
     92                wordsEN.add("antidisestablishmentarianism"); 
     93                 
    4194        } 
    4295         
    43         public String getRandomWord() { 
    44                 int rand = random.nextInt(words.size()); 
    45                 return words.get(rand); 
     96        public String getRandomWord(Locale locale, DifficultyLevel level) { 
     97            List<String> localeWords = words.get(locale); 
     98            if(localeWords == null) localeWords = words.get(Locale.ENGLISH); 
     99            List<String> levelWords = new ArrayList<String>(); 
     100            int minLen = maxAdvancedLen + 1; 
     101            int maxLen = Integer.MAX_VALUE; 
     102            if(level == DifficultyLevel.BEGINNER) { 
     103                minLen = 1; 
     104                maxLen = maxBeginnerLen; 
     105            } else if(level == DifficultyLevel.ADVANCED) { 
     106                minLen = maxBeginnerLen + 1; 
     107                maxLen = maxAdvancedLen; 
     108            } 
     109            for(String word: localeWords) { 
     110                if(word.length() >= minLen && word.length() <= maxLen) levelWords.add(word); 
     111            } 
     112            int rand = random.nextInt(levelWords.size()); 
     113                return levelWords.get(rand); 
     114        } 
     115         
     116        public DifficultyLevel getDifficultyLevel(String word) { 
     117            int len = word.length(); 
     118            if(len <= maxBeginnerLen) return DifficultyLevel.BEGINNER; 
     119            else if(len <= maxAdvancedLen) return DifficultyLevel.ADVANCED; 
     120            else return DifficultyLevel.EXPERT; 
    46121        } 
    47122         
     
    49124                Dictionary dict = new Dictionary(); 
    50125                for(int i=0;i<100;i++) { 
    51                         System.out.println(dict.getRandomWord()); 
     126                        System.out.println(dict.getRandomWord(Locale.ENGLISH, DifficultyLevel.BEGINNER)); 
    52127                } 
    53128        } 
  • branches/release-0.16.x/pustefix-samples/pustefix-hangman/src/main/java/sample/games/hangman/context/ContextPlay.java

    r5352 r5524  
    11package sample.games.hangman.context; 
    22 
     3 
    34public class ContextPlay { 
    4  
     5    
    56        private String word; 
    67        private String displayWord; 
    7         private int tries; 
     8        private int misses; 
     9        private long startTime; 
     10        private long endTime; 
     11         
     12        public void reset() { 
     13            word = null; 
     14            displayWord = null; 
     15            misses = 0; 
     16            startTime = 0; 
     17            endTime = 0; 
     18        } 
    819         
    920        public String getWord() { 
     
    1223        public void setWord(String word) { 
    1324                this.word = word; 
     25                setDisplayWord(word.replaceAll("." , "_")); 
    1426        } 
    15         public String getDisplayWord() { 
    16                 return displayWord; 
    17         } 
     27         
    1828        public void setDisplayWord(String displayWord) { 
    1929                this.displayWord = displayWord; 
    2030        } 
    2131         
    22         public int getTries() { 
    23                 return tries; 
     32        public String getDisplayWord() { 
     33            return displayWord; 
    2434        } 
    2535         
    26         public void incTries() { 
    27                 tries++; 
     36        public void guess(char ch) { 
     37            StringBuilder sb = new StringBuilder(); 
     38            boolean ok = false; 
     39        for(int i=0; i<word.length(); i++) { 
     40            if(Character.toUpperCase(word.charAt(i)) == ch) { 
     41                sb.append(ch); 
     42                ok = true; 
     43            } else { 
     44                sb.append(displayWord.charAt(i)); 
     45            } 
     46        } 
     47        setDisplayWord(sb.toString()); 
     48        if(!ok) misses++; 
     49        if(isCompletedSuccessful()) end(); 
    2850        } 
    2951         
     52        public int getMisses() { 
     53                return misses; 
     54        } 
     55         
     56        public boolean isCompletedSuccessful() { 
     57            return !displayWord.contains("_"); 
     58        } 
     59         
     60        public boolean isCompletedFaulty() { 
     61            return misses > 5; 
     62        } 
     63         
     64        public boolean isCompleted() { 
     65            return isCompletedSuccessful() || isCompletedFaulty(); 
     66        } 
     67         
     68        public void start() { 
     69            startTime = System.currentTimeMillis(); 
     70        } 
     71         
     72        public void end() { 
     73            endTime = System.currentTimeMillis(); 
     74        } 
     75         
     76        public long getTime() { 
     77            if(startTime == 0) return 0; 
     78            return (endTime == 0 ? System.currentTimeMillis() : endTime) - startTime; 
     79        } 
     80             
    3081} 
  • branches/release-0.16.x/pustefix-samples/pustefix-hangman/src/main/java/sample/games/hangman/handler/PlayHandler.java

    r5352 r5524  
    44import org.springframework.beans.factory.annotation.Autowired; 
    55 
     6import sample.games.hangman.Dictionary; 
     7import sample.games.hangman.HighScore; 
     8import sample.games.hangman.Score; 
     9import sample.games.hangman.StatusCodes; 
    610import sample.games.hangman.context.ContextPlay; 
    7 import sample.games.hangman.context.User; 
     11import sample.games.hangman.context.ContextSettings; 
     12import sample.games.hangman.context.ContextUser; 
    813import sample.games.hangman.wrapper.Play; 
    914import de.schlund.pfixcore.generator.IHandler; 
     
    1419 
    1520        private ContextPlay contextPlay; 
    16     private User user; 
    17  
     21    private ContextUser contextUser; 
     22    private ContextSettings contextSettings; 
     23    private Dictionary dictionary; 
     24    private HighScore highScore; 
     25     
    1826    public void handleSubmittedData(Context context, IWrapper wrapper) throws Exception { 
    1927 
    2028        Play play = (Play)wrapper; 
    21         System.out.println(play.getLetter()); 
    22          
    23         char ch = play.getLetter().charAt(0); 
    24          
    25         String word = contextPlay.getWord(); 
    26         String displayWord = contextPlay.getDisplayWord(); 
    27         StringBuilder sb = new StringBuilder(); 
    28         boolean ok = false; 
    29         for(int i=0; i<word.length(); i++) { 
    30                 if(Character.toUpperCase(word.charAt(i)) == ch) { 
    31                         sb.append(ch); 
    32                         ok = true; 
    33                 } else { 
    34                         sb.append(displayWord.charAt(i)); 
    35                 } 
     29        if(play.getReset()) { 
     30            contextPlay.reset(); 
     31        } else { 
     32            if(!contextPlay.isCompleted()) { 
     33                char ch = play.getLetter().charAt(0); 
     34                contextPlay.guess(ch); 
     35                if(contextPlay.isCompletedFaulty()) { 
     36                    context.addPageMessage(StatusCodes.FAILURE, new String[] {contextPlay.getWord()}, null); 
     37                    context.prohibitContinue(); 
     38                } else if(contextPlay.isCompletedSuccessful()) { 
     39                    boolean scored = highScore.addScore(new Score(contextPlay.getTime(), contextPlay.getMisses(), 
     40                            dictionary.getDifficultyLevel(contextPlay.getWord()), contextUser.getName())); 
     41                    if(scored) context.addPageMessage(StatusCodes.SUCCESS_HIGH, null, null); 
     42                    else context.addPageMessage(StatusCodes.SUCCESS, null , null); 
     43                    context.prohibitContinue(); 
     44                } 
     45            } 
    3646        } 
    37         contextPlay.setDisplayWord(sb.toString()); 
    38         if(!ok) contextPlay.incTries(); 
    39          
    40          
    4147    } 
    4248 
    4349    public boolean isActive(Context context) throws Exception { 
    44         return user.getName() != null; 
     50        return contextUser.getName() != null && contextSettings.getDifficultyLevel() != null; 
    4551    } 
    4652 
     
    5460 
    5561    public void retrieveCurrentStatus(Context context, IWrapper wrapper) throws Exception { 
    56         
     62        if(contextPlay.getWord() == null) { 
     63            String word = dictionary.getRandomWord(contextSettings.getLocale(), contextSettings.getDifficultyLevel()); 
     64            contextPlay.setWord(word); 
     65            contextPlay.start(); 
     66        } 
    5767    } 
    5868 
    5969    @Autowired 
    60     public void setUser(User user) { 
    61         this.user = user; 
     70    public void setUser(ContextUser contextUser) { 
     71        this.contextUser = contextUser; 
    6272    } 
    6373 
     
    6777    } 
    6878     
     79    @Autowired 
     80    public void setContextSettings(ContextSettings contextSettings) { 
     81        this.contextSettings = contextSettings; 
     82    } 
     83     
     84    @Autowired 
     85    public void setDictionary(Dictionary dictionary) { 
     86        this.dictionary = dictionary; 
     87    } 
     88     
     89    @Autowired 
     90    public void setHighScore(HighScore highScore) { 
     91        this.highScore = highScore; 
     92    } 
     93     
    6994} 
  • branches/release-0.16.x/pustefix-samples/pustefix-hangman/src/main/java/sample/games/hangman/handler/RegistrationHandler.java

    r5352 r5524  
    44import org.springframework.beans.factory.annotation.Autowired; 
    55 
    6 import sample.games.hangman.Dictionary; 
    7 import sample.games.hangman.context.ContextPlay; 
    8 import sample.games.hangman.context.User; 
     6import sample.games.hangman.context.ContextUser; 
    97import sample.games.hangman.wrapper.Registration; 
    108import de.schlund.pfixcore.generator.IHandler; 
     
    1412public class RegistrationHandler implements IHandler { 
    1513 
    16         private Dictionary dictionary; 
    17         private ContextPlay contextPlay; 
    18     private User user; 
     14    private ContextUser user; 
    1915 
    2016    public void handleSubmittedData(Context context, IWrapper wrapper) throws Exception { 
     
    2218        Registration registration = (Registration)wrapper; 
    2319        user.setName(registration.getName()); 
    24          
    25         String word = dictionary.getRandomWord(); 
    26         contextPlay.setWord(word); 
    27         contextPlay.setDisplayWord(word.replaceAll("." , "_")); 
    28          
    2920    } 
    3021 
    3122    public boolean isActive(Context context) throws Exception { 
    32         return true; 
     23        return user.getName() == null; 
    3324    } 
    3425 
     
    4940 
    5041    @Autowired 
    51     public void setUser(User user) { 
     42    public void setUser(ContextUser user) { 
    5243        this.user = user; 
    5344    } 
    5445     
    55     @Autowired 
    56     public void setDictionary(Dictionary dictionary) { 
    57         this.dictionary = dictionary; 
    58     } 
    59      
    60     @Autowired 
    61     public void setContextPlay(ContextPlay contextPlay) { 
    62         this.contextPlay = contextPlay; 
    63     } 
    64  
    6546} 
  • branches/release-0.16.x/pustefix-samples/pustefix-hangman/src/main/java/sample/games/hangman/state/ByeState.java

    r5352 r5524  
    11package sample.games.hangman.state; 
    22 
    3 import sample.games.hangman.context.User; 
     3import sample.games.hangman.context.ContextUser; 
    44import org.springframework.beans.factory.annotation.Autowired; 
    55 
     
    1010public class ByeState extends StaticState { 
    1111 
    12     private User user; 
     12    private ContextUser user; 
    1313     
    1414    @Override 
     
    1818     
    1919    @Autowired 
    20     public void setUser(User user) { 
     20    public void setUser(ContextUser user) { 
    2121        this.user = user; 
    2222    } 
  • branches/release-0.16.x/pustefix-samples/pustefix-hangman/src/main/java/sample/games/hangman/wrapper/Play.iwrp

    r5352 r5524  
    66  <ihandler class="sample.games.hangman.handler.PlayHandler"/> 
    77 
    8   <param name="letter" type="java.lang.String" occurrence="mandatory"> 
     8  <param name="letter" type="java.lang.String" occurrence="optional"> 
    99    <precheck class="de.schlund.pfixcore.generator.prechecks.RegexpCheck"> 
    1010      <cparam name="regexp" value="/[A-Z]/"/> 
    1111    </precheck> 
    1212  </param> 
     13   
     14  <param name="reset" type="java.lang.Boolean"> 
     15    <default><value>false</value></default>  
     16    <caster class="de.schlund.pfixcore.generator.casters.ToBoolean"/> 
     17  </param> 
    1318 
    1419</interface> 
  • branches/release-0.16.x/pustefix-samples/pustefix-hangman/src/main/webapp/WEB-INF/app.xml

    r5352 r5524  
    99 
    1010  <context defaultpage="Home"> 
    11     <resource bean-name="contextUser" class="sample.games.hangman.context.User"/> 
     11    <resource bean-name="contextUser" class="sample.games.hangman.context.ContextUser"/> 
    1212    <resource bean-name="contextPlay" class="sample.games.hangman.context.ContextPlay"/> 
     13    <resource bean-name="contextSettings" class="sample.games.hangman.context.ContextSettings"/> 
    1314  </context> 
    1415 
    1516  <pageflow name="MainFlow" final="Home"> 
    1617    <flowstep name="Home"/> 
     18    <flowstep name="Settings"/> 
    1719    <flowstep name="Play"/> 
    18     <flowstep name="Bye"/> 
     20    <flowstep name="Highscore"/> 
    1921  </pageflow> 
    2022 
    2123  <pagerequest name="Home"> 
     24    <input policy="NONE"> 
     25      <wrapper prefix="registration" class="sample.games.hangman.wrapper.Registration"/> 
     26    </input> 
     27    <output> 
     28      <resource node="user" bean-ref="contextUser"/> 
     29    </output> 
     30  </pagerequest> 
     31   
     32  <pagerequest name="Settings"> 
    2233    <input> 
    23       <wrapper prefix="registration" class="sample.games.hangman.wrapper.Registration"/> 
     34      <wrapper prefix="settings" class="sample.games.hangman.wrapper.Settings"/> 
    2435    </input> 
    2536  </pagerequest> 
     
    3445  </pagerequest> 
    3546 
    36  <pagerequest name="Bye"> 
    37     <state class="sample.games.hangman.state.ByeState"/> 
     47  <pagerequest name="Highscore"> 
    3848    <output> 
    39       <resource node="user" bean-ref="contextUser"/> 
     49      <resource node="highscore" bean-ref="highscore"/> 
    4050    </output> 
    4151  </pagerequest> 
  • branches/release-0.16.x/pustefix-samples/pustefix-hangman/src/main/webapp/WEB-INF/depend.xml

    r5376 r5524  
    1010  <navigation> 
    1111    <page handler="/xml/app" name="Home"/> 
     12    <page handler="/xml/app" name="Settings"/> 
    1213    <page handler="/xml/app" name="Play"/> 
    13     <page handler="/xml/app" name="Bye"/> 
     14    <page handler="/xml/app" name="Highscore"/> 
    1415  </navigation> 
    1516 
     
    2324   
    2425  <standardpage name="Home" xml="xml/frame.xml"/> 
     26  <standardpage name="Settings" xml="xml/frame.xml"/> 
    2527  <standardpage name="Play" xml="xml/frame.xml"/> 
    26   <standardpage name="Bye" xml="xml/frame.xml"/> 
     28  <standardpage name="Highscore" xml="xml/frame.xml"/> 
    2729 
    2830</make> 
  • branches/release-0.16.x/pustefix-samples/pustefix-hangman/src/main/webapp/WEB-INF/spring.xml

    r5352 r5524  
    1111  <bean id="dictionary" class="sample.games.hangman.Dictionary"/> 
    1212 
     13  <bean id="highscore" class="sample.games.hangman.HighScore"/> 
     14 
    1315</beans> 
  • branches/release-0.16.x/pustefix-samples/pustefix-hangman/src/main/webapp/css/style.css

    r5376 r5524  
    1 /* put your application's common CSS styles here */ 
    2  
    31body { 
    4   margin: 0px; 
    5   background: #fff; 
     2  margin: 0; 
     3  padding: 0; 
    64  font-family: sans-serif; 
    75} 
    86 
    9 div#header { 
    10    background: #666; 
    11    background-image: url(../img/logo.png); 
    12    background-repeat: no-repeat; 
    13    background-position:10px 4px; 
    14    width: 100%;  
    15    height: 65px; 
    16    padding-left: 80px; 
    17    padding-top: 25px; 
    18    color: #fff; 
    19    font-size: 35px; 
    20    font-family: sans-serif; 
     7body { 
     8        background: #fff url(../img/background.png) 0 0 repeat-x; 
     9} 
     10         
     11#header { 
     12  height: 68px; 
     13  margin: 15px; 
    2114} 
    2215 
    23 div.content { 
     16#navigation { 
     17  margin: 10px; 
     18  padding: 10px; 
     19} 
     20 
     21div#content { 
    2422        padding: 10px; 
     23        margin: 20px; 
     24    
     25} 
     26 
     27#footer { 
     28  position: absolute; 
     29  top: 20px; 
     30  right: 200px; 
     31  font-size: 60%; 
     32  color: #ccc; 
    2533} 
    2634 
    2735span.error { 
    28   color: red; 
    29   padding-left: 10px; 
     36  color: white; 
     37  background-color: red; 
     38  margin-left: 10px; 
     39  padding: 2px; 
    3040} 
     41 
     42 
     43div.field_caption { 
     44  font-weight: bold; 
     45  padding-bottom: 5px;   
     46} 
     47 
     48div#navigation a.core_button_normal { 
     49  color: #fff; 
     50  padding: 10px; 
     51} 
     52 
     53div#navigation span.core_button_active { 
     54  color: #fff; 
     55  font-weight: bold; 
     56  padding: 10px;         
     57} 
     58 
     59div#navigation span.core_button_invisible { 
     60  color: #aaa; 
     61  padding: 10px;         
     62} 
     63 
     64a.core_button_normal { 
     65  color: #000; 
     66} 
     67 
     68span.core_button_active { 
     69  color: #000; 
     70  font-weight: bold;     
     71} 
     72 
     73table.data { 
     74  border-spacing: 0px; 
     75  border: 1px solid #fff; 
     76} 
     77 
     78table.data th { 
     79  background: #ccc; 
     80  padding: 10px; 
     81  padding-right: 20px; 
     82} 
     83 
     84table.data td { 
     85  padding: 10px; 
     86  padding-right: 20px; 
     87} 
     88 
     89tr.odd { 
     90  background: #ddd; 
     91} 
     92 
     93tr.even { 
     94  background: #eee; 
     95} 
     96 
     97table.form { 
     98  border-spacing: 0px; 
     99} 
     100 
     101table.form th { 
     102  padding: 10px; 
     103  padding-left: 0px;     
     104} 
     105 
     106table.form td { 
     107  padding: 10px; 
     108  padding-left: 15px; 
     109} 
     110 
     111input.data { 
     112  margin-left: 10px; 
     113  margin-right: 5px; 
     114} 
     115 
     116input.radio { 
     117  margin-right: 7px; 
     118} 
     119 
     120div.setting { 
     121  font-weight: bold; 
     122  margin-bottom: 10px; 
     123  margin-top: 10px; 
     124} 
     125 
     126div.PfxMessage { 
     127  color: #000; 
     128  font-size: 120%; 
     129  margin-left: 10px; 
     130  padding: 2px; 
     131} 
  • branches/release-0.16.x/pustefix-samples/pustefix-hangman/src/main/webapp/dyntxt/statusmessages.xml

    r5352 r5524  
    88      Name isn't valid, it requires at least 3 characters. 
    99    </theme> 
     10    <theme name="de"> 
     11      Der Name ist ungÃŒltig, er muss mindestens 3 Zeichen haben. 
     12    </theme> 
     13  </part> 
     14   
     15  <part name="FAILURE"> 
     16    <theme name="default"> 
     17      You have lost. The searched word was <b><pfx:argref pos="1"/></b>. 
     18    </theme> 
     19    <theme name="de"> 
     20      Du hast verloren. 
     21    </theme> 
     22  </part> 
     23   
     24  <part name="SUCCESS"> 
     25    <theme name="default"> 
     26      You have won! 
     27    </theme> 
     28    <theme name="de"> 
     29      Du hast gewonnen! 
     30    </theme> 
     31  </part> 
     32   
     33  <part name="SUCCESS_HIGH"> 
     34    <theme name="default"> 
     35      You have won and made it into the highscore!!! 
     36    </theme> 
     37    <theme name="de"> 
     38      Du hast gewonnen und es in die Rangliste geschafft!!! 
     39    </theme> 
    1040  </part> 
    1141   
  • branches/release-0.16.x/pustefix-samples/pustefix-hangman/src/main/webapp/modules-override/pustefix-core/dyntxt/statusmessages-core-merged.xml

    r5352 r5524  
    1010  <part name="MISSING_PARAM"> 
    1111    <theme name="default">This parameter is mandatory.</theme> 
     12    <theme name="de">Diese Angabe ist verpflichtend.</theme> 
    1213  </part> 
    1314  <part name="caster.ERR_TO_BOOLEAN"> 
  • branches/release-0.16.x/pustefix-samples/pustefix-hangman/src/main/webapp/txt/common.xml

    r5376 r5524  
    33   
    44  <part name="title"> 
     5    <theme name="default">Hangman</theme> 
     6    <theme name="de">Galgenmann</theme> 
     7  </part> 
     8   
     9  <part name="powered_by"> 
    510    <theme name="default"> 
    6       Hangman 
     11      Powered by Pustefix Framework <ixsl:value-of select="pfx:getFrameworkVersion()"/> 
    712    </theme> 
    813    <theme name="de"> 
    9       Galgenmann 
     14      Erstellt mit Pustefix Framework <ixsl:value-of select="pfx:getFrameworkVersion()"/> 
    1015    </theme> 
    1116  </part> 
     17   
    1218</include_parts> 
  • branches/release-0.16.x/pustefix-samples/pustefix-hangman/src/main/webapp/txt/pages/Home.xml

    r5376 r5524  
    66 
    77      <h3><pfx:include part="greeting"/></h3> 
    8          
    9       <pfx:forminput> 
    10         Please enter your name: 
    11         <pfx:xinp type="text" name="registration.name" size="20"/> 
    12         <pfx:xinp type="submit" value="Submit"/> 
    13         <show-error field="registration.name"/> 
    14       </pfx:forminput> 
    15  
     8           
     9          <pfx:checkactive prefix="registration"> 
     10        <pfx:forminput> 
     11          <pfx:include part="name"/> 
     12          <pfx:xinp type="text" name="registration.name" size="20" class="data"/> 
     13          <pfx:xinp type="submit"> 
     14            <pfx:value><pfx:include part="submit"/></pfx:value> 
     15          </pfx:xinp> 
     16          <show-error field="registration.name"/> 
     17        </pfx:forminput> 
     18      </pfx:checkactive> 
     19       
     20      <pfx:checknotactive prefix="registration"> 
     21        <pfx:button page="Play" mode="force"><pfx:include part="play"/> <ixsl:value-of select="/formresult/user/@name"/>!</pfx:button>   
     22      </pfx:checknotactive> 
     23       
    1624    </theme> 
    17  
     25  </part> 
     26   
     27  <part name="title"> 
     28    <theme name="default">Home</theme> 
     29    <theme name="de">Start</theme> 
    1830  </part> 
    1931   
     
    2234      Welcome to <pfx:include href="txt/common.xml" part="title"/>! 
    2335    </theme> 
    24     <theme name="en"> 
    25       Willkommen zu <pfx:include href="txt/common.xml" part="title"/>! 
     36    <theme name="de"> 
     37      Willkommen bei <pfx:include href="txt/common.xml" part="title"/>! 
     38    </theme> 
     39  </part> 
     40 
     41  <part name="name"> 
     42    <theme name="default"> 
     43      Please enter your name: 
     44    </theme> 
     45    <theme name="de"> 
     46      Bitte gib deinen Namen ein: 
     47    </theme> 
     48  </part> 
     49   
     50  <part name="submit"> 
     51    <theme name="default">Submit</theme> 
     52    <theme name="de">Senden</theme> 
     53  </part> 
     54   
     55  <part name="play"> 
     56    <theme name="default"> 
     57      Let's play, 
     58    </theme> 
     59    <theme name="de"> 
     60      Lass uns spielen, 
    2661    </theme> 
    2762  </part> 
  • branches/release-0.16.x/pustefix-samples/pustefix-hangman/src/main/webapp/txt/pages/Play.xml

    r5352 r5524  
    44    <theme name="default"> 
    55     
    6       <h3>Play!!!</h3> 
    7       <img src="{$__contextpath}/img/Hangman-{/formresult/play/@tries}.png"/> 
     6      <img src="{$__contextpath}/img/Hangman-{/formresult/play/@misses}.png"/> 
    87      <div style="padding: 23pt; letter-spacing: 0.3em;font-size:25pt"> 
     8       
    99      <ixsl:value-of select="/formresult/play/@displayWord"/> 
    1010      </div> 
    11       <buttons/> 
     11      <ixsl:if test="/formresult/play/@completed='false'"> 
     12        <buttons/> 
     13      </ixsl:if> 
     14      <show-messages/> 
     15      <br/><br/> 
     16      <pfx:button page="Play" mode="force"><pfx:argument name="play.reset">true</pfx:argument>New game</pfx:button> 
    1217    </theme> 
    1318  </part> 
     19   
     20  <part name="title"> 
     21    <theme name="default">Play</theme> 
     22    <theme name="de">Spiel</theme> 
     23  </part> 
     24   
    1425</include_parts> 
  • branches/release-0.16.x/pustefix-samples/pustefix-hangman/src/main/webapp/xml/frame.xml

    r5376 r5524  
    88    </head> 
    99    <body> 
     10       
     11     <div id="container"> 
     12      
     13       
    1014      <div id="header"> 
    11         <pfx:include href="txt/common.xml" part="title"/> 
     15        <!-- <pfx:include href="txt/common.xml" part="title"/> --> 
     16        <pfx:image themed-path="img" themed-img="logo.png" align="middle"/> 
     17        <span id="footer"><pfx:include href="txt/common.xml" part="powered_by"/></span> 
    1218      </div> 
    13       <div class="content"> 
     19       
     20     <div id="navigation"> 
     21        <navibutton page="Home"/> 
     22        <navibutton page="Settings"/> 
     23        <navibutton page="Play"/> 
     24        <navibutton page="Highscore"/> 
     25      </div> 
     26       
     27      <div id="content"> 
    1428        <pfx:maincontent prefix=""/> 
     29        <pfx:editconsole/> 
    1530      </div> 
    16       <pfx:editconsole/> 
     31       
     32       
     33       
     34     
     35     
     36    </div>   
     37     
    1738    </body> 
    1839  </html> 
  • branches/release-0.16.x/pustefix-samples/pustefix-hangman/src/main/webapp/xsl/metatags.xsl

    r5352 r5524  
    3838  </xsl:template> 
    3939   
     40  <xsl:template match="show-messages"> 
     41    <pfx:checkmessage> 
     42      <pfx:messageloop> 
     43        <div> 
     44          <xsl:attribute name="class">{$pfx_class}</xsl:attribute> 
     45          <pfx:scode/> 
     46        </div> 
     47      </pfx:messageloop> 
     48    </pfx:checkmessage> 
     49  </xsl:template> 
     50   
     51  <xsl:template match="navibutton"> 
     52    <pfx:button page="{@page}"><pfx:include href="txt/pages/{@page}.xml" part="title"/></pfx:button> 
     53  </xsl:template> 
    4054   
    4155</xsl:stylesheet> 
  • branches/release-0.16.x/pustefix-samples/pustefix-sample-basic/pom.xml

    r5419 r5524  
    6969        <groupId>org.pustefixframework.maven.plugins</groupId> 
    7070        <artifactId>pustefix-iwrapper-plugin</artifactId> 
    71         <version>0.16.0-SNAPSHOT</version> 
     71        <version>0.15.17-SNAPSHOT</version> 
    7272        <executions> 
    7373          <execution> 
  • branches/release-0.16.x/pustefix-samples/pustefix-sample-firstapp/src/main/webapp/WEB-INF/web.xml

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/release-0.16.x/pustefix-samples/pustefix-sample1

  • branches/release-0.16.x/pustefix-samples/pustefix-sample1/pom.xml

    r5419 r5524  
    5555  <build> 
    5656    <plugins>  
     57      <plugin> 
     58        <groupId>org.codehaus.mojo</groupId> 
     59        <artifactId>tomcat-maven-plugin</artifactId> 
     60        <version>1.1</version> 
     61        <configuration> 
     62          <uriEncoding>UTF-8</uriEncoding> 
     63        </configuration> 
     64      </plugin> 
    5765      <plugin> 
    5866        <!--  some tests operated on the exploded webapp --> 
  • branches/release-0.16.x/pustefix-samples/pustefix-sample1/src/main/java/de

  • branches/release-0.16.x/pustefix-samples/pustefix-sample1/src/main/java/de/schlund/pfixcore/example/EncodingTestHandler.java

    r4526 r5524  
    1818package de.schlund.pfixcore.example; 
    1919 
    20 import de.schlund.pfixcore.example.iwrapper.EncodingTest; 
     20import de.schlund.pfixcore.example.iwrapper.EncodingTestWrapper; 
    2121import de.schlund.pfixcore.generator.IHandler; 
    2222import de.schlund.pfixcore.generator.IWrapper; 
     
    2424 
    2525/** 
    26  * @author ml 
    27  * 
    28  * To change the template for this generated type comment go to 
    29  * Window - Preferences - Java - Code Generation - Code and Comments 
     26 *  
     27 * @author mleidig@schlund.de 
     28 *  
    3029 */ 
    3130public class EncodingTestHandler implements IHandler { 
    32  
     31     
    3332    public void handleSubmittedData(Context context,IWrapper wrapper) throws Exception { 
    34         EncodingTest test     = (EncodingTest)wrapper; 
     33        EncodingTestWrapper test     = (EncodingTestWrapper)wrapper; 
    3534        String       encoding = test.getEncoding(); 
    3635        if (encoding == null || encoding.trim().equals("") || encoding.equals("none")) { 
     
    4140     
    4241    public void retrieveCurrentStatus(Context context,IWrapper wrapper) throws Exception { 
    43         EncodingTest        test = (EncodingTest)wrapper; 
     42        EncodingTestWrapper        test = (EncodingTestWrapper)wrapper; 
    4443        ContextEncodingTest ctx  = context.getContextResourceManager().getResource(ContextEncodingTest.class); 
    4544        if (ctx.getText() != null) test.setText(ctx.getText()); 
  • branches/release-0.16.x/pustefix-samples/pustefix-sample1/src/main/java/de/schlund/pfixcore/example/iwrapper

    • Property svn:ignore
      •  

        old new  
        1 *.java 
         1 
  • branches/release-0.16.x/pustefix-samples/pustefix-sample1/src/main/webapp

  • branches/release-0.16.x/pustefix-samples/pustefix-sample1/src/main/webapp/WEB-INF

  • branches/release-0.16.x/pustefix-samples/pustefix-sample1/src/main/webapp/WEB-INF/config.conf.xml

    r5358 r5524  
    200200    <state class="de.schlund.pfixcore.example.EncodingTestState" /> 
    201201    <input> 
    202       <wrapper prefix="text" class="de.schlund.pfixcore.example.iwrapper.EncodingTest" /> 
     202      <wrapper prefix="text" class="de.schlund.pfixcore.example.iwrapper.EncodingTestWrapper" /> 
     203      <wrapper prefix="upload" class="de.schlund.pfixcore.example.iwrapper.EncodingTestUpload" /> 
    203204    </input> 
    204205    <output> 
  • branches/release-0.16.x/pustefix-samples/pustefix-sample1/src/main/webapp/WEB-INF/pfixlog.xml

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/release-0.16.x/pustefix-samples/pustefix-sample1/src/main/webapp/WEB-INF/project.xml

    r5517 r5524  
    101101     
    102102    <static> 
    103       <path>core/img</path> 
    104       <path>core/script</path> 
    105103      <path>img</path> 
    106       <path>modules/animal-module/img</path> 
    107104    </static> 
    108105     
  • branches/release-0.16.x/pustefix-samples/pustefix-sample1/src/main/webapp/WEB-INF/spring.xml

    r5108 r5524  
    3333    <property name="text" value="${testdata.defaulttext}"/> 
    3434  </bean> 
     35   
     36  <bean id="enctest_handler" class="de.schlund.pfixcore.example.EncodingTestHandler"/> 
    3537 
    3638</beans> 
  • branches/release-0.16.x/pustefix-samples/pustefix-sample1/src/main/webapp/WEB-INF/web.xml

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/release-0.16.x/pustefix-samples/pustefix-sample1/src/test

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/release-0.16.x/pustefix-samples/pustefix-sample1/src/test/java

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/release-0.16.x/pustefix-samples/pustefix-sample1/src/test/java/de/schlund/pfixcore/example/HomePageTest.java

    • Property svn:mergeinfo deleted
  • branches/release-0.16.x/pustefix-samples/pustefix-sample1/src/test/java/de/schlund/pfixcore/generator

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/release-0.16.x/pustefix-samples/pustefix-sample1/src/test/java/de/schlund/pfixcore/generator/iwrpgen/IWrapperBeanTest.java

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/release-0.16.x/pustefix-samples/pustefix-sample1/src/test/java/de/schlund/pfixxml/targets/TargetGeneratorTest.java

    • Property svn:mergeinfo deleted
  • branches/release-0.16.x/pustefix-samples/pustefix-samplebank

  • branches/release-0.16.x/pustefix-samples/pustefix-samplebank/src/main/java/de

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/release-0.16.x/pustefix-samples/pustefix-samplebank/src/main/java/de/schlund/pfixcore/example/bank

    • Property svn:mergeinfo deleted
  • branches/release-0.16.x/pustefix-samples/pustefix-samplebank/src/main/webapp

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/release-0.16.x/pustefix-samples/pustefix-samplebank/src/main/webapp/WEB-INF

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/release-0.16.x/pustefix-samples/pustefix-samplebank/src/main/webapp/WEB-INF/spring.xml

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/release-0.16.x/pustefix-samples/pustefix-samplebank/src/main/webapp/WEB-INF/web.xml

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/release-0.16.x/pustefix-samples/pustefix-samplebank/src/test

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/release-0.16.x/pustefix-samples/pustefix-testsuite

  • branches/release-0.16.x/pustefix-samples/pustefix-testsuite/src/main/java/de

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/release-0.16.x/pustefix-samples/pustefix-testsuite/src/main/java/de/schlund/pfixcore/testsuite

    • Property svn:mergeinfo deleted
  • branches/release-0.16.x/pustefix-samples/pustefix-testsuite/src/main/webapp

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/release-0.16.x/pustefix-samples/pustefix-testsuite/src/main/webapp/WEB-INF

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/release-0.16.x/pustefix-samples/pustefix-testsuite/src/main/webapp/WEB-INF/pfixlog.xml

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/release-0.16.x/pustefix-samples/pustefix-testsuite/src/main/webapp/WEB-INF/spring.xml

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/release-0.16.x/pustefix-samples/pustefix-testsuite/src/main/webapp/WEB-INF/web.xml

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/release-0.16.x/pustefix-samples/pustefix-webservice

  • branches/release-0.16.x/pustefix-samples/pustefix-webservice/src/main/java/de

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/release-0.16.x/pustefix-samples/pustefix-webservice/src/main/webapp

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/release-0.16.x/pustefix-samples/pustefix-webservice/src/main/webapp/WEB-INF

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/release-0.16.x/pustefix-samples/pustefix-webservice/src/main/webapp/WEB-INF/web.xml

    • Property svn:mergeinfo changed (with no actual effect on merging)
  • branches/release-0.16.x/pustefix-samples/sample-modules/animal-module/src/main/resources/META-INF/pustefix-module.xml

    r5390 r5524  
    66 
    77  <module-name>animal-module</module-name> 
     8   
     9  <static> 
     10    <path>img</path> 
     11  </static> 
    812 
    913</module-descriptor> 
  • branches/release-0.16.x/pustefix-samples/sample-modules/pom.xml

    r5419 r5524  
    3030        <version>0.16.0-SNAPSHOT</version> 
    3131        <configuration> 
    32           <module>${artifactId}</module> 
     32          <module>${project.artifactId}</module> 
    3333          <includes> 
    3434            <include>dyntxt/statuscodeinfo.xml</include> 
  • branches/release-0.16.x/pustefix-webservices/pustefix-webservices-core/pom.xml

    r5419 r5524  
    1616      <groupId>org.springframework</groupId> 
    1717      <artifactId>spring-context</artifactId> 
    18       <version>3.0.3.RELEASE</version> 
     18      <version>3.0.5.RELEASE</version> 
    1919    </dependency> 
    2020    <dependency> 
    2121      <groupId>org.springframework</groupId> 
    2222      <artifactId>spring-test</artifactId> 
    23       <version>3.0.3.RELEASE</version> 
     23      <version>3.0.5.RELEASE</version> 
    2424    </dependency> 
    2525    <dependency>