HasOrigin.java
package jasper.domain.proj;
import org.apache.commons.lang3.StringUtils;
import javax.annotation.Nullable;
import java.util.ArrayList;
import java.util.List;
import static jasper.domain.proj.Tag.tagOrigin;
import static java.util.Arrays.stream;
import static org.apache.commons.lang3.StringUtils.countMatches;
import static org.apache.commons.lang3.StringUtils.isBlank;
public interface HasOrigin {
String REGEX_NOT_BLANK = "@[a-z0-9]+(?:[.][a-z0-9]+)*";
String REGEX = "(?:" + REGEX_NOT_BLANK + ")?";
int ORIGIN_LEN = 64;
String getOrigin();
void setOrigin(String origin);
static String origin(String origin) {
if (origin == null) return "";
if (origin.equals("default")) return "";
return origin;
}
static String formatOrigin(Object origin) {
if (isBlank((String) origin)) return "default";
return origin.toString();
}
static String subOrigin(String local, String origin) {
if (local == null) local = "";
if (origin == null) origin = "";
if (isBlank(local)) return origin;
if (isBlank(origin)) return local;
if (origin.startsWith("@")) origin = origin.substring(1);
return local + '.' + origin;
}
static int nesting(String origin) {
if (isBlank(origin) || origin.equals("@")) return 0;
return countMatches(origin, '.') + 1;
}
static String[] parts(String origin) {
if (isBlank(origin)) return new String[]{ "" };
return origin.substring(1).split("\\.");
}
static String parentOrigin(String origin) {
if (isBlank(origin)) return "";
if (!origin.contains(".")) return "";
return origin.substring(0, origin.lastIndexOf("."));
}
static String fromParts(String ...parts) {
if (parts == null) return "";
if (parts.length == 0) return "";
if (parts.length == 1 && isBlank(parts[0])) return "";
return "@" + String.join(".",
stream(parts)
.map(p -> p.replaceAll("[@]", ""))
.filter(StringUtils::isNotBlank)
.toList());
}
static boolean isSubOrigin(String local, String origin) {
if (isBlank(local)) return true;
origin = tagOrigin(origin);
if (isBlank(origin)) return isBlank(local);
if (origin.equals(local)) return true;
return origin.startsWith(local+".");
}
static List<String> originHierarchy(@Nullable Object o) {
var origin = origin((String) o);
if (isBlank(origin)) return List.of("");
var result = new ArrayList<String>();
result.add(origin);
while (origin.contains(".")) {
origin = origin.substring(0, origin.lastIndexOf("."));
result.add(origin);
}
result.add("");
return result;
}
}