/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.uberfire.plugin;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import jsinterop.annotations.JsIgnore;
import jsinterop.annotations.JsType;
import static org.uberfire.commons.validation.PortablePreconditions.checkNotNull;
/**
* Utilities for working with external (GWT-compiled) plugins.
*/
public class PluginUtil {
private PluginUtil() {
}
/**
* {@link List} is a {@link JsType} but {@link Collection#iterator()} is
* {@link JsIgnore}d and therefore not exported to JavaScript.
* <p>
* This method takes a list and converts it to a new list so it can be
* iterated over in the current script (e.g. using enhanced for loops), even
* if the instance was provided by an external (GWT-compiled) script.
* @param externalList A list, possibly provided by an external script. Must not be null.
* @return an immutable list containing the original elements of the
* provided list
*/
public static <T> List<T> ensureIterable(List<T> externalList) {
checkNotNull("externalList",
externalList);
// toArray(T[]) is @JsIgnored
@SuppressWarnings("unchecked")
final List<T> tmp = (List<T>) Arrays.asList(externalList.toArray());
return Collections.unmodifiableList(tmp);
}
/**
* {@link Set} is a {@link JsType} but {@link Collection#iterator()} is
* {@link JsIgnore}d and therefore not exported to JavaScript.
* <p>
* This method takes a set and converts it to a new set so it can be
* iterated over in the current script (e.g. using enhanced for loops), even
* if the instance was provided by an external (GWT-compiled) script.
* @param externalSet A set, possibly provided by an external script. Must not be null.
* @return an immutable set containing the original elements of the provided
* set
*/
public static <T> Set<T> ensureIterable(Set<T> externalSet) {
checkNotNull("externalSet",
externalSet);
// toArray(T[]) is @JsIgnored
@SuppressWarnings("unchecked")
final List<T> tmp = (List<T>) Arrays.asList(externalSet.toArray());
return Collections.unmodifiableSet(new HashSet<T>(tmp));
}
/**
* {@link Integer} is not a {@link JsType} and can't be shared across
* scripts.
* <p>
* This method converts a regular int to an {@link Integer} using -1 as a
* placeholder for null.
* @param value
* @return boxed {@link Integer}, null if provided value is -1.
*/
public static Integer toInteger(int value) {
return (value != -1) ? value : null;
}
}