From f06078cb9de3c4f8330255e86fd166a99474a795 Mon Sep 17 00:00:00 2001 From: James Munson Date: Sat, 20 Apr 2019 12:46:02 -0700 Subject: [PATCH] Added config group item --- .../client/config/ConfigDescriptor.java | 25 +++++++-- .../runelite/client/config/ConfigItem.java | 3 ++ .../client/config/ConfigItemsGroup.java | 52 +++++++++++++++++++ .../runelite/client/config/ConfigManager.java | 32 +++++++++++- 4 files changed, 106 insertions(+), 6 deletions(-) create mode 100644 runelite-client/src/main/java/net/runelite/client/config/ConfigItemsGroup.java diff --git a/runelite-client/src/main/java/net/runelite/client/config/ConfigDescriptor.java b/runelite-client/src/main/java/net/runelite/client/config/ConfigDescriptor.java index 34db13d2e9..20013adc67 100644 --- a/runelite-client/src/main/java/net/runelite/client/config/ConfigDescriptor.java +++ b/runelite-client/src/main/java/net/runelite/client/config/ConfigDescriptor.java @@ -24,17 +24,18 @@ */ package net.runelite.client.config; +import java.util.ArrayList; import java.util.Collection; public class ConfigDescriptor { private final ConfigGroup group; - private final Collection items; + private final Collection itemGroups; - public ConfigDescriptor(ConfigGroup group, Collection items) + public ConfigDescriptor(ConfigGroup group, Collection itemGroups) { this.group = group; - this.items = items; + this.itemGroups = itemGroups; } public ConfigGroup getGroup() @@ -42,8 +43,22 @@ public class ConfigDescriptor return group; } + public Collection getItemGroups() + { + return itemGroups; + } + public Collection getItems() { - return items; + Collection allItems = new ArrayList<>(); + for (ConfigItemsGroup g : itemGroups) + { + for (ConfigItemDescriptor item : g.getItems()) + { + allItems.add(item); + } + } + return allItems; } -} + +} \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/config/ConfigItem.java b/runelite-client/src/main/java/net/runelite/client/config/ConfigItem.java index b50094826e..44b93f2e1c 100644 --- a/runelite-client/src/main/java/net/runelite/client/config/ConfigItem.java +++ b/runelite-client/src/main/java/net/runelite/client/config/ConfigItem.java @@ -46,4 +46,7 @@ public @interface ConfigItem String warning() default ""; boolean secret() default false; + + String group() default ""; + } diff --git a/runelite-client/src/main/java/net/runelite/client/config/ConfigItemsGroup.java b/runelite-client/src/main/java/net/runelite/client/config/ConfigItemsGroup.java new file mode 100644 index 0000000000..51363c81c4 --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/config/ConfigItemsGroup.java @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2018, Craftiii4 + * 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. + * + * 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 COPYRIGHT OWNER 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. + */ +package net.runelite.client.config; + +import lombok.AccessLevel; +import lombok.Getter; +import java.util.ArrayList; +import java.util.Collection; + +public class ConfigItemsGroup +{ + + @Getter(AccessLevel.PUBLIC) + private final String group; + + @Getter(AccessLevel.PUBLIC) + private Collection items; + + public ConfigItemsGroup(String group) + { + this.group = group; + this.items = new ArrayList<>(); + } + + public void addItem(ConfigItemDescriptor item) + { + items.add(item); + } + +} diff --git a/runelite-client/src/main/java/net/runelite/client/config/ConfigManager.java b/runelite-client/src/main/java/net/runelite/client/config/ConfigManager.java index 7306ab0a51..57a4a9d0cc 100644 --- a/runelite-client/src/main/java/net/runelite/client/config/ConfigManager.java +++ b/runelite-client/src/main/java/net/runelite/client/config/ConfigManager.java @@ -47,7 +47,9 @@ import java.text.DateFormat; import java.text.SimpleDateFormat; import java.time.Duration; import java.time.Instant; +import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.Date; import java.util.HashMap; import java.util.List; @@ -459,7 +461,35 @@ public class ConfigManager .result()) .collect(Collectors.toList()); - return new ConfigDescriptor(group, items); + Collection itemGroups = new ArrayList<>(); + + for (ConfigItemDescriptor item : items) + { + String groupName = item.getItem().group(); + boolean found = false; + for (ConfigItemsGroup g : itemGroups) + { + if (g.getGroup().equals(groupName)) + { + g.addItem(item); + found = true; + break; + } + } + if (!found) + { + ConfigItemsGroup newGroup = new ConfigItemsGroup(groupName); + newGroup.addItem(item); + itemGroups.add(newGroup); + } + } + + itemGroups = itemGroups.stream().sorted((a, b) -> ComparisonChain.start() + .compare(a.getGroup(), b.getGroup()) + .result()) + .collect(Collectors.toList()); + + return new ConfigDescriptor(group, itemGroups); } /**