show plugin updates only once

This commit is contained in:
Sebastian Sdorra
2011-07-29 19:44:25 +02:00
parent 746f781b68
commit c6df4f59aa
4 changed files with 155 additions and 6 deletions

View File

@@ -0,0 +1,88 @@
/**
* 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.plugin;
//~--- non-JDK imports --------------------------------------------------------
import sonia.scm.util.Util;
//~--- JDK imports ------------------------------------------------------------
import java.util.Comparator;
/**
*
* @author Sebastian Sdorra
* @since 1.6
*/
public class PluginInformationComparator
implements Comparator<PluginInformation>
{
/** Field description */
public static final PluginInformationComparator INSTANCE =
new PluginInformationComparator();
//~--- methods --------------------------------------------------------------
/**
* Method description
*
*
* @param plugin
* @param other
*
* @return
*/
@Override
public int compare(PluginInformation plugin, PluginInformation other)
{
int result = 0;
result = Util.compare(plugin.getGroupId(), other.getGroupId());
if (result == 0)
{
result = Util.compare(plugin.getArtifactId(), other.getArtifactId());
if (result == 0)
{
result = plugin.getState().getCompareValue()
- other.getState().getCompareValue();
}
}
return result;
}
}

View File

@@ -39,5 +39,36 @@ package sonia.scm.plugin;
*/ */
public enum PluginState public enum PluginState
{ {
CORE, AVAILABLE, INSTALLED, NEWER_VERSION_INSTALLED, UPDATE_AVAILABLE; CORE(100), AVAILABLE(60), INSTALLED(80), NEWER_VERSION_INSTALLED(20),
UPDATE_AVAILABLE(40);
/**
* Constructs ...
*
*
* @param compareValue
*/
private PluginState(int compareValue)
{
this.compareValue = compareValue;
}
//~--- get methods ----------------------------------------------------------
/**
* Method description
*
*
* @since 1.6
* @return
*/
public int getCompareValue()
{
return compareValue;
}
//~--- fields ---------------------------------------------------------------
/** Field description */
int compareValue;
} }

View File

@@ -41,10 +41,18 @@ import com.google.inject.Singleton;
import sonia.scm.plugin.DefaultPluginManager; import sonia.scm.plugin.DefaultPluginManager;
import sonia.scm.plugin.OverviewPluginFilter; import sonia.scm.plugin.OverviewPluginFilter;
import sonia.scm.plugin.PluginInformation; import sonia.scm.plugin.PluginInformation;
import sonia.scm.plugin.PluginInformationComparator;
import sonia.scm.util.Util;
//~--- JDK imports ------------------------------------------------------------ //~--- JDK imports ------------------------------------------------------------
import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import javax.ws.rs.GET; import javax.ws.rs.GET;
import javax.ws.rs.POST; import javax.ws.rs.POST;
@@ -196,7 +204,29 @@ public class PluginResource
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public Collection<PluginInformation> getOverview() public Collection<PluginInformation> getOverview()
{ {
return pluginManager.get(OverviewPluginFilter.INSTANCE); List<PluginInformation> plugins = new ArrayList<PluginInformation>(
pluginManager.get(
OverviewPluginFilter.INSTANCE));
Collections.sort(plugins, PluginInformationComparator.INSTANCE);
Iterator<PluginInformation> it = plugins.iterator();
String last = null;
while (it.hasNext())
{
PluginInformation pi = it.next();
String id = pi.getGroupId().concat(":").concat(pi.getArtifactId());
if ((last != null) && id.equals(last))
{
it.remove();
}
last = id;
}
return plugins;
} }
//~--- fields --------------------------------------------------------------- //~--- fields ---------------------------------------------------------------

View File

@@ -307,10 +307,10 @@ public class DefaultPluginManager implements PluginManager
Set<PluginInformation> infoSet = new HashSet<PluginInformation>(); Set<PluginInformation> infoSet = new HashSet<PluginInformation>();
for (PluginInformation pi : getPluginCenter().getPlugins()) for ( PluginInformation pi : getPluginCenter().getPlugins() )
{ {
System.out.println(pi.getArtifactId() + ": " + pi.getVersion() + ":" System.out.println( pi.getArtifactId() + ": " + pi.getVersion() + ":" + pi.getState() );
+ pi.getState());
} }
filter(infoSet, getInstalled(), filter); filter(infoSet, getInstalled(), filter);