Editor map fixes
This commit is contained in:
parent
ee907f1d6a
commit
13c5784454
@ -23,12 +23,19 @@ public class CommandEditContainer<O, V> extends CommandEditAbstract<O, V>
|
|||||||
if (property.isEditable())
|
if (property.isEditable())
|
||||||
{
|
{
|
||||||
this.addChild(new CommandEditContainerAdd<O, V>(settings, property));
|
this.addChild(new CommandEditContainerAdd<O, V>(settings, property));
|
||||||
|
|
||||||
|
// These are not suitable for maps.
|
||||||
|
if (property.getValueType().isContainerCollection())
|
||||||
|
{
|
||||||
this.addChild(new CommandEditContainerInsert<O, V>(settings, property));
|
this.addChild(new CommandEditContainerInsert<O, V>(settings, property));
|
||||||
this.addChild(new CommandEditContainerSet<O, V>(settings, property));
|
this.addChild(new CommandEditContainerSet<O, V>(settings, property));
|
||||||
|
}
|
||||||
|
|
||||||
this.addChild(new CommandEditContainerRemove<O, V>(settings, property));
|
this.addChild(new CommandEditContainerRemove<O, V>(settings, property));
|
||||||
this.addChild(new CommandEditContainerRemoveIndex<O, V>(settings, property));
|
this.addChild(new CommandEditContainerRemoveIndex<O, V>(settings, property));
|
||||||
|
|
||||||
if ( ! property.getValueType().isContainerSorted() && property.getValueType().getContainerComparator() == null)
|
// The container must not be sorted, and must be ordered.
|
||||||
|
if ( ! property.getValueType().isContainerSorted() && property.getValueType().getContainerComparator() == null && property.getValueType().isContainerOrdered())
|
||||||
{
|
{
|
||||||
this.addChild(new CommandEditContainerMove<O, V>(settings, property));
|
this.addChild(new CommandEditContainerMove<O, V>(settings, property));
|
||||||
this.addChild(new CommandEditContainerSwap<O, V>(settings, property));
|
this.addChild(new CommandEditContainerSwap<O, V>(settings, property));
|
||||||
|
@ -46,13 +46,18 @@ public abstract class CommandEditContainerAbstract<O, V> extends CommandEditAbst
|
|||||||
public void perform() throws MassiveException
|
public void perform() throws MassiveException
|
||||||
{
|
{
|
||||||
// Create
|
// Create
|
||||||
V container = this.getProperty().getRaw(this.getObject());
|
V before = this.getProperty().getRaw(this.getObject());
|
||||||
List<Object> elements = this.getValueType().getContainerElementsOrdered(container);
|
|
||||||
|
// We must use a container of the correct type.
|
||||||
|
// Otherwise the elements list for maps,
|
||||||
|
// could have two entries with the same key.
|
||||||
|
// That obviously caused issues.
|
||||||
|
V container = ContainerUtil.getCopy(before);
|
||||||
|
|
||||||
// Alter
|
// Alter
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
this.alter(elements);
|
this.alter(container);
|
||||||
}
|
}
|
||||||
catch (MassiveException e)
|
catch (MassiveException e)
|
||||||
{
|
{
|
||||||
@ -64,8 +69,8 @@ public abstract class CommandEditContainerAbstract<O, V> extends CommandEditAbst
|
|||||||
}
|
}
|
||||||
|
|
||||||
// After
|
// After
|
||||||
elements = this.getValueType().getContainerElementsOrdered(elements);
|
|
||||||
V after = this.getValueType().createNewInstance();
|
V after = this.getValueType().createNewInstance();
|
||||||
|
List<Object> elements = this.getValueType().getContainerElementsOrdered(container);
|
||||||
ContainerUtil.addElements(after, elements);
|
ContainerUtil.addElements(after, elements);
|
||||||
|
|
||||||
// Apply
|
// Apply
|
||||||
@ -135,8 +140,21 @@ public abstract class CommandEditContainerAbstract<O, V> extends CommandEditAbst
|
|||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
// ABSTRACT
|
// ABSTRACT
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
// Not actually abstract, but one of these must be implemented;
|
||||||
|
|
||||||
public abstract void alter(List<Object> elements) throws MassiveException;
|
public void alter(V container) throws MassiveException
|
||||||
|
{
|
||||||
|
List<Object> elements = toElements(container);
|
||||||
|
|
||||||
|
this.alterElements(elements);
|
||||||
|
|
||||||
|
ContainerUtil.setElements(container, elements);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void alterElements(List<Object> elements) throws MassiveException
|
||||||
|
{
|
||||||
|
throw new MassiveException().addMsg("<b>Not yet implemented.");
|
||||||
|
}
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
// PARAMETER
|
// PARAMETER
|
||||||
@ -160,17 +178,17 @@ public abstract class CommandEditContainerAbstract<O, V> extends CommandEditAbst
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Type<Object> keyType = innerType.getInnerType(0);
|
Type<Object> keyType = innerType.getInnerType(innerType.getIndexUser(0));
|
||||||
Type<Object> valueType = innerType.getInnerType(1);
|
Type<Object> valueType = innerType.getInnerType(innerType.getIndexUser(1));
|
||||||
if (strict)
|
if (strict)
|
||||||
{
|
{
|
||||||
this.addParameter(keyType);
|
this.addParameter(keyType);
|
||||||
this.addParameter(valueType);
|
this.addParameter(valueType, true);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
this.addParameter(null, TypeNullable.get(keyType, "any", "all"), keyType.getTypeName(), "any");
|
this.addParameter(null, TypeNullable.get(keyType, "any", "all"), keyType.getTypeName(), "any");
|
||||||
this.addParameter(null, TypeNullable.get(valueType, "any", "all"), valueType.getTypeName(), "any");
|
this.addParameter(null, TypeNullable.get(valueType, "any", "all"), valueType.getTypeName(), "any", true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -183,10 +201,18 @@ public abstract class CommandEditContainerAbstract<O, V> extends CommandEditAbst
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Object key = this.readArg();
|
Object key = this.readArgAt(this.getValueInnerType().getIndexTech(0));
|
||||||
Object value = this.readArg();
|
Object value = this.readArgAt(this.getValueInnerType().getIndexTech(1));
|
||||||
return new SimpleImmutableEntry<Object, Object>(key, value);
|
return new SimpleImmutableEntry<Object, Object>(key, value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// ELEMENTS UTIL
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
public List<Object> toElements(V container)
|
||||||
|
{
|
||||||
|
return this.getValueType().getContainerElementsOrdered(container);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,7 @@
|
|||||||
package com.massivecraft.massivecore.command.editor;
|
package com.massivecraft.massivecore.command.editor;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import com.massivecraft.massivecore.MassiveException;
|
import com.massivecraft.massivecore.MassiveException;
|
||||||
|
import com.massivecraft.massivecore.util.ContainerUtil;
|
||||||
|
|
||||||
public class CommandEditContainerAdd<O, V> extends CommandEditContainerAbstract<O, V>
|
public class CommandEditContainerAdd<O, V> extends CommandEditContainerAbstract<O, V>
|
||||||
{
|
{
|
||||||
@ -27,13 +26,13 @@ public class CommandEditContainerAdd<O, V> extends CommandEditContainerAbstract<
|
|||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void alter(List<Object> elements) throws MassiveException
|
public void alter(V container) throws MassiveException
|
||||||
{
|
{
|
||||||
// Args
|
// Args
|
||||||
Object element = this.readElement();
|
Object element = this.readElement();
|
||||||
|
|
||||||
// Alter
|
// Alter
|
||||||
elements.add(element);
|
ContainerUtil.addElement(container, element);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,7 @@
|
|||||||
package com.massivecraft.massivecore.command.editor;
|
package com.massivecraft.massivecore.command.editor;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import com.massivecraft.massivecore.MassiveException;
|
import com.massivecraft.massivecore.MassiveException;
|
||||||
|
import com.massivecraft.massivecore.util.ContainerUtil;
|
||||||
|
|
||||||
public class CommandEditContainerClear<O, V> extends CommandEditContainerAbstract<O, V>
|
public class CommandEditContainerClear<O, V> extends CommandEditContainerAbstract<O, V>
|
||||||
{
|
{
|
||||||
@ -21,10 +20,10 @@ public class CommandEditContainerClear<O, V> extends CommandEditContainerAbstrac
|
|||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void alter(List<Object> elements) throws MassiveException
|
public void alter(V container) throws MassiveException
|
||||||
{
|
{
|
||||||
// Apply
|
// Apply
|
||||||
elements.clear();
|
ContainerUtil.clear(container);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -26,7 +26,7 @@ public class CommandEditContainerInsert<O, V> extends CommandEditContainerAbstra
|
|||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void alter(List<Object> elements) throws MassiveException
|
public void alterElements(List<Object> elements) throws MassiveException
|
||||||
{
|
{
|
||||||
// Args
|
// Args
|
||||||
int index = this.readArg();
|
int index = this.readArg();
|
||||||
|
@ -26,7 +26,7 @@ public class CommandEditContainerMove<O, V> extends CommandEditContainerAbstract
|
|||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void alter(List<Object> elements) throws MassiveException
|
public void alterElements(List<Object> elements) throws MassiveException
|
||||||
{
|
{
|
||||||
// Args
|
// Args
|
||||||
int indexFrom = this.readArg();
|
int indexFrom = this.readArg();
|
||||||
|
@ -2,6 +2,7 @@ package com.massivecraft.massivecore.command.editor;
|
|||||||
|
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
|
|
||||||
import com.massivecraft.massivecore.MassiveException;
|
import com.massivecraft.massivecore.MassiveException;
|
||||||
@ -27,15 +28,15 @@ public class CommandEditContainerRemove<O, V> extends CommandEditContainerAbstra
|
|||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void alter(List<Object> elements) throws MassiveException
|
public void alter(V container) throws MassiveException
|
||||||
{
|
{
|
||||||
if (this.isCollection())
|
if (this.isCollection())
|
||||||
{
|
{
|
||||||
this.alterCollection(elements);
|
this.alterCollection((List<?>) container);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
this.alterMap(elements);
|
this.alterMap((Map<?, ?>)container);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -43,7 +44,7 @@ public class CommandEditContainerRemove<O, V> extends CommandEditContainerAbstra
|
|||||||
// OVERRIDE > COLLECTION
|
// OVERRIDE > COLLECTION
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
|
||||||
public void alterCollection(List<Object> elements) throws MassiveException
|
public void alterCollection(List<?> elements) throws MassiveException
|
||||||
{
|
{
|
||||||
// Args
|
// Args
|
||||||
Object element = this.readElement();
|
Object element = this.readElement();
|
||||||
@ -62,7 +63,7 @@ public class CommandEditContainerRemove<O, V> extends CommandEditContainerAbstra
|
|||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public void alterMap(List<Object> elements) throws MassiveException
|
public void alterMap(Map<?, ?> elements) throws MassiveException
|
||||||
{
|
{
|
||||||
// Args
|
// Args
|
||||||
Object key = this.readArg();
|
Object key = this.readArg();
|
||||||
@ -72,7 +73,7 @@ public class CommandEditContainerRemove<O, V> extends CommandEditContainerAbstra
|
|||||||
if (key == null && value == null) throw new MassiveException().addMsg("<b>Please supply key and/or value.");
|
if (key == null && value == null) throw new MassiveException().addMsg("<b>Please supply key and/or value.");
|
||||||
|
|
||||||
// Alter
|
// Alter
|
||||||
for (Iterator<?> it = elements.iterator(); it.hasNext();)
|
for (Iterator<?> it = elements.entrySet().iterator(); it.hasNext();)
|
||||||
{
|
{
|
||||||
Entry<Object, Object> other = (Entry<Object, Object>) it.next();
|
Entry<Object, Object> other = (Entry<Object, Object>) it.next();
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@ public class CommandEditContainerRemoveIndex<O, V> extends CommandEditContainerA
|
|||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void alter(List<Object> elements) throws MassiveException
|
public void alterElements(List<Object> elements) throws MassiveException
|
||||||
{
|
{
|
||||||
// Args
|
// Args
|
||||||
int index = this.readArg();
|
int index = this.readArg();
|
||||||
|
@ -26,7 +26,7 @@ public class CommandEditContainerSet<O, V> extends CommandEditContainerAbstract<
|
|||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void alter(List<Object> elements) throws MassiveException
|
public void alterElements(List<Object> elements) throws MassiveException
|
||||||
{
|
{
|
||||||
// Args
|
// Args
|
||||||
int index = this.readArg();
|
int index = this.readArg();
|
||||||
|
@ -27,7 +27,7 @@ public class CommandEditContainerSwap<O, V> extends CommandEditContainerAbstract
|
|||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void alter(List<Object> elements) throws MassiveException
|
public void alterElements(List<Object> elements) throws MassiveException
|
||||||
{
|
{
|
||||||
// Args
|
// Args
|
||||||
int indexOne = this.readArg();
|
int indexOne = this.readArg();
|
||||||
|
@ -35,6 +35,11 @@ public interface Type<T>
|
|||||||
public void setInnerTypes(Type<?>... innerTypes);
|
public void setInnerTypes(Type<?>... innerTypes);
|
||||||
public void setInnerType(Type<?> innerType);
|
public void setInnerType(Type<?> innerType);
|
||||||
|
|
||||||
|
public void setUserOrder(List<Integer> userOrder);
|
||||||
|
public void setUserOrder(Integer... userOrder);
|
||||||
|
public int getIndexUser(int indexTechy);
|
||||||
|
public int getIndexTech(int indexUser);
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
// WRITE VISUAL COLOR
|
// WRITE VISUAL COLOR
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
@ -81,6 +81,22 @@ public abstract class TypeAbstract<T> implements Type<T>
|
|||||||
public void setInnerTypes(Type<?>... innerTypes) { this.setInnerTypes(Arrays.asList(innerTypes)); };
|
public void setInnerTypes(Type<?>... innerTypes) { this.setInnerTypes(Arrays.asList(innerTypes)); };
|
||||||
public void setInnerType(Type<?> innerType) { this.setInnerTypes(innerType); }
|
public void setInnerType(Type<?> innerType) { this.setInnerTypes(innerType); }
|
||||||
|
|
||||||
|
private List<Integer> userOrder = null;
|
||||||
|
@Override public void setUserOrder(List<Integer> userOrder) { this.userOrder = userOrder; }
|
||||||
|
@Override public void setUserOrder(Integer... userOrder) { this.setUserOrder(Arrays.asList(userOrder)); }
|
||||||
|
@Override
|
||||||
|
public int getIndexUser(int indexTechy)
|
||||||
|
{
|
||||||
|
if (this.userOrder == null) return indexTechy;
|
||||||
|
return userOrder.get(indexTechy);
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public int getIndexTech(int indexUser)
|
||||||
|
{
|
||||||
|
if (this.userOrder == null) return indexUser;
|
||||||
|
return userOrder.indexOf(indexUser);
|
||||||
|
}
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
// WRITE VISUAL COLOR
|
// WRITE VISUAL COLOR
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
@ -139,6 +139,7 @@ public abstract class TypeCombined<T> extends TypeAbstract<T>
|
|||||||
// WRITE VISUAL
|
// WRITE VISUAL
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
@Override
|
@Override
|
||||||
public String getVisualInner(T value, CommandSender sender)
|
public String getVisualInner(T value, CommandSender sender)
|
||||||
{
|
{
|
||||||
@ -146,9 +147,10 @@ public abstract class TypeCombined<T> extends TypeAbstract<T>
|
|||||||
List<String> parts = new MassiveList<String>();
|
List<String> parts = new MassiveList<String>();
|
||||||
|
|
||||||
// Fill
|
// Fill
|
||||||
for (Entry<Type<?>, Object> entry : this.splitEntries(value))
|
List<Entry<Type<?>, Object>> entries = this.splitEntries(value);
|
||||||
|
for (int i = 0; i < entries.size(); i++)
|
||||||
{
|
{
|
||||||
@SuppressWarnings("unchecked")
|
Entry<Type<?>, Object> entry = entries.get(this.getIndexTech(i));
|
||||||
Type<Object> type = (Type<Object>) entry.getKey();
|
Type<Object> type = (Type<Object>) entry.getKey();
|
||||||
String part = type.getVisual(entry.getValue(), sender);
|
String part = type.getVisual(entry.getValue(), sender);
|
||||||
if ( ! this.isVisualNullIncluded() && part == null) continue;
|
if ( ! this.isVisualNullIncluded() && part == null) continue;
|
||||||
@ -231,7 +233,7 @@ public abstract class TypeCombined<T> extends TypeAbstract<T>
|
|||||||
for (int i = 0; i < innerArgs.size(); i++)
|
for (int i = 0; i < innerArgs.size(); i++)
|
||||||
{
|
{
|
||||||
String innerArg = innerArgs.get(i);
|
String innerArg = innerArgs.get(i);
|
||||||
Type<?> innerType = this.getInnerTypes().get(i);
|
Type<?> innerType = this.getInnerTypes().get(getIndexUser(i));
|
||||||
Object part = innerType.read(innerArg, sender);
|
Object part = innerType.read(innerArg, sender);
|
||||||
ret.add(part);
|
ret.add(part);
|
||||||
}
|
}
|
||||||
@ -287,7 +289,7 @@ public abstract class TypeCombined<T> extends TypeAbstract<T>
|
|||||||
List<String> args = this.getArgs(string);
|
List<String> args = this.getArgs(string);
|
||||||
if (args.isEmpty()) return null;
|
if (args.isEmpty()) return null;
|
||||||
if (args.size() > this.getInnerTypes().size()) return null;
|
if (args.size() > this.getInnerTypes().size()) return null;
|
||||||
return this.getInnerType(args.size() - 1);
|
return this.getInnerType(getIndexTech(args.size() - 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
@ -5,14 +5,15 @@ import java.util.LinkedHashMap;
|
|||||||
import java.util.LinkedHashSet;
|
import java.util.LinkedHashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
|
import java.util.Set;
|
||||||
import com.massivecraft.massivecore.collections.MassiveSet;
|
|
||||||
|
|
||||||
import java.util.SortedMap;
|
import java.util.SortedMap;
|
||||||
import java.util.SortedSet;
|
import java.util.SortedSet;
|
||||||
|
|
||||||
|
import com.massivecraft.massivecore.collections.MassiveList;
|
||||||
|
import com.massivecraft.massivecore.collections.MassiveMap;
|
||||||
|
import com.massivecraft.massivecore.collections.MassiveSet;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The ContainerUtil provides an imaginary super class to Collection and Map.
|
* The ContainerUtil provides an imaginary super class to Collection and Map.
|
||||||
* In Java they do not have a common interface yet many methods are similar and exists in both.
|
* In Java they do not have a common interface yet many methods are similar and exists in both.
|
||||||
@ -37,12 +38,22 @@ public class ContainerUtil
|
|||||||
|
|
||||||
public static boolean isCollection(Object container)
|
public static boolean isCollection(Object container)
|
||||||
{
|
{
|
||||||
return container instanceof Collection<?>;
|
return container instanceof Collection;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isMap(Object container)
|
public static boolean isMap(Object container)
|
||||||
{
|
{
|
||||||
return container instanceof Map<?, ?>;
|
return container instanceof Map;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isList(Object container)
|
||||||
|
{
|
||||||
|
return container instanceof List;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isSet(Object container)
|
||||||
|
{
|
||||||
|
return container instanceof Set;
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
@ -82,6 +93,20 @@ public class ContainerUtil
|
|||||||
return (M)container;
|
return (M)container;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public static <S extends Set<?>> S asSet(Object container)
|
||||||
|
{
|
||||||
|
if ( ! isSet(container)) return null;
|
||||||
|
return (S)container;
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public static <L extends List<?>> L asList(Object container)
|
||||||
|
{
|
||||||
|
if ( ! isList(container)) return null;
|
||||||
|
return (L)container;
|
||||||
|
}
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
// METHODS > SIZE
|
// METHODS > SIZE
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
@ -234,4 +259,40 @@ public class ContainerUtil
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------- //
|
||||||
|
// COPY
|
||||||
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
// For this method we must make a distinction between list and set.
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public static <V> V getCopy(V container)
|
||||||
|
{
|
||||||
|
List<Object> list = asList(container);
|
||||||
|
if (list != null)
|
||||||
|
{
|
||||||
|
return (V) new MassiveList<>(list);
|
||||||
|
}
|
||||||
|
|
||||||
|
Set<Object> set = asSet(container);
|
||||||
|
if (set != null)
|
||||||
|
{
|
||||||
|
return (V) new MassiveSet<>(set);
|
||||||
|
}
|
||||||
|
|
||||||
|
Collection<Object> collection = asCollection(container);
|
||||||
|
if (collection != null)
|
||||||
|
{
|
||||||
|
// Use list as fallback, when neither list nor set.
|
||||||
|
return (V) new MassiveList<>(collection);
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<Object, Object> map = asMap(container);
|
||||||
|
if (map != null)
|
||||||
|
{
|
||||||
|
return (V) new MassiveMap<>(map);
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user