diff --git a/scm-core/src/main/java/sonia/scm/resources/Resource.java b/scm-core/src/main/java/sonia/scm/resources/Resource.java deleted file mode 100644 index 83b737453b..0000000000 --- a/scm-core/src/main/java/sonia/scm/resources/Resource.java +++ /dev/null @@ -1,76 +0,0 @@ -/** - * Copyright (c) 2010, Sebastian Sdorra - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of SCM-Manager; nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * http://bitbucket.org/sdorra/scm-manager - * - */ - - -package sonia.scm.resources; - -//~--- JDK imports ------------------------------------------------------------ - -import java.io.IOException; -import java.io.OutputStream; - -/** - * This class represents a web resource (Stylesheet or JavaScript file). - * - * @author Sebastian Sdorra - * @since 1.12 - */ -public interface Resource -{ - - /** - * Copies the content of the resource to the given {@link OutputStream}. - * - * - * @param output stream to copy the content of the resource - * - * @throws IOException - */ - public void copyTo(OutputStream output) throws IOException; - - //~--- get methods ---------------------------------------------------------- - - /** - * Returns the name of the resource. - * - * - * @return name of the resource - */ - public String getName(); - - /** - * Returns the type of the resource. - * - * - * @return type of resource - */ - public ResourceType getType(); -} diff --git a/scm-core/src/main/java/sonia/scm/resources/ResourceHandler.java b/scm-core/src/main/java/sonia/scm/resources/ResourceHandler.java deleted file mode 100644 index f48f0d71fd..0000000000 --- a/scm-core/src/main/java/sonia/scm/resources/ResourceHandler.java +++ /dev/null @@ -1,75 +0,0 @@ -/** - * Copyright (c) 2010, Sebastian Sdorra - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of SCM-Manager; nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * http://bitbucket.org/sdorra/scm-manager - * - */ - - - -package sonia.scm.resources; - -//~--- non-JDK imports -------------------------------------------------------- - -import sonia.scm.plugin.ExtensionPoint; - -//~--- JDK imports ------------------------------------------------------------ - -import java.net.URL; - -/** - * - * @author Sebastian Sdorra - */ -@ExtensionPoint -public interface ResourceHandler -{ - - /** - * Method description - * - * - * @return - */ - public String getName(); - - /** - * Method description - * - * - * @return - */ - public URL getResource(); - - /** - * Method description - * - * - * @return - */ - public ResourceType getType(); -} diff --git a/scm-core/src/main/java/sonia/scm/resources/ResourceHandlerComparator.java b/scm-core/src/main/java/sonia/scm/resources/ResourceHandlerComparator.java deleted file mode 100644 index c818eb6c73..0000000000 --- a/scm-core/src/main/java/sonia/scm/resources/ResourceHandlerComparator.java +++ /dev/null @@ -1,73 +0,0 @@ -/** - * Copyright (c) 2010, Sebastian Sdorra - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of SCM-Manager; nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * http://bitbucket.org/sdorra/scm-manager - * - */ - - - -package sonia.scm.resources; - -//~--- non-JDK imports -------------------------------------------------------- - -import sonia.scm.util.Util; - -//~--- JDK imports ------------------------------------------------------------ - -import java.io.Serializable; - -import java.util.Comparator; - -/** - * - * @author Sebastian Sdorra - */ -public class ResourceHandlerComparator - implements Comparator, Serializable -{ - - /** Field description */ - private static final long serialVersionUID = -1760229246326556762L; - - //~--- methods -------------------------------------------------------------- - - /** - * Method description - * - * - * @param handler - * @param otherHandler - * - * @return - */ - @Override - public int compare(ResourceHandler handler, ResourceHandler otherHandler) - { - return Util.compare(handler.getName(), otherHandler.getName()); - } -} diff --git a/scm-core/src/main/java/sonia/scm/resources/ResourceManager.java b/scm-core/src/main/java/sonia/scm/resources/ResourceManager.java deleted file mode 100644 index 8fa9187ad7..0000000000 --- a/scm-core/src/main/java/sonia/scm/resources/ResourceManager.java +++ /dev/null @@ -1,74 +0,0 @@ -/** - * Copyright (c) 2010, Sebastian Sdorra - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of SCM-Manager; nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * http://bitbucket.org/sdorra/scm-manager - * - */ - - -package sonia.scm.resources; - -//~--- JDK imports ------------------------------------------------------------ - -import java.util.List; - -/** - * This class collects and manages {@link Resource} - * which are used by the web interface. - * - * TODO remove before 2.0.0 - * - * @author Sebastian Sdorra - * @since 1.12 - * @deprecated unnecessary for new ui - */ -@Deprecated -public interface ResourceManager -{ - - /** - * Returns the resource with given name and type or - * null if no such resource exists. - * - * - * @param type type of the resource - * @param name name of the resource - * - * @return the resource with given name and type - */ - public Resource getResource(ResourceType type, String name); - - /** - * Returns the resources of the given type. - * - * - * @param type type of the resources to return - * - * @return resources of the given type - */ - public List getResources(ResourceType type); -} diff --git a/scm-core/src/main/java/sonia/scm/resources/ResourceNameComparator.java b/scm-core/src/main/java/sonia/scm/resources/ResourceNameComparator.java deleted file mode 100644 index 910e545db7..0000000000 --- a/scm-core/src/main/java/sonia/scm/resources/ResourceNameComparator.java +++ /dev/null @@ -1,79 +0,0 @@ -/** - * Copyright (c) 2010, Sebastian Sdorra - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of SCM-Manager; nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * http://bitbucket.org/sdorra/scm-manager - * - */ - - - -package sonia.scm.resources; - -//~--- non-JDK imports -------------------------------------------------------- - -import sonia.scm.util.Util; - -//~--- JDK imports ------------------------------------------------------------ - -import java.io.Serializable; - -import java.util.Comparator; - -/** - * Compare {@link Resource} objects by its name. - * - * @author Sebastian Sdorra - * @since 1.16 - */ -public class ResourceNameComparator - implements Comparator, Serializable -{ - - /** Field description */ - public static final ResourceNameComparator INSTANCE = - new ResourceNameComparator(); - - /** Field description */ - private static final long serialVersionUID = 3474356901608301437L; - - //~--- methods -------------------------------------------------------------- - - /** - * Method description - * - * - * @param resource - * @param otherResource - * - * @return - */ - @Override - public int compare(Resource resource, Resource otherResource) - { - return Util.compare(resource.getName(), otherResource.getName()); - } -} diff --git a/scm-core/src/main/java/sonia/scm/resources/ResourceType.java b/scm-core/src/main/java/sonia/scm/resources/ResourceType.java deleted file mode 100644 index faf3ac2a54..0000000000 --- a/scm-core/src/main/java/sonia/scm/resources/ResourceType.java +++ /dev/null @@ -1,102 +0,0 @@ -/** - * Copyright (c) 2010, Sebastian Sdorra - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of SCM-Manager; nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * http://bitbucket.org/sdorra/scm-manager - * - */ - - - -package sonia.scm.resources; - -/** - * This class represents the type of {@link Resource}. - * - * @author Sebastian Sdorra - */ -public enum ResourceType -{ - - /** - * Resource type for javascript resources - */ - SCRIPT("text/javascript", "js"), - - /** - * Resource type for stylesheet (css) resources - */ - STYLESHEET("text/css", "css"); - - /** - * Constructs a new resource type - * - * - * @param contentType content type of the resource type - * @param extension file extension of the resource type - */ - private ResourceType(String contentType, String extension) - { - this.contentType = contentType; - this.extension = extension; - } - - //~--- get methods ---------------------------------------------------------- - - /** - * Returns the content type of the resource type. - * - * - * @return content type of the resource type - * - * @since 1.12 - */ - public String getContentType() - { - return contentType; - } - - /** - * Returns the file extension of the resource type. - * - * - * @return file extension of the resource type - * - * @since 1.12 - */ - public String getExtension() - { - return extension; - } - - //~--- fields --------------------------------------------------------------- - - /** Field description */ - private final String contentType; - - /** Field description */ - private final String extension; -} diff --git a/scm-core/src/test/java/sonia/scm/resources/ResourceHandlerComparatorTest.java b/scm-core/src/test/java/sonia/scm/resources/ResourceHandlerComparatorTest.java deleted file mode 100644 index 2573a6ec08..0000000000 --- a/scm-core/src/test/java/sonia/scm/resources/ResourceHandlerComparatorTest.java +++ /dev/null @@ -1,141 +0,0 @@ -/** - * Copyright (c) 2010, Sebastian Sdorra - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of SCM-Manager; nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * http://bitbucket.org/sdorra/scm-manager - * - */ - - - -package sonia.scm.resources; - -//~--- non-JDK imports -------------------------------------------------------- - -import org.junit.Test; - -import static org.junit.Assert.*; - -//~--- JDK imports ------------------------------------------------------------ - -import java.net.URL; - -import java.util.Arrays; - -/** - * - * @author Sebastian Sdorra - */ -public class ResourceHandlerComparatorTest -{ - - /** - * Method description - * - */ - @Test - public void testCompare() - { - ResourceHandler[] handlers = new ResourceHandler[4]; - - handlers[0] = new DummyResourceHandler("xyz"); - handlers[1] = new DummyResourceHandler("abc"); - handlers[2] = new DummyResourceHandler(null); - handlers[3] = new DummyResourceHandler("mno"); - Arrays.sort(handlers, new ResourceHandlerComparator()); - assertEquals("abc", handlers[0].getName()); - assertEquals("mno", handlers[1].getName()); - assertEquals("xyz", handlers[2].getName()); - assertEquals(null, handlers[3].getName()); - } - - //~--- inner classes -------------------------------------------------------- - - /** - * Class description - * - * - * @version Enter version here..., 2011-01-18 - * @author Sebastian Sdorra - */ - private static class DummyResourceHandler implements ResourceHandler - { - - /** - * Constructs ... - * - * - * @param name - */ - public DummyResourceHandler(String name) - { - this.name = name; - } - - //~--- get methods -------------------------------------------------------- - - /** - * Method description - * - * - * @return - */ - @Override - public String getName() - { - return name; - } - - /** - * Method description - * - * - * @return - */ - @Override - public URL getResource() - { - throw new UnsupportedOperationException("Not supported yet."); - } - - /** - * Method description - * - * - * @return - */ - @Override - public ResourceType getType() - { - throw new UnsupportedOperationException("Not supported yet."); - } - - //~--- fields ------------------------------------------------------------- - - /** Field description */ - private String name; - } -} diff --git a/scm-plugins/scm-git-plugin/package.json b/scm-plugins/scm-git-plugin/package.json index c679f259c8..1be11b7e3b 100644 --- a/scm-plugins/scm-git-plugin/package.json +++ b/scm-plugins/scm-git-plugin/package.json @@ -8,6 +8,6 @@ "@scm-manager/ui-extensions": "^0.0.6" }, "devDependencies": { - "@scm-manager/ui-bundler": "^0.0.3" + "@scm-manager/ui-bundler": "^0.0.4" } } diff --git a/scm-plugins/scm-git-plugin/src/main/resources/META-INF/scm/plugin.xml b/scm-plugins/scm-git-plugin/src/main/resources/META-INF/scm/plugin.xml index bc3689618d..ff699441a8 100644 --- a/scm-plugins/scm-git-plugin/src/main/resources/META-INF/scm/plugin.xml +++ b/scm-plugins/scm-git-plugin/src/main/resources/META-INF/scm/plugin.xml @@ -59,9 +59,5 @@ ${project.parent.version} - - - - diff --git a/scm-plugins/scm-git-plugin/src/main/resources/sonia/scm/git.config.js b/scm-plugins/scm-git-plugin/src/main/resources/sonia/scm/git.config.js deleted file mode 100644 index 45d347aa88..0000000000 --- a/scm-plugins/scm-git-plugin/src/main/resources/sonia/scm/git.config.js +++ /dev/null @@ -1,232 +0,0 @@ -/* - * Copyright (c) 2010, Sebastian Sdorra - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of SCM-Manager; nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * http://bitbucket.org/sdorra/scm-manager - * - */ - -Ext.ns("Sonia.git"); - -Sonia.git.ConfigPanel = Ext.extend(Sonia.config.SimpleConfigForm, { - - // labels - titleText: 'Git Settings', - repositoryDirectoryText: 'Repository directory', - gcExpressionText: 'Git GC Cron Expression', - disabledText: 'Disabled', - - // helpTexts - repositoryDirectoryHelpText: 'Location of the Git repositories.', - // TODO i18n - gcExpressionHelpText: '

Use Quartz Cron Expressions (SECOND MINUTE HOUR DAYOFMONTH MONTH DAYOFWEEK) to run git gc in intervals.

\n\ - \n\ - \n\ - \n\ - \n\ - \n\ - \n\ - \n\ -
SECONDSeconds within the minute (0–59)
MINUTEMinutes within the hour (0–59)
HOURThe hour of the day (0–23)
DAYOFMONTHThe day of the month (1–31)
MONTHThe month (1–12)
DAYOFWEEKThe day of the week (MON, TUE, WED, THU, FRI, SAT, SUN)
\n\ -

E.g.: To run the task on every sunday at two o\'clock in the morning: 0 0 2 ? * SUN

\n\ -

For more informations please have a look at Quartz CronTrigger

', - disabledHelpText: 'Enable or disable the Git plugin.\n\ - Note you have to reload the page, after changing this value.', - - initComponent: function(){ - - var config = { - title : this.titleText, - configUrl: restUrl + 'config/repositories/git', - items : [{ - xtype: 'textfield', - name: 'repositoryDirectory', - fieldLabel: this.repositoryDirectoryText, - helpText: this.repositoryDirectoryHelpText, - allowBlank : false - },{ - xtype: 'textfield', - name: 'gc-expression', - fieldLabel: this.gcExpressionText, - helpText: this.gcExpressionHelpText, - allowBlank : true - },{ - xtype: 'checkbox', - name: 'disabled', - fieldLabel: this.disabledText, - inputValue: 'true', - helpText: this.disabledHelpText - }] - }; - - Ext.apply(this, Ext.apply(this.initialConfig, config)); - Sonia.git.ConfigPanel.superclass.initComponent.apply(this, arguments); - } - -}); - -Ext.reg("gitConfigPanel", Sonia.git.ConfigPanel); - -// add default branch chooser to settings panel -Sonia.git.GitSettingsFormPanel = Ext.extend(Sonia.repository.SettingsFormPanel, { - - defaultBranchText: 'Default Branch', - defaultBranchHelpText: 'The default branch which is show first on source or commit view.', - - modifyDefaultConfig: function(config){ - if (this.item) { - var position = -1; - for ( var i=0; i= 0) { - config.items.splice(position, 0, defaultBranchComboxBox); - } else { - config.items.push(defaultBranchComboxBox); - } - } - }, - - getDefaultBranch: function(item){ - if (item.properties) { - for ( var i=0; i{0}', - xtype: 'repositoryExtendedInfoPanel' - }); - main.registerSettingsForm('git', { - xtype: 'gitSettingsForm' - }); -}); - -// register panel - -registerConfigPanel({ - xtype : 'gitConfigPanel' -}); - -// register type icon - -Sonia.repository.typeIcons['git'] = 'resources/images/icons/16x16/git.png'; diff --git a/scm-plugins/scm-git-plugin/yarn.lock b/scm-plugins/scm-git-plugin/yarn.lock index 7c78c61b03..cc31e7d80d 100644 --- a/scm-plugins/scm-git-plugin/yarn.lock +++ b/scm-plugins/scm-git-plugin/yarn.lock @@ -606,9 +606,9 @@ lodash "^4.17.10" to-fast-properties "^2.0.0" -"@scm-manager/ui-bundler@^0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@scm-manager/ui-bundler/-/ui-bundler-0.0.3.tgz#06f99d8b17e9aa1bb6e69c2732160e1f46724c3c" +"@scm-manager/ui-bundler@^0.0.4": + version "0.0.4" + resolved "https://registry.yarnpkg.com/@scm-manager/ui-bundler/-/ui-bundler-0.0.4.tgz#0191a026d25b826692bccbc2b76d550388dd5528" dependencies: "@babel/core" "^7.0.0-rc.2" "@babel/plugin-proposal-class-properties" "^7.0.0-rc.2" @@ -623,6 +623,7 @@ budo "^11.3.2" colors "^1.3.1" commander "^2.17.1" + fast-xml-parser "^3.12.0" jest "^23.5.0" jest-junit "^5.1.0" node-mkdirs "^0.0.1" @@ -2134,6 +2135,12 @@ fast-levenshtein@~2.0.4: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" +fast-xml-parser@^3.12.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-3.12.0.tgz#84ddcd98ca005f94e99af3ac387adc32ffb239d8" + dependencies: + nimnjs "^1.3.2" + fb-watchman@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" @@ -3764,6 +3771,21 @@ nice-try@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.4.tgz#d93962f6c52f2c1558c0fbda6d512819f1efe1c4" +nimn-date-parser@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/nimn-date-parser/-/nimn-date-parser-1.0.0.tgz#4ce55d1fd5ea206bbe82b76276f7b7c582139351" + +nimn_schema_builder@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/nimn_schema_builder/-/nimn_schema_builder-1.1.0.tgz#b370ccf5b647d66e50b2dcfb20d0aa12468cd247" + +nimnjs@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/nimnjs/-/nimnjs-1.3.2.tgz#a6a877968d87fad836375a4f616525e55079a5ba" + dependencies: + nimn-date-parser "^1.0.0" + nimn_schema_builder "^1.0.0" + node-fetch@^1.0.1: version "1.7.3" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" diff --git a/scm-plugins/scm-hg-plugin/package.json b/scm-plugins/scm-hg-plugin/package.json index ff7e9ab6b3..79ce34010f 100644 --- a/scm-plugins/scm-hg-plugin/package.json +++ b/scm-plugins/scm-hg-plugin/package.json @@ -8,6 +8,6 @@ "@scm-manager/ui-extensions": "^0.0.6" }, "devDependencies": { - "@scm-manager/ui-bundler": "^0.0.3" + "@scm-manager/ui-bundler": "^0.0.4" } } diff --git a/scm-plugins/scm-hg-plugin/src/main/resources/META-INF/scm/plugin.xml b/scm-plugins/scm-hg-plugin/src/main/resources/META-INF/scm/plugin.xml index 22dd3dbdb5..1d0b05c4a8 100644 --- a/scm-plugins/scm-hg-plugin/src/main/resources/META-INF/scm/plugin.xml +++ b/scm-plugins/scm-hg-plugin/src/main/resources/META-INF/scm/plugin.xml @@ -29,7 +29,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. http://bitbucket.org/sdorra/scm-manager - +jo --> @@ -42,7 +42,7 @@ --> - + 2 @@ -61,9 +61,4 @@ ${project.parent.version} - - - - - diff --git a/scm-plugins/scm-hg-plugin/src/main/resources/sonia/scm/hg.config-wizard.js b/scm-plugins/scm-hg-plugin/src/main/resources/sonia/scm/hg.config-wizard.js deleted file mode 100644 index 9a42c5eb1d..0000000000 --- a/scm-plugins/scm-hg-plugin/src/main/resources/sonia/scm/hg.config-wizard.js +++ /dev/null @@ -1,449 +0,0 @@ -/* - * Copyright (c) 2010, Sebastian Sdorra - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of SCM-Manager; nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * http://bitbucket.org/sdorra/scm-manager - * - */ - -Ext.ns("Sonia.hg"); - -Sonia.hg.ConfigWizard = Ext.extend(Ext.Window,{ - - hgConfig: null, - title: 'Mercurial Configuration Wizard', - - initComponent: function(){ - - this.addEvents('finish'); - - var config = { - title: this.title, - layout: 'fit', - width: 420, - height: 140, - closable: true, - resizable: true, - plain: true, - border: false, - modal: true, - bodyCssClass: 'x-panel-mc', - items: [{ - id: 'hgConfigWizardPanel', - xtype: 'hgConfigWizardPanel', - hgConfig: this.hgConfig, - listeners: { - finish: { - fn: this.onFinish, - scope: this - } - } - }] - }; - - Ext.apply(this, Ext.apply(this.initialConfig, config)); - Sonia.hg.ConfigWizard.superclass.initComponent.apply(this, arguments); - }, - - onFinish: function(config){ - this.fireEvent('finish', config); - this.close(); - } - -}); - -Sonia.hg.InstallationJsonReader = function(){ - this.RecordType = Ext.data.Record.create([{ - name: "path", - mapping: "path", - type: "string" - }]); -}; - -Ext.extend(Sonia.hg.InstallationJsonReader, Ext.data.JsonReader, { - - readRecords: function(o){ - this.jsonData = o; - - if (debug){ - console.debug('read installation data from json'); - console.debug(o); - } - - var records = []; - var paths = o.path; - for ( var i=0; i
\ - {id} (hg: {hg-version}, py: {python-version}, size: {size:fileSize})\ -
', - - // text - backText: 'Back', - nextText: 'Next', - finishText: 'Finish', - configureLocalText: 'Configure local installation', - configureRemoteText: 'Download and install', - loadingText: 'Loading ...', - hgInstallationText: 'Mercurial Installation', - pythonInstallationText: 'Python Installation', - hgPackageText: 'Mercurial Package', - errorTitleText: 'Error', - packageInstallationFailedText: 'Package installation failed', - installPackageText: 'install mercurial package {0}', - - initComponent: function(){ - this.addEvents('finish'); - - var packageStore = new Ext.data.JsonStore({ - storeId: 'pkgStore', - proxy: new Ext.data.HttpProxy({ - url: restUrl + 'config/repositories/hg/packages', - disableCaching: false - }), - fields: [ 'id', 'hg-version', 'python-version', 'size' ], - root: 'package', - listeners: { - load: { - fn: this.checkIfPackageAvailable, - scope: this - } - } - }); - - var hgInstallationStore = new Ext.data.Store({ - proxy: new Ext.data.HttpProxy({ - url: restUrl + 'config/repositories/hg/installations/hg' - }), - fields: [ 'path' ], - reader: new Sonia.hg.InstallationJsonReader(), - autoLoad: true, - autoDestroy: true - }); - - var pythonInstallationStore = new Ext.data.Store({ - proxy: new Ext.data.HttpProxy({ - url: restUrl + 'config/repositories/hg/installations/python' - }), - fields: [ 'path' ], - reader: new Sonia.hg.InstallationJsonReader(), - autoLoad: true, - autoDestroy: true - }); - - var config = { - layout: 'card', - activeItem: 0, - bodyStyle: 'padding: 5px', - defaults: { - bodyCssClass: 'x-panel-mc', - border: false, - labelWidth: 120, - width: 250 - }, - bbar: ['->',{ - id: 'move-prev', - text: this.backText, - handler: this.navHandler.createDelegate(this, [-1]), - disabled: true, - scope: this - },{ - id: 'move-next', - text: this.nextText, - handler: this.navHandler.createDelegate(this, [1]), - scope: this - },{ - id: 'finish', - text: this.finishText, - handler: this.applyChanges, - scope: this, - disabled: true - }], - items: [{ - id: 'cod', - items: [{ - id: 'configureOrDownload', - xtype: 'radiogroup', - name: 'configureOrDownload', - columns: 1, - items: [{ - boxLabel: this.configureLocalText, - name: 'cod', - inputValue: 'localInstall', - checked: true - },{ - id: 'remoteInstallRadio', - boxLabel: this.configureRemoteText, - name: 'cod', - inputValue: 'remoteInstall', - disabled: true - }] - }], - listeners: { - render: { - fn: function(panel){ - panel.body.mask(this.loadingText); - var store = Ext.StoreMgr.lookup('pkgStore'); - store.load.defer(100, store); - }, - scope: this - } - } - },{ - id: 'localInstall', - layout: 'form', - defaults: { - width: 250 - }, - items: [{ - id: 'mercurial', - fieldLabel: this.hgInstallationText, - name: 'mercurial', - xtype: 'combo', - readOnly: false, - triggerAction: 'all', - lazyRender: true, - mode: 'local', - editable: true, - store: hgInstallationStore, - valueField: 'path', - displayField: 'path', - allowBlank: false, - value: this.hgConfig.hgBinary - },{ - id: 'python', - fieldLabel: this.pythonInstallationText, - name: 'python', - xtype: 'combo', - readOnly: false, - triggerAction: 'all', - lazyRender: true, - mode: 'local', - editable: true, - store: pythonInstallationStore, - valueField: 'path', - displayField: 'path', - allowBlank: false, - value: this.hgConfig.pythonBinary - }] - },{ - id: 'remoteInstall', - layout: 'form', - defaults: { - width: 250 - }, - items: [{ - id: 'package', - fieldLabel: this.hgPackageText, - name: 'package', - xtype: 'combo', - readOnly: false, - triggerAction: 'all', - lazyRender: true, - mode: 'local', - editable: false, - store: packageStore, - valueField: 'id', - displayField: 'id', - allowBlank: false, - tpl: this.packageTemplate, - listeners: { - select: function(){ - Ext.getCmp('finish').setDisabled(false); - } - } - }] - }] - }; - - Ext.apply(this, Ext.apply(this.initialConfig, config)); - Sonia.hg.ConfigWizardPanel.superclass.initComponent.apply(this, arguments); - }, - - checkIfPackageAvailable: function(store){ - Ext.getCmp('cod').body.unmask(); - var c = store.getTotalCount(); - if ( debug ){ - console.debug( "found " + c + " package(s)" ); - } - if ( c > 0 ){ - Ext.getCmp('remoteInstallRadio').setDisabled(false); - } - }, - - navHandler: function(direction){ - var layout = this.getLayout(); - var id = layout.activeItem.id; - - var next = -1; - - if ( id === 'cod' && direction === 1 ){ - var v = Ext.getCmp('configureOrDownload').getValue().getRawValue(); - var df = false; - if ( v === 'localInstall' ){ - next = 1; - } else if ( v === 'remoteInstall' ){ - next = 2; - df = true; - } - Ext.getCmp('move-prev').setDisabled(false); - Ext.getCmp('move-next').setDisabled(true); - Ext.getCmp('finish').setDisabled(df); - } - else if (direction === -1 && (id === 'localInstall' || id === 'remoteInstall')) { - next = 0; - Ext.getCmp('move-prev').setDisabled(true); - Ext.getCmp('move-next').setDisabled(false); - Ext.getCmp('finish').setDisabled(true); - } - - if ( next >= 0 ){ - layout.setActiveItem(next); - } - }, - - applyChanges: function(){ - var v = Ext.getCmp('configureOrDownload').getValue().getRawValue(); - if ( v === 'localInstall' ){ - this.applyLocalConfiguration(); - } else if ( v === 'remoteInstall' ){ - this.applyRemoteConfiguration(); - } - }, - - applyRemoteConfiguration: function(){ - if ( debug ){ - console.debug( "apply remote configuration" ); - } - - var pkg = Ext.getCmp('package').getValue(); - if ( debug ){ - console.debug( 'install mercurial package ' + pkg ); - } - - var lbox = Ext.MessageBox.show({ - title: this.loadingText, - msg: String.format(this.installPackageText, pkg), - width: 300, - wait: true, - animate: true, - progress: true, - closable: false - }); - - Ext.Ajax.request({ - url: restUrl + 'config/repositories/hg/packages/' + pkg, - method: 'POST', - scope: this, - timeout: 900000, // 15min - success: function(){ - if ( debug ){ - console.debug('package successfully installed'); - } - lbox.hide(); - this.fireEvent('finish'); - }, - failure: function(){ - if ( debug ){ - console.debug('package installation failed'); - } - lbox.hide(); - Ext.MessageBox.show({ - title: this.errorTitleText, - msg: this.packageInstallationFailedText, - buttons: Ext.MessageBox.OK, - icon:Ext.MessageBox.ERROR - }); - } - }); - - - }, - - applyLocalConfiguration: function(){ - if ( debug ){ - console.debug( "apply remote configuration" ); - } - var mercurial = Ext.getCmp('mercurial').getValue(); - var python = Ext.getCmp('python').getValue(); - if (debug){ - console.debug( 'configure mercurial=' + mercurial + " and python=" + python ); - } - delete this.hgConfig.pythonPath; - delete this.hgConfig.useOptimizedBytecode; - this.hgConfig.hgBinary = mercurial; - this.hgConfig.pythonBinary = python; - - if ( debug ){ - console.debug( this.hgConfig ); - } - - this.fireEvent('finish', this.hgConfig); - } - -}); - -// register xtype -Ext.reg('hgConfigWizardPanel', Sonia.hg.ConfigWizardPanel); - - -// i18n - -if ( i18n && i18n.country === 'de' ){ - - Ext.override(Sonia.hg.ConfigWizardPanel, { - - backText: 'Zurück', - nextText: 'Weiter', - finishText: 'Fertigstellen', - configureLocalText: 'Eine lokale Installation Konfigurieren', - configureRemoteText: 'Herunterladen und installieren', - loadingText: 'Lade ...', - hgInstallationText: 'Mercurial Installation', - pythonInstallationText: 'Python Installation', - hgPackageText: 'Mercurial Package', - errorTitleText: 'Fehler', - packageInstallationFailedText: 'Package Installation fehlgeschlagen', - installPackageText: 'Installiere Mercurial-Package {0}' - - }); - -} \ No newline at end of file diff --git a/scm-plugins/scm-hg-plugin/src/main/resources/sonia/scm/hg.config.js b/scm-plugins/scm-hg-plugin/src/main/resources/sonia/scm/hg.config.js deleted file mode 100644 index 3fe5202a10..0000000000 --- a/scm-plugins/scm-hg-plugin/src/main/resources/sonia/scm/hg.config.js +++ /dev/null @@ -1,287 +0,0 @@ -/* - * Copyright (c) 2010, Sebastian Sdorra - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of SCM-Manager; nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * http://bitbucket.org/sdorra/scm-manager - * - */ - - -Ext.ns("Sonia.hg"); - -Sonia.hg.ConfigPanel = Ext.extend(Sonia.config.ConfigForm, { - - // labels - titleText: 'Mercurial Settings', - hgBinaryText: 'HG Binary', - pythonBinaryText: 'Python Binary', - pythonPathText: 'Python Module Search Path', - repositoryDirectoryText: 'Repository directory', - useOptimizedBytecodeText: 'Optimized Bytecode (.pyo)', - configWizardText: 'Start Configuration Wizard', - configWizardLabelText: 'Start Configuration Wizard', - encodingText: 'Encoding', - disabledText: 'Disabled', - showRevisionInIdText: 'Show Revision', - - // helpText - hgBinaryHelpText: 'Location of Mercurial binary.', - pythonBinaryHelpText: 'Location of Python binary.', - pythonPathHelpText: 'Python Module Search Path (PYTHONPATH).', - repositoryDirectoryHelpText: 'Location of the Mercurial repositories.', - useOptimizedBytecodeHelpText: 'Use the Python "-O" switch.', - encodingHelpText: 'Repository Encoding.', - disabledHelpText: 'Enable or disable the Mercurial plugin. \n\ - Note you have to reload the page, after changing this value.', - showRevisionInIdHelpText: 'Show revision as part of the node id. Note: \n\ - You have to restart the ApplicationServer to affect cached changesets.', - - initComponent: function(){ - - var config = { - title : this.titleText, - items : [{ - xtype : 'textfield', - fieldLabel : this.hgBinaryText, - name : 'hgBinary', - allowBlank : false, - helpText: this.hgBinaryHelpText - },{ - xtype : 'textfield', - fieldLabel : this.pythonBinaryText, - name : 'pythonBinary', - allowBlank : false, - helpText: this.pythonBinaryHelpText - },{ - xtype : 'textfield', - fieldLabel : this.pythonPathText, - name : 'pythonPath', - helpText: this.pythonPathHelpText - },{ - xtype: 'textfield', - name: 'repositoryDirectory', - fieldLabel: this.repositoryDirectoryText, - helpText: this.repositoryDirectoryHelpText, - allowBlank : false - },{ - xtype: 'textfield', - name: 'encoding', - fieldLabel: this.encodingText, - helpText: this.encodingHelpText, - allowBlank : false - },{ - xtype: 'checkbox', - name: 'useOptimizedBytecode', - fieldLabel: this.useOptimizedBytecodeText, - inputValue: 'true', - helpText: this.useOptimizedBytecodeHelpText - },{ - xtype: 'checkbox', - name: 'showRevisionInId', - fieldLabel: this.showRevisionInIdText, - inputValue: 'true', - helpText: this.showRevisionInIdHelpText - },{ - xtype: 'checkbox', - name: 'disabled', - fieldLabel: this.disabledText, - inputValue: 'true', - helpText: this.disabledHelpText - },{ - xtype: 'button', - text: this.configWizardText, - fieldLabel: this.configWizardLabelText, - handler: function(){ - var config = this.getForm().getValues(); - var wizard = new Sonia.hg.ConfigWizard({ - hgConfig: config - }); - wizard.on('finish', function(config){ - var self = Ext.getCmp('hgConfigForm'); - if ( config ){ - if (debug){ - console.debug( 'load config from wizard and submit to server' ); - } - self.loadConfig( self.el, 'config/repositories/hg/auto-configuration', 'POST', config ); - } else { - if (debug){ - console.debug( 'reload config' ); - } - self.onLoad(self.el); - } - }, this); - wizard.show(); - }, - scope: this - }] - }; - - Ext.apply(this, Ext.apply(this.initialConfig, config)); - Sonia.hg.ConfigPanel.superclass.initComponent.apply(this, arguments); - }, - - onSubmit: function(values){ - this.el.mask(this.submitText); - Ext.Ajax.request({ - url: restUrl + 'config/repositories/hg', - method: 'POST', - jsonData: values, - scope: this, - disableCaching: true, - success: function(){ - this.el.unmask(); - }, - failure: function(){ - this.el.unmask(); - alert('failure'); - } - }); - }, - - onLoad: function(el){ - this.loadConfig(el, 'config/repositories/hg', 'GET'); - }, - - loadConfig: function(el, url, method, config){ - var tid = setTimeout( function(){ el.mask(this.loadingText); }, 100); - Ext.Ajax.request({ - url: restUrl + url, - method: method, - jsonData: config, - scope: this, - disableCaching: true, - success: function(response){ - var obj = Ext.decode(response.responseText); - this.load(obj); - clearTimeout(tid); - el.unmask(); - }, - failure: function(){ - el.unmask(); - clearTimeout(tid); - alert('failure'); - } - }); - } - -}); - -Ext.reg("hgConfigPanel", Sonia.hg.ConfigPanel); - -// i18n - -if ( i18n && i18n.country === 'de' ){ - - Ext.override(Sonia.hg.ConfigPanel, { - - // labels - titleText: 'Mercurial Einstellungen', - hgBinaryText: 'HG Pfad', - pythonBinaryText: 'Python Pfad', - pythonPathText: 'Python Modul Suchpfad', - repositoryDirectoryText: 'Repository-Verzeichnis', - useOptimizedBytecodeText: 'Optimierter Bytecode (.pyo)', - autoConfigText: 'Einstellungen automatisch laden', - autoConfigLabelText: 'Automatische Einstellung', - configWizardText: 'Konfigurations-Assistenten starten', - configWizardLabelText: 'Konfigurations-Assistent', - disabledText: 'Deaktivieren', - showRevisionInIdText: 'Zeige Revision an', - - // helpText - hgBinaryHelpText: 'Pfad zum "hg" Befehl.', - pythonBinaryHelpText: 'Pfad zum "python" Befehl.', - pythonPathHelpText: 'Python Modul Suchpfad (PYTHONPATH).', - repositoryDirectoryHelpText: 'Verzeichnis der Mercurial-Repositories.', - useOptimizedBytecodeHelpText: 'Optimierten Bytecode verwenden (python -O).', - disabledHelpText: 'Aktivieren oder deaktivieren des Mercurial Plugins.\n\ - Die Seite muss neu geladen werden wenn dieser Wert geändert wird.', - showRevisionInIdHelpText: 'Zeige die Revision als teil der NodeId an. \n\ - Der ApplicationServer muss neugestartet werden um zwischengespeicherte\n\ - Changesets zuändern.' - }); - -} - -// register information panel - -initCallbacks.push(function(main){ - main.registerInfoPanel('hg', { - checkoutTemplate: 'hg clone {0}', - xtype: 'repositoryExtendedInfoPanel' - }); -}); - -// register config panel - -registerConfigPanel({ - id: 'hgConfigForm', - xtype : 'hgConfigPanel' -}); - -// register type icon - -Sonia.repository.typeIcons['hg'] = 'resources/images/icons/16x16/mercurial.png'; - -// override ChangesetViewerGrid to render changeset id's with revisions - -Ext.override(Sonia.repository.ChangesetViewerGrid, { - - isMercurialRepository: function(){ - return this.repository.type === 'hg'; - }, - - getChangesetId: function(id, record){ - if ( this.isMercurialRepository() ){ - var rev = Sonia.util.getProperty(record.get('properties'), 'hg.rev'); - if ( rev ){ - id = rev + ':' + id; - } - } - return id; - }, - - getParentIds: function(id, record){ - var parents = record.get('parents'); - if ( this.isMercurialRepository() ){ - if ( parents && parents.length > 0 ){ - var properties = record.get('properties'); - var rev = Sonia.util.getProperty(properties, 'hg.p1.rev'); - if (rev){ - parents[0] = rev + ':' + parents[0]; - } - if ( parents.length > 1 ){ - rev = Sonia.util.getProperty(properties, 'hg.p2.rev'); - if (rev){ - parents[1] = rev + ':' + parents[1]; - } - } - } - } - return parents; - } - -}); \ No newline at end of file diff --git a/scm-plugins/scm-hg-plugin/yarn.lock b/scm-plugins/scm-hg-plugin/yarn.lock index 7c4ef63c1e..07c1653563 100644 --- a/scm-plugins/scm-hg-plugin/yarn.lock +++ b/scm-plugins/scm-hg-plugin/yarn.lock @@ -606,9 +606,9 @@ lodash "^4.17.10" to-fast-properties "^2.0.0" -"@scm-manager/ui-bundler@^0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@scm-manager/ui-bundler/-/ui-bundler-0.0.3.tgz#06f99d8b17e9aa1bb6e69c2732160e1f46724c3c" +"@scm-manager/ui-bundler@^0.0.4": + version "0.0.4" + resolved "https://registry.yarnpkg.com/@scm-manager/ui-bundler/-/ui-bundler-0.0.4.tgz#0191a026d25b826692bccbc2b76d550388dd5528" dependencies: "@babel/core" "^7.0.0-rc.2" "@babel/plugin-proposal-class-properties" "^7.0.0-rc.2" @@ -623,6 +623,7 @@ budo "^11.3.2" colors "^1.3.1" commander "^2.17.1" + fast-xml-parser "^3.12.0" jest "^23.5.0" jest-junit "^5.1.0" node-mkdirs "^0.0.1" @@ -2130,6 +2131,12 @@ fast-levenshtein@~2.0.4: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" +fast-xml-parser@^3.12.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-3.12.0.tgz#84ddcd98ca005f94e99af3ac387adc32ffb239d8" + dependencies: + nimnjs "^1.3.2" + fb-watchman@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" @@ -3760,6 +3767,21 @@ nice-try@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.4.tgz#d93962f6c52f2c1558c0fbda6d512819f1efe1c4" +nimn-date-parser@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/nimn-date-parser/-/nimn-date-parser-1.0.0.tgz#4ce55d1fd5ea206bbe82b76276f7b7c582139351" + +nimn_schema_builder@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/nimn_schema_builder/-/nimn_schema_builder-1.1.0.tgz#b370ccf5b647d66e50b2dcfb20d0aa12468cd247" + +nimnjs@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/nimnjs/-/nimnjs-1.3.2.tgz#a6a877968d87fad836375a4f616525e55079a5ba" + dependencies: + nimn-date-parser "^1.0.0" + nimn_schema_builder "^1.0.0" + node-fetch@^1.0.1: version "1.7.3" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" diff --git a/scm-plugins/scm-svn-plugin/package.json b/scm-plugins/scm-svn-plugin/package.json index 195897cbbe..c073279b97 100644 --- a/scm-plugins/scm-svn-plugin/package.json +++ b/scm-plugins/scm-svn-plugin/package.json @@ -8,6 +8,6 @@ "@scm-manager/ui-extensions": "^0.0.6" }, "devDependencies": { - "@scm-manager/ui-bundler": "^0.0.3" + "@scm-manager/ui-bundler": "^0.0.4" } } diff --git a/scm-plugins/scm-svn-plugin/src/main/resources/META-INF/scm/plugin.xml b/scm-plugins/scm-svn-plugin/src/main/resources/META-INF/scm/plugin.xml index 86b4f4f843..302abd2b10 100644 --- a/scm-plugins/scm-svn-plugin/src/main/resources/META-INF/scm/plugin.xml +++ b/scm-plugins/scm-svn-plugin/src/main/resources/META-INF/scm/plugin.xml @@ -59,9 +59,5 @@ ${project.parent.version} - - - - - \ No newline at end of file + diff --git a/scm-plugins/scm-svn-plugin/src/main/resources/sonia/scm/svn.config.js b/scm-plugins/scm-svn-plugin/src/main/resources/sonia/scm/svn.config.js deleted file mode 100644 index e379ed38f6..0000000000 --- a/scm-plugins/scm-svn-plugin/src/main/resources/sonia/scm/svn.config.js +++ /dev/null @@ -1,159 +0,0 @@ -/* - * Copyright (c) 2010, Sebastian Sdorra - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of SCM-Manager; nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * http://bitbucket.org/sdorra/scm-manager - * - */ - -Ext.ns("Sonia.svn"); - -Sonia.svn.ConfigPanel = Ext.extend(Sonia.config.SimpleConfigForm, { - - // labels - titleText: 'Subversion Settings', - repositoryDirectoryText: 'Repository directory', - noneCompatibility: 'No compatibility modus', - pre14CompatibleText: 'Pre 1.4 Compatible', - pre15CompatibleText: 'Pre 1.5 Compatible', - pre16CompatibleText: 'Pre 1.6 Compatible', - pre17CompatibleText: 'Pre 1.7 Compatible', - with17CompatibleText: 'With 1.7 Compatible', - enableGZipText: 'Enable GZip Encoding', - disabledText: 'Disabled', - - // helpTexts - repositoryDirectoryHelpText: 'Location of the Suberversion repositories.', - disabledHelpText: 'Enable or disable the Subversion plugin.\n\ - Note you have to reload the page, after changing this value.', - enableGZipHelpText: 'Enable GZip encoding for svn responses.', - - initComponent: function(){ - - var config = { - title : this.titleText, - configUrl: restUrl + 'config/repositories/svn', - items : [{ - xtype: 'textfield', - name: 'repositoryDirectory', - fieldLabel: this.repositoryDirectoryText, - helpText: this.repositoryDirectoryHelpText, - allowBlank : false - },{ - xtype: 'radiogroup', - name: 'compatibility', - columns: 1, - items: [{ - boxLabel: this.noneCompatibility, - inputValue: 'NONE', - name: 'compatibility' - },{ - boxLabel: this.pre14CompatibleText, - inputValue: 'PRE14', - name: 'compatibility' - },{ - boxLabel: this.pre15CompatibleText, - inputValue: 'PRE15', - name: 'compatibility' - },{ - boxLabel: this.pre16CompatibleText, - inputValue: 'PRE16', - name: 'compatibility' - },{ - boxLabel: this.pre17CompatibleText, - inputValue: 'PRE17', - name: 'compatibility' - },{ - boxLabel: this.with17CompatibleText, - inputValue: 'WITH17', - name: 'compatibility' - }] - },{ - xtype: 'checkbox', - name: 'enable-gzip', - fieldLabel: this.enableGZipText, - inputValue: 'true', - helpText: this.enableGZipHelpText - },{ - xtype: 'checkbox', - name: 'disabled', - fieldLabel: this.disabledText, - inputValue: 'true', - helpText: this.disabledHelpText - }] - }; - - Ext.apply(this, Ext.apply(this.initialConfig, config)); - Sonia.svn.ConfigPanel.superclass.initComponent.apply(this, arguments); - } - -}); - -Ext.reg("svnConfigPanel", Sonia.svn.ConfigPanel); - -// i18n - -if ( i18n && i18n.country === 'de' ){ - - Ext.override(Sonia.svn.ConfigPanel, { - - // labels - titleText: 'Subversion Einstellungen', - repositoryDirectoryText: 'Repository-Verzeichnis', - noneCompatibility: 'Kein Kompatiblitätsmodus', - pre14CompatibleText: 'Mit Versionen vor 1.4 kompatibel', - pre15CompatibleText: 'Mit Versionen vor 1.5 kompatibel', - pre16CompatibleText: 'Mit Versionen vor 1.6 kompatibel', - pre17CompatibleText: 'Mit Versionen vor 1.7 kompatibel', - with17CompatibleText: 'Mit Version 1.7 kompatibel', - disabledText: 'Deaktivieren', - - // helpTexts - repositoryDirectoryHelpText: 'Verzeichnis der Subversion-Repositories.', - disabledHelpText: 'Aktivieren oder deaktivieren des Subversion Plugins.\n\ - Die Seite muss neu geladen werden wenn dieser Wert geändert wird.' - }); - -} - -// register information panel - -initCallbacks.push(function(main){ - main.registerInfoPanel('svn', { - checkoutTemplate: 'svn checkout {0}', - xtype: 'repositoryExtendedInfoPanel' - }); -}); - -// register panel - -registerConfigPanel({ - xtype : 'svnConfigPanel' -}); - -// register type icon - -Sonia.repository.typeIcons['svn'] = 'resources/images/icons/16x16/subversion.png'; diff --git a/scm-plugins/scm-svn-plugin/yarn.lock b/scm-plugins/scm-svn-plugin/yarn.lock index 7c4ef63c1e..07c1653563 100644 --- a/scm-plugins/scm-svn-plugin/yarn.lock +++ b/scm-plugins/scm-svn-plugin/yarn.lock @@ -606,9 +606,9 @@ lodash "^4.17.10" to-fast-properties "^2.0.0" -"@scm-manager/ui-bundler@^0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@scm-manager/ui-bundler/-/ui-bundler-0.0.3.tgz#06f99d8b17e9aa1bb6e69c2732160e1f46724c3c" +"@scm-manager/ui-bundler@^0.0.4": + version "0.0.4" + resolved "https://registry.yarnpkg.com/@scm-manager/ui-bundler/-/ui-bundler-0.0.4.tgz#0191a026d25b826692bccbc2b76d550388dd5528" dependencies: "@babel/core" "^7.0.0-rc.2" "@babel/plugin-proposal-class-properties" "^7.0.0-rc.2" @@ -623,6 +623,7 @@ budo "^11.3.2" colors "^1.3.1" commander "^2.17.1" + fast-xml-parser "^3.12.0" jest "^23.5.0" jest-junit "^5.1.0" node-mkdirs "^0.0.1" @@ -2130,6 +2131,12 @@ fast-levenshtein@~2.0.4: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" +fast-xml-parser@^3.12.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-3.12.0.tgz#84ddcd98ca005f94e99af3ac387adc32ffb239d8" + dependencies: + nimnjs "^1.3.2" + fb-watchman@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" @@ -3760,6 +3767,21 @@ nice-try@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.4.tgz#d93962f6c52f2c1558c0fbda6d512819f1efe1c4" +nimn-date-parser@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/nimn-date-parser/-/nimn-date-parser-1.0.0.tgz#4ce55d1fd5ea206bbe82b76276f7b7c582139351" + +nimn_schema_builder@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/nimn_schema_builder/-/nimn_schema_builder-1.1.0.tgz#b370ccf5b647d66e50b2dcfb20d0aa12468cd247" + +nimnjs@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/nimnjs/-/nimnjs-1.3.2.tgz#a6a877968d87fad836375a4f616525e55079a5ba" + dependencies: + nimn-date-parser "^1.0.0" + nimn_schema_builder "^1.0.0" + node-fetch@^1.0.1: version "1.7.3" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" diff --git a/scm-webapp/pom.xml b/scm-webapp/pom.xml index c404aa5d84..aac1450caf 100644 --- a/scm-webapp/pom.xml +++ b/scm-webapp/pom.xml @@ -509,7 +509,7 @@ - / + /scm ${project.basedir}/src/main/conf/jetty.xml 0 diff --git a/scm-webapp/src/main/java/sonia/scm/ScmServletModule.java b/scm-webapp/src/main/java/sonia/scm/ScmServletModule.java index 7ee89ba16e..1d627de8ed 100644 --- a/scm-webapp/src/main/java/sonia/scm/ScmServletModule.java +++ b/scm-webapp/src/main/java/sonia/scm/ScmServletModule.java @@ -63,10 +63,6 @@ import sonia.scm.repository.api.HookContextFactory; import sonia.scm.repository.api.RepositoryServiceFactory; import sonia.scm.repository.spi.HookEventFacade; import sonia.scm.repository.xml.XmlRepositoryDAO; -import sonia.scm.resources.DefaultResourceManager; -import sonia.scm.resources.DevelopmentResourceManager; -import sonia.scm.resources.ResourceManager; -import sonia.scm.resources.ScriptResourceServlet; import sonia.scm.schedule.QuartzScheduler; import sonia.scm.schedule.Scheduler; import sonia.scm.security.*; @@ -266,16 +262,6 @@ public class ScmServletModule extends ServletModule transformers.addBinding().to(JsonContentTransformer.class); bind(AdvancedHttpClient.class).to(DefaultAdvancedHttpClient.class); - // bind resourcemanager - if (context.getStage() == Stage.DEVELOPMENT) - { - bind(ResourceManager.class, DevelopmentResourceManager.class); - } - else - { - bind(ResourceManager.class, DefaultResourceManager.class); - } - // bind repository service factory bind(RepositoryServiceFactory.class); @@ -295,9 +281,6 @@ public class ScmServletModule extends ServletModule // debug servlet serve(PATTERN_DEBUG).with(DebugServlet.class); - // plugin resources - serve(PATTERN_PLUGIN_SCRIPT).with(ScriptResourceServlet.class); - // template serve(PATTERN_INDEX, "/").with(TemplateServlet.class); diff --git a/scm-webapp/src/main/java/sonia/scm/resources/AbstractResource.java b/scm-webapp/src/main/java/sonia/scm/resources/AbstractResource.java deleted file mode 100644 index d5b21befe6..0000000000 --- a/scm-webapp/src/main/java/sonia/scm/resources/AbstractResource.java +++ /dev/null @@ -1,215 +0,0 @@ -/** - * Copyright (c) 2010, Sebastian Sdorra - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of SCM-Manager; nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * http://bitbucket.org/sdorra/scm-manager - * - */ - - - -package sonia.scm.resources; - -//~--- non-JDK imports -------------------------------------------------------- - -import com.google.common.io.Resources; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import sonia.scm.plugin.PluginLoader; -import sonia.scm.util.Util; - -//~--- JDK imports ------------------------------------------------------------ - -import java.io.IOException; -import java.io.OutputStream; - -import java.net.URL; - -import java.util.Collections; -import java.util.List; - -/** - * - * @author Sebastian Sdorra - */ -public abstract class AbstractResource implements Resource -{ - - /** - * the logger for AbstractResource - */ - private static final Logger logger = - LoggerFactory.getLogger(AbstractResource.class); - - //~--- constructors --------------------------------------------------------- - - /** - * Constructs ... - * - * @param pluginLoader - * @param resources - * @param resourceHandlers - */ - public AbstractResource(PluginLoader pluginLoader, List resources, - List resourceHandlers) - { - this.pluginLoader = pluginLoader; - this.resources = resources; - this.resourceHandlers = resourceHandlers; - } - - //~--- methods -------------------------------------------------------------- - - /** - * Method description - * - * - * @param stream - * - * @throws IOException - */ - protected void appendResources(OutputStream stream) throws IOException - { - if (Util.isNotEmpty(resources)) - { - for (String resource : resources) - { - appendResource(stream, resource); - } - } - - if (Util.isNotEmpty(resourceHandlers)) - { - Collections.sort(resourceHandlers, new ResourceHandlerComparator()); - - for (ResourceHandler resourceHandler : resourceHandlers) - { - processResourceHandler(stream, resourceHandler); - } - } - } - - /** - * Method description - * - * - * @param stream - * @param path - * - * @throws IOException - */ - private void appendResource(OutputStream stream, String path) - throws IOException - { - URL resource = getResourceAsURL(path); - - if (resource != null) - { - Resources.copy(resource, stream); - } - else if (logger.isWarnEnabled()) - { - logger.warn("could not find resource {}", path); - } - } - - /** - * Method description - * - * - * @param stream - * @param resourceHandler - * - * @throws IOException - */ - private void processResourceHandler(OutputStream stream, - ResourceHandler resourceHandler) - throws IOException - { - if (resourceHandler.getType() == getType()) - { - if (logger.isTraceEnabled()) - { - logger.trace("process resource handler {}", resourceHandler.getClass()); - } - - URL resource = resourceHandler.getResource(); - - if (resource != null) - { - Resources.copy(resource, stream); - } - else if (logger.isDebugEnabled()) - { - logger.debug("resource handler {} does not return a resource", - resourceHandler.getClass()); - } - } - } - - //~--- get methods ---------------------------------------------------------- - - /** - * Method description - * - * - * @param path - * - * @return - */ - private URL getResourceAsURL(String path) - { - URL resource = null; - ClassLoader classLoader = pluginLoader.getUberClassLoader(); - - if (classLoader != null) - { - String classLoaderResource = path; - - if (classLoaderResource.startsWith("/")) - { - classLoaderResource = classLoaderResource.substring(1); - } - - resource = classLoader.getResource(classLoaderResource); - } - - return resource; - } - - //~--- fields --------------------------------------------------------------- - - /** Field description */ - protected final List resourceHandlers; - - /** Field description */ - protected final List resources; - - /** Field description */ - private final PluginLoader pluginLoader; -} diff --git a/scm-webapp/src/main/java/sonia/scm/resources/AbstractResourceManager.java b/scm-webapp/src/main/java/sonia/scm/resources/AbstractResourceManager.java deleted file mode 100644 index 4772acdf0c..0000000000 --- a/scm-webapp/src/main/java/sonia/scm/resources/AbstractResourceManager.java +++ /dev/null @@ -1,314 +0,0 @@ -/** - * Copyright (c) 2010, Sebastian Sdorra - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of SCM-Manager; nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * http://bitbucket.org/sdorra/scm-manager - * - */ - - - -package sonia.scm.resources; - -//~--- non-JDK imports -------------------------------------------------------- - -import sonia.scm.plugin.Plugin; -import sonia.scm.plugin.PluginLoader; -import sonia.scm.plugin.PluginResources; - -//~--- JDK imports ------------------------------------------------------------ - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; -import java.util.stream.Collectors; - -import javax.servlet.ServletContext; -import sonia.scm.plugin.PluginWrapper; - -/** - * - * @author Sebastian Sdorra - */ -public abstract class AbstractResourceManager implements ResourceManager -{ - - /** - * Constructs ... - * - * @param pluginLoader - * @param resourceHandlers - */ - protected AbstractResourceManager(PluginLoader pluginLoader, - Set resourceHandlers) - { - this.pluginLoader = pluginLoader; - this.resourceHandlers = resourceHandlers; - collectResources(resourceMap); - } - - //~--- methods -------------------------------------------------------------- - - /** - * Method description - * - * - * @param resourceMap - */ - protected abstract void collectResources(Map resourceMap); - - //~--- get methods ---------------------------------------------------------- - - /** - * Method description - * - * - * @param type - * @param name - * - * @return - */ - @Override - public Resource getResource(ResourceType type, String name) - { - return resourceMap.get(new ResourceKey(name, type)); - } - - /** - * Method description - * - * - * @param type - * - * @return - */ - @Override - public List getResources(ResourceType type) - { - List resources = new ArrayList<>(); - - for (Entry e : resourceMap.entrySet()) - { - if (e.getKey().getType() == type) - { - resources.add(e.getValue()); - } - } - - Collections.sort(resources, ResourceNameComparator.INSTANCE); - - return resources; - } - - /** - * Method description - * - * - * @return - */ - protected List getScriptResources() - { - List resources = new ArrayList<>(); - Collection wrappers = pluginLoader.getInstalledPlugins(); - - if (wrappers != null) - { - for (PluginWrapper plugin : wrappers) - { - processPlugin(resources, plugin.getPlugin()); - } - } - - // fix order of script resources, see https://goo.gl/ok03l4 - Collections.sort(resources); - - return resources; - } - - //~--- methods -------------------------------------------------------------- - - /** - * Method description - * - * - * @param resources - * @param plugin - */ - private void processPlugin(List resources, Plugin plugin) - { - PluginResources pluginResources = plugin.getResources(); - - if (pluginResources != null) - { - Set scriptResources = pluginResources.getScriptResources(); - - if (scriptResources != null) - { - // filter new resources and keep only the old ones, which are starting with a / - List filtered = scriptResources.stream() - .filter((res) -> res.startsWith("/")) - .collect(Collectors.toList()); - - resources.addAll(filtered); - } - } - } - - //~--- inner classes -------------------------------------------------------- - - /** - * Class description - * - * - * @version Enter version here..., 12/02/03 - * @author Enter your name here... - */ - protected static class ResourceKey - { - - /** - * Constructs ... - * - * - * @param name - * @param type - */ - public ResourceKey(String name, ResourceType type) - { - this.name = name; - this.type = type; - } - - //~--- methods ------------------------------------------------------------ - - /** - * Method description - * - * - * @param obj - * - * @return - */ - @Override - public boolean equals(Object obj) - { - if (obj == null) - { - return false; - } - - if (getClass() != obj.getClass()) - { - return false; - } - - final ResourceKey other = (ResourceKey) obj; - - if ((this.name == null) - ? (other.name != null) - : !this.name.equals(other.name)) - { - return false; - } - - return this.type == other.type; - } - - /** - * Method description - * - * - * @return - */ - @Override - public int hashCode() - { - int hash = 7; - - hash = 53 * hash + ((this.name != null) - ? this.name.hashCode() - : 0); - hash = 53 * hash + ((this.type != null) - ? this.type.hashCode() - : 0); - - return hash; - } - - //~--- get methods -------------------------------------------------------- - - /** - * Method description - * - * - * @return - */ - public String getName() - { - return name; - } - - /** - * Method description - * - * - * @return - */ - public ResourceType getType() - { - return type; - } - - //~--- fields ------------------------------------------------------------- - - /** Field description */ - private final String name; - - /** Field description */ - private final ResourceType type; - } - - - //~--- fields --------------------------------------------------------------- - - /** Field description */ - protected PluginLoader pluginLoader; - - /** Field description */ - protected Set resourceHandlers; - - /** Field description */ - protected Map resourceMap = new HashMap<>(); - - /** Field description */ - protected ServletContext servletContext; -} diff --git a/scm-webapp/src/main/java/sonia/scm/resources/AbstractResourceServlet.java b/scm-webapp/src/main/java/sonia/scm/resources/AbstractResourceServlet.java deleted file mode 100644 index 74a6291a98..0000000000 --- a/scm-webapp/src/main/java/sonia/scm/resources/AbstractResourceServlet.java +++ /dev/null @@ -1,165 +0,0 @@ -/** - * Copyright (c) 2010, Sebastian Sdorra - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of SCM-Manager; nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * http://bitbucket.org/sdorra/scm-manager - * - */ - - - -package sonia.scm.resources; - -//~--- non-JDK imports -------------------------------------------------------- - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import sonia.scm.util.HttpUtil; -import sonia.scm.util.IOUtil; - -//~--- JDK imports ------------------------------------------------------------ - -import java.io.IOException; -import java.io.OutputStream; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -/** - * - * @author Sebastian Sdorra - */ -public abstract class AbstractResourceServlet extends HttpServlet -{ - - /** Field description */ - private static final long serialVersionUID = -1774434741744054387L; - - /** - * the logger for AbstractResourceServlet - */ - private static final Logger logger = - LoggerFactory.getLogger(AbstractResourceServlet.class); - - //~--- constructors --------------------------------------------------------- - - /** - * Constructs ... - * - * - * @param resourceManager - */ - public AbstractResourceServlet(ResourceManager resourceManager) - { - this.resourceManager = resourceManager; - } - - //~--- get methods ---------------------------------------------------------- - - /** - * Method description - * - * - * @return - */ - protected abstract ResourceType getType(); - - //~--- methods -------------------------------------------------------------- - - /** - * Method description - * - * - * @param request - * @param response - * - * @throws IOException - * @throws ServletException - */ - @Override - protected void doGet(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException - { - String uri = HttpUtil.getStrippedURI(request); - ResourceType type = getType(); - String nameSeparator = HttpUtil.SEPARATOR_PATH.concat( - type.getExtension()).concat( - HttpUtil.SEPARATOR_PATH); - int index = uri.indexOf(nameSeparator); - - if (index > 0) - { - String name = uri.substring(index + nameSeparator.length()); - Resource resource = resourceManager.getResource(type, name); - - if (resource != null) - { - printResource(response, resource); - } - else - { - if (logger.isWarnEnabled()) - { - logger.warn("no resource with type {} and name {} found", type, name); - } - - response.sendError(HttpServletResponse.SC_NOT_FOUND); - } - } - else - { - response.sendError(HttpServletResponse.SC_NOT_FOUND); - } - } - - /** - * Method description - * - * - * @param response - * @param resource - * - * @throws IOException - */ - private void printResource(HttpServletResponse response, Resource resource) - throws IOException - { - response.setContentType(resource.getType().getContentType()); - - try (OutputStream output = response.getOutputStream()) - { - resource.copyTo(output); - } - } - - //~--- fields --------------------------------------------------------------- - - /** Field description */ - private final ResourceManager resourceManager; -} diff --git a/scm-webapp/src/main/java/sonia/scm/resources/DefaultResource.java b/scm-webapp/src/main/java/sonia/scm/resources/DefaultResource.java deleted file mode 100644 index d17b79cfd2..0000000000 --- a/scm-webapp/src/main/java/sonia/scm/resources/DefaultResource.java +++ /dev/null @@ -1,135 +0,0 @@ -/** - * Copyright (c) 2010, Sebastian Sdorra - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of SCM-Manager; nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * http://bitbucket.org/sdorra/scm-manager - * - */ - - - -package sonia.scm.resources; - -//~--- non-JDK imports -------------------------------------------------------- - -import sonia.scm.plugin.PluginLoader; -import sonia.scm.util.ChecksumUtil; - -//~--- JDK imports ------------------------------------------------------------ - -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.OutputStream; - -import java.util.List; - -/** - * - * @author Sebastian Sdorra - */ -public final class DefaultResource extends AbstractResource -{ - - /** - * Constructs ... - * - * - * @param pluginLoader - * @param resources - * @param resourceHandlers - * @param type - * - * @throws IOException - */ - public DefaultResource(PluginLoader pluginLoader, List resources, - List resourceHandlers, ResourceType type) - throws IOException - { - super(pluginLoader, resources, resourceHandlers); - this.type = type; - - try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) - { - appendResources(baos); - this.content = baos.toByteArray(); - this.name = ChecksumUtil.createChecksum(this.content).concat(".").concat( - type.getExtension()); - } - } - - //~--- methods -------------------------------------------------------------- - - /** - * Method description - * - * - * @param output - * - * @throws IOException - */ - @Override - public void copyTo(OutputStream output) throws IOException - { - output.write(content); - } - - //~--- get methods ---------------------------------------------------------- - - /** - * Method description - * - * - * @return - */ - @Override - public String getName() - { - return name; - } - - /** - * Method description - * - * - * @return - */ - @Override - public ResourceType getType() - { - return type; - } - - //~--- fields --------------------------------------------------------------- - - /** Field description */ - private final byte[] content; - - /** Field description */ - private final String name; - - /** Field description */ - private final ResourceType type; -} diff --git a/scm-webapp/src/main/java/sonia/scm/resources/DefaultResourceManager.java b/scm-webapp/src/main/java/sonia/scm/resources/DefaultResourceManager.java deleted file mode 100644 index 269e260190..0000000000 --- a/scm-webapp/src/main/java/sonia/scm/resources/DefaultResourceManager.java +++ /dev/null @@ -1,111 +0,0 @@ -/** - * Copyright (c) 2010, Sebastian Sdorra - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of SCM-Manager; nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * http://bitbucket.org/sdorra/scm-manager - * - */ - - - -package sonia.scm.resources; - -//~--- non-JDK imports -------------------------------------------------------- - -import com.google.common.collect.Lists; -import com.google.inject.Inject; -import com.google.inject.Singleton; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import sonia.scm.plugin.PluginLoader; - -//~--- JDK imports ------------------------------------------------------------ - -import java.io.IOException; - -import java.util.List; -import java.util.Map; -import java.util.Set; - -/** - * - * @author Sebastian Sdorra - */ -@Singleton -public class DefaultResourceManager extends AbstractResourceManager -{ - - /** - * the logger for DefaultResourceManager - */ - private static final Logger logger = - LoggerFactory.getLogger(DefaultResourceManager.class); - - //~--- constructors --------------------------------------------------------- - - /** - * Constructs ... - * - * @param pluginLoader - * @param resourceHandlers - */ - @Inject - public DefaultResourceManager(PluginLoader pluginLoader, - Set resourceHandlers) - { - super(pluginLoader, resourceHandlers); - } - - //~--- methods -------------------------------------------------------------- - - /** - * Method description - * - * - * @param resourceMap - */ - @Override - protected void collectResources(Map resourceMap) - { - List resources = getScriptResources(); - - try - { - Resource resource = new DefaultResource(pluginLoader, resources, - Lists.newArrayList(resourceHandlers), - ResourceType.SCRIPT); - - resourceMap.put(new ResourceKey(resource.getName(), ResourceType.SCRIPT), - resource); - } - catch (IOException ex) - { - logger.error("could not collect resources", ex); - } - } -} diff --git a/scm-webapp/src/main/java/sonia/scm/resources/DevelopmentResource.java b/scm-webapp/src/main/java/sonia/scm/resources/DevelopmentResource.java deleted file mode 100644 index a699c4fc23..0000000000 --- a/scm-webapp/src/main/java/sonia/scm/resources/DevelopmentResource.java +++ /dev/null @@ -1,135 +0,0 @@ -/** - * Copyright (c) 2010, Sebastian Sdorra - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of SCM-Manager; nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * http://bitbucket.org/sdorra/scm-manager - * - */ - - - -package sonia.scm.resources; - -//~--- non-JDK imports -------------------------------------------------------- - -import sonia.scm.plugin.PluginLoader; -import sonia.scm.util.HttpUtil; - -//~--- JDK imports ------------------------------------------------------------ - -import java.io.IOException; -import java.io.OutputStream; - -import java.util.List; - -/** - * - * @author Sebastian Sdorra - */ -public final class DevelopmentResource extends AbstractResource -{ - - /** - * Constructs ... - * - * - * @param pluginLoader - * @param resources - * @param resourceHandlers - * @param name - * @param type - */ - public DevelopmentResource(PluginLoader pluginLoader, List resources, - List resourceHandlers, String name, ResourceType type) - { - super(pluginLoader, resources, resourceHandlers); - this.type = type; - - if (name.startsWith(HttpUtil.SEPARATOR_PATH)) - { - name = name.substring(1); - } - - String ext = ".".concat(type.getExtension()); - - if (!name.endsWith(ext)) - { - name = name.concat(ext); - } - - this.name = name; - } - - //~--- methods -------------------------------------------------------------- - - /** - * Method description - * - * - * @param output - * - * @throws IOException - */ - @Override - public void copyTo(OutputStream output) throws IOException - { - appendResources(output); - } - - //~--- get methods ---------------------------------------------------------- - - /** - * Method description - * - * - * @return - */ - @Override - public String getName() - { - return name; - } - - /** - * Method description - * - * - * @return - */ - @Override - public ResourceType getType() - { - return type; - } - - //~--- fields --------------------------------------------------------------- - - /** Field description */ - private final String name; - - /** Field description */ - private final ResourceType type; -} diff --git a/scm-webapp/src/main/java/sonia/scm/resources/DevelopmentResourceManager.java b/scm-webapp/src/main/java/sonia/scm/resources/DevelopmentResourceManager.java deleted file mode 100644 index c378bb6dae..0000000000 --- a/scm-webapp/src/main/java/sonia/scm/resources/DevelopmentResourceManager.java +++ /dev/null @@ -1,117 +0,0 @@ -/** - * Copyright (c) 2010, Sebastian Sdorra - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of SCM-Manager; nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * http://bitbucket.org/sdorra/scm-manager - * - */ - - - -package sonia.scm.resources; - -//~--- non-JDK imports -------------------------------------------------------- - -import com.google.inject.Inject; -import com.google.inject.Singleton; - -import sonia.scm.plugin.PluginLoader; - -//~--- JDK imports ------------------------------------------------------------ - -import java.util.Arrays; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.Set; - -/** - * - * @author Sebastian Sdorra - */ -@Singleton -public class DevelopmentResourceManager extends AbstractResourceManager -{ - - /** Field description */ - public static final String PREFIX_HANDLER = "handler/"; - - //~--- constructors --------------------------------------------------------- - - /** - * Constructs ... - * - * - * @param pluginLoader - * @param resourceHandlers - */ - @Inject - public DevelopmentResourceManager(PluginLoader pluginLoader, - Set resourceHandlers) - { - super(pluginLoader, resourceHandlers); - } - - //~--- methods -------------------------------------------------------------- - - /** - * Method description - * - * - * @param resourceMap - */ - @Override - @SuppressWarnings("unchecked") - protected void collectResources(Map resourceMap) - { - List scripts = getScriptResources(); - - for (String script : scripts) - { - Resource resource = new DevelopmentResource(pluginLoader, - Arrays.asList(script), Collections.EMPTY_LIST, - script, ResourceType.SCRIPT); - - resourceMap.put(new ResourceKey(resource.getName(), ResourceType.SCRIPT), - resource); - } - - for (ResourceHandler handler : resourceHandlers) - { - String name = handler.getName(); - - if (name.startsWith("/")) - { - name = name.substring(1); - } - - name = PREFIX_HANDLER.concat(name); - resourceMap.put(new ResourceKey(name, ResourceType.SCRIPT), - new DevelopmentResource(pluginLoader, Collections.EMPTY_LIST, - Arrays.asList(handler), name, ResourceType.SCRIPT)); - } - } -} diff --git a/scm-webapp/src/main/java/sonia/scm/resources/ScriptResourceServlet.java b/scm-webapp/src/main/java/sonia/scm/resources/ScriptResourceServlet.java deleted file mode 100644 index d7ccc4747f..0000000000 --- a/scm-webapp/src/main/java/sonia/scm/resources/ScriptResourceServlet.java +++ /dev/null @@ -1,78 +0,0 @@ -/** - * Copyright (c) 2010, Sebastian Sdorra - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of SCM-Manager; nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * http://bitbucket.org/sdorra/scm-manager - * - */ - - -package sonia.scm.resources; - -//~--- non-JDK imports -------------------------------------------------------- - -import com.google.inject.Inject; -import com.google.inject.Singleton; - -/** - * - * @author Sebastian Sdorra - */ -@Singleton -public class ScriptResourceServlet extends AbstractResourceServlet -{ - - /** Field description */ - private static final long serialVersionUID = 1279211769033477225L; - - //~--- constructors --------------------------------------------------------- - - /** - * Constructs ... - * - * - * @param resourceManager - */ - @Inject - public ScriptResourceServlet(ResourceManager resourceManager) - { - super(resourceManager); - } - - //~--- get methods ---------------------------------------------------------- - - /** - * Method description - * - * - * @return - */ - @Override - protected ResourceType getType() - { - return ResourceType.SCRIPT; - } -} diff --git a/scm-webapp/src/main/java/sonia/scm/template/TemplateServlet.java b/scm-webapp/src/main/java/sonia/scm/template/TemplateServlet.java index 89e6baa685..21a8608e45 100644 --- a/scm-webapp/src/main/java/sonia/scm/template/TemplateServlet.java +++ b/scm-webapp/src/main/java/sonia/scm/template/TemplateServlet.java @@ -38,30 +38,23 @@ package sonia.scm.template; import com.google.common.collect.ImmutableSet; import com.google.inject.Inject; import com.google.inject.Singleton; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import sonia.scm.SCMContextProvider; import sonia.scm.config.ScmConfiguration; -import sonia.scm.resources.ResourceManager; -import sonia.scm.resources.ResourceType; import sonia.scm.util.IOUtil; -//~--- JDK imports ------------------------------------------------------------ - +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.Writer; - import java.util.HashMap; import java.util.Locale; import java.util.Map; import java.util.Set; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +//~--- JDK imports ------------------------------------------------------------ /** * @@ -100,15 +93,12 @@ public class TemplateServlet extends HttpServlet * @param context * @param templateEngineFactory * @param configuration - * @param resourceManager */ @Inject public TemplateServlet(SCMContextProvider context, - TemplateEngineFactory templateEngineFactory, - ResourceManager resourceManager, ScmConfiguration configuration) + TemplateEngineFactory templateEngineFactory, ScmConfiguration configuration) { this.templateEngineFactory = templateEngineFactory; - this.resourceManager = resourceManager; this.configuration = configuration; this.version = context.getVersion(); } @@ -123,21 +113,17 @@ public class TemplateServlet extends HttpServlet * @param response * * @throws IOException - * @throws ServletException */ @Override - protected void doGet(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { - Map params = new HashMap(); + Map params = new HashMap<>(); String contextPath = request.getContextPath(); params.put("contextPath", contextPath); params.put("configuration", configuration); params.put("version", version); - params.put("scripts", resourceManager.getResources(ResourceType.SCRIPT)); - Locale l = request.getLocale(); if (l == null) @@ -242,9 +228,6 @@ public class TemplateServlet extends HttpServlet /** Field description */ private final ScmConfiguration configuration; - /** Field description */ - private final ResourceManager resourceManager; - /** Field description */ private final TemplateEngineFactory templateEngineFactory; diff --git a/scm-webapp/src/main/webapp/index.html b/scm-webapp/src/main/webapp/index.html new file mode 100644 index 0000000000..e149a39434 --- /dev/null +++ b/scm-webapp/src/main/webapp/index.html @@ -0,0 +1,10 @@ + + + + + Title + + + + + diff --git a/scm-webapp/src/test/java/sonia/scm/resources/AbstractResourceManagerTest.java b/scm-webapp/src/test/java/sonia/scm/resources/AbstractResourceManagerTest.java deleted file mode 100644 index fb6ab364ca..0000000000 --- a/scm-webapp/src/test/java/sonia/scm/resources/AbstractResourceManagerTest.java +++ /dev/null @@ -1,97 +0,0 @@ -/*** - * Copyright (c) 2015, Sebastian Sdorra - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of SCM-Manager; nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * https://bitbucket.org/sdorra/scm-manager - * - */ - -package sonia.scm.resources; - -import com.google.common.collect.ImmutableSet; -import java.io.IOException; -import java.util.List; -import java.util.Map; -import java.util.Set; -import static org.junit.Assert.*; -import org.junit.Before; -import org.junit.Ignore; -import org.junit.Test; -import org.junit.runner.RunWith; -import static org.hamcrest.Matchers.*; -import org.mockito.junit.MockitoJUnitRunner; -import sonia.scm.plugin.PluginLoader; - -/** - * Unit tests for {@link AbstractResourceManager}. - * - * @author Sebastian Sdorra - */ -@Ignore -@RunWith(MockitoJUnitRunner.class) -public class AbstractResourceManagerTest extends ResourceManagerTestBase -{ - - private DummyResourceManager resourceManager; - - @Before - public void setUp() - { - Set resourceHandlers = ImmutableSet.of(resourceHandler); - resourceManager = new DummyResourceManager(pluginLoader, resourceHandlers); - } - - /** - * Test {@link AbstractResourceManager#getScriptResources()} in the correct order. - * - * @throws java.io.IOException - * - * @see Issue 809 - */ - @Test - public void testGetScriptResources() throws IOException - { - appendScriptResources("a/b.js", "z/a.js", "a/a.js"); - List scripts = resourceManager.getScriptResources(); - assertThat(scripts, contains("a/a.js", "a/b.js", "z/a.js")); - } - - private static class DummyResourceManager extends AbstractResourceManager - { - - public DummyResourceManager(PluginLoader pluginLoader, Set resourceHandlers) - { - super(pluginLoader, resourceHandlers); - } - - @Override - protected void collectResources(Map resourceMap) - { - } - - } - -} diff --git a/scm-webapp/src/test/java/sonia/scm/resources/DefaultResourceManagerTest.java b/scm-webapp/src/test/java/sonia/scm/resources/DefaultResourceManagerTest.java deleted file mode 100644 index 489ac9f13d..0000000000 --- a/scm-webapp/src/test/java/sonia/scm/resources/DefaultResourceManagerTest.java +++ /dev/null @@ -1,78 +0,0 @@ -/*** - * Copyright (c) 2015, Sebastian Sdorra - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of SCM-Manager; nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * https://bitbucket.org/sdorra/scm-manager - * - */ - -package sonia.scm.resources; - -import com.google.common.collect.ImmutableSet; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.junit.MockitoJUnitRunner; - -import java.io.IOException; -import java.util.List; -import java.util.Set; - -import static org.junit.Assert.assertEquals; - -/** - * Unit tests for {@link DefaultResourceManager}. - * - * @author Sebastian Sdorra - */ -@RunWith(MockitoJUnitRunner.Silent.class) -public class DefaultResourceManagerTest extends ResourceManagerTestBase { - - private DefaultResourceManager resourceManager; - - /** - * Set up {@link DefaultResourceManager} for tests. - */ - @Before - public void setUp() - { - Set resourceHandlers = ImmutableSet.of(resourceHandler); - resourceManager = new DefaultResourceManager(pluginLoader, resourceHandlers); - } - - /** - * Test {@link DefaultResourceManager#getResources(sonia.scm.resources.ResourceType)} method. - * @throws java.io.IOException - */ - @Test - public void testGetResources() throws IOException - { - appendScriptResources("a/b.js", "z/a.js", "a/a.js"); - List resources = resourceManager.getResources(ResourceType.SCRIPT); - assertEquals(1, resources.size()); - } - -} diff --git a/scm-webapp/src/test/java/sonia/scm/resources/ResourceManagerTestBase.java b/scm-webapp/src/test/java/sonia/scm/resources/ResourceManagerTestBase.java deleted file mode 100644 index 164caf6f8c..0000000000 --- a/scm-webapp/src/test/java/sonia/scm/resources/ResourceManagerTestBase.java +++ /dev/null @@ -1,112 +0,0 @@ -/*** - * Copyright (c) 2015, Sebastian Sdorra - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of SCM-Manager; nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * https://bitbucket.org/sdorra/scm-manager - * - */ - -package sonia.scm.resources; - -import com.google.common.collect.ImmutableList; -import com.google.common.collect.Sets; -import java.io.IOException; -import java.nio.file.Path; -import java.util.List; -import java.util.Set; -import javax.servlet.ServletContext; -import org.junit.Rule; -import org.junit.rules.TemporaryFolder; -import org.mockito.Mock; -import static org.mockito.Mockito.when; -import sonia.scm.plugin.Plugin; -import sonia.scm.plugin.PluginCondition; -import sonia.scm.plugin.PluginInformation; -import sonia.scm.plugin.PluginLoader; -import sonia.scm.plugin.PluginResources; -import sonia.scm.plugin.PluginWrapper; -import sonia.scm.plugin.WebResourceLoader; - -/** - * Base class for {@link ResourceManager} tests. - * - * @author Sebastian Sdorra - */ -public abstract class ResourceManagerTestBase -{ - - @Mock - protected ServletContext servletContext; - - @Mock - protected PluginLoader pluginLoader; - - @Mock - protected ResourceHandler resourceHandler; - - @Mock - protected WebResourceLoader webResourceLoader; - - @Rule - public TemporaryFolder tempFolder = new TemporaryFolder(); - - /** - * Append scripts resources to plugin loader. - * - * @param resources resource names - * - * @throws IOException - */ - protected void appendScriptResources(String... resources) throws IOException - { - Set scripts = Sets.newHashSet(resources); - Set styles = Sets.newHashSet(); - Set dependencies = Sets.newHashSet(); - - - Plugin plugin = new Plugin( - 2, - new PluginInformation(), - new PluginResources(scripts, styles), - new PluginCondition(), - false, - dependencies - ); - - Path pluginPath = tempFolder.newFolder().toPath(); - - PluginWrapper wrapper = new PluginWrapper( - plugin, - Thread.currentThread().getContextClassLoader(), - webResourceLoader, - pluginPath - ); - - List plugins = ImmutableList.of(wrapper); - - when(pluginLoader.getInstalledPlugins()).thenReturn(plugins); - } -}