Some refactoring and cleaning, string utils.
This commit is contained in:
@@ -114,12 +114,12 @@ public class Convert {
|
||||
if (o == null) return def;
|
||||
if (o instanceof String) return ((String) o);
|
||||
|
||||
if (o instanceof Float) return Support.str((float) o);
|
||||
if (o instanceof Float) return Str.val((float) o);
|
||||
|
||||
if (o instanceof Double) return Support.str((double) o);
|
||||
if (o instanceof Double) return Str.val((double) o);
|
||||
|
||||
if (o instanceof Class<?>) {
|
||||
return Support.str(o);
|
||||
return Str.val(o);
|
||||
}
|
||||
|
||||
return o.toString();
|
||||
|
||||
@@ -65,7 +65,7 @@ public class Reflect {
|
||||
return classes;
|
||||
}
|
||||
|
||||
throw new RuntimeException(Support.str(clazz) + " is not generic.");
|
||||
throw new RuntimeException(Str.val(clazz) + " is not generic.");
|
||||
}
|
||||
|
||||
|
||||
@@ -86,7 +86,7 @@ public class Reflect {
|
||||
final int modif = fld.getModifiers();
|
||||
|
||||
if (!Modifier.isFinal(modif) || !Modifier.isStatic(modif)) {
|
||||
throw new ReflectiveOperationException("The " + fieldName + " field of " + Support.str(objClass) + " must be static and final!");
|
||||
throw new ReflectiveOperationException("The " + fieldName + " field of " + Str.val(objClass) + " must be static and final!");
|
||||
}
|
||||
|
||||
fld.setAccessible(true);
|
||||
|
||||
@@ -0,0 +1,231 @@
|
||||
package mightypork.utils;
|
||||
|
||||
|
||||
import mightypork.utils.annotations.Alias;
|
||||
import mightypork.utils.math.AlignX;
|
||||
|
||||
|
||||
/**
|
||||
* General purpose string utilities
|
||||
*
|
||||
* @author Ondřej Hruška (MightyPork)
|
||||
*/
|
||||
public class Str {
|
||||
|
||||
public static String fromLastDot(String s)
|
||||
{
|
||||
return fromLast(s, '.');
|
||||
}
|
||||
|
||||
|
||||
public static String toLastDot(String s)
|
||||
{
|
||||
return toLast(s, '.');
|
||||
}
|
||||
|
||||
|
||||
public static String fromLast(String s, char c)
|
||||
{
|
||||
if (s == null) return null;
|
||||
if (s.lastIndexOf(c) == -1) return "";
|
||||
return s.substring(s.lastIndexOf(c) + 1, s.length());
|
||||
}
|
||||
|
||||
|
||||
public static String toLast(String s, char c)
|
||||
{
|
||||
if (s == null) return null;
|
||||
if (s.lastIndexOf(c) == -1) return s;
|
||||
return s.substring(0, s.lastIndexOf(c));
|
||||
}
|
||||
|
||||
|
||||
public static String fromFirst(String s, char c)
|
||||
{
|
||||
if (s == null) return null;
|
||||
if (s.indexOf(c) == -1) return "";
|
||||
return s.substring(s.indexOf(c) + 1, s.length());
|
||||
}
|
||||
|
||||
|
||||
public static String toFirst(String s, char c)
|
||||
{
|
||||
if (s == null) return null;
|
||||
if (s.indexOf(c) == -1) return s;
|
||||
return s.substring(0, s.indexOf(c));
|
||||
}
|
||||
|
||||
|
||||
public static String fromEnd(String s, int chars)
|
||||
{
|
||||
return s.substring(s.length() - chars, s.length());
|
||||
}
|
||||
|
||||
|
||||
public static String fromStart(String s, int chars)
|
||||
{
|
||||
return s.substring(0, chars);
|
||||
}
|
||||
|
||||
|
||||
public static String pad(String s, int length)
|
||||
{
|
||||
return pad(s, length, AlignX.LEFT);
|
||||
}
|
||||
|
||||
|
||||
public static String pad(String s, int length, AlignX align)
|
||||
{
|
||||
return pad(s, length, align, ' ');
|
||||
}
|
||||
|
||||
|
||||
public static String pad(String s, int length, AlignX align, char fill)
|
||||
{
|
||||
final String filling = repeat("" + fill, length);
|
||||
|
||||
switch (align) {
|
||||
case LEFT:
|
||||
s += filling;
|
||||
return fromStart(s, length);
|
||||
|
||||
case RIGHT:
|
||||
s += filling;
|
||||
return fromEnd(s, length);
|
||||
|
||||
case CENTER:
|
||||
|
||||
if (s.length() >= length) return s;
|
||||
|
||||
s = filling + s + filling;
|
||||
|
||||
final int cut = (int) (s.length() / 2D - length / 2D);
|
||||
return s.substring(cut, s.length() - cut);
|
||||
}
|
||||
|
||||
throw new IllegalArgumentException("Impossible error.");
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Repeat a string
|
||||
*
|
||||
* @param repeated string
|
||||
* @param count
|
||||
* @return output
|
||||
*/
|
||||
public static String repeat(String repeated, int count)
|
||||
{
|
||||
String s = "";
|
||||
for (int i = 0; i < count; i++)
|
||||
s += repeated;
|
||||
return s;
|
||||
}
|
||||
|
||||
|
||||
public static boolean isValidFilenameChar(char ch)
|
||||
{
|
||||
return isValidFilenameString(Character.toString(ch));
|
||||
}
|
||||
|
||||
|
||||
public static boolean isValidFilenameString(String filename)
|
||||
{
|
||||
return filename.matches("[a-zA-Z0-9 +\\-.,_%@#!]+");
|
||||
}
|
||||
|
||||
|
||||
public static String ellipsisStart(String orig, int length)
|
||||
{
|
||||
if (orig.length() > length) {
|
||||
orig = "\u2026" + orig.substring(length, orig.length());
|
||||
}
|
||||
return orig;
|
||||
}
|
||||
|
||||
|
||||
public static String ellipsisEnd(String orig, int length)
|
||||
{
|
||||
if (orig.length() > length) {
|
||||
orig = orig.substring(0, length - 1) + "\u2026";
|
||||
}
|
||||
return orig;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Convert a class to string, preserving name and outer class, but excluding
|
||||
* path.
|
||||
*
|
||||
* @param cls the class
|
||||
* @return class name
|
||||
*/
|
||||
public static String val(Class<?> cls)
|
||||
{
|
||||
final Alias ln = cls.getAnnotation(Alias.class);
|
||||
if (ln != null) {
|
||||
return ln.name();
|
||||
}
|
||||
|
||||
String name = cls.getName();
|
||||
|
||||
String sep = "";
|
||||
|
||||
if (name.contains("$")) {
|
||||
name = name.substring(name.lastIndexOf("$") + 1);
|
||||
sep = "$";
|
||||
} else {
|
||||
name = name.substring(name.lastIndexOf(".") + 1);
|
||||
sep = ".";
|
||||
}
|
||||
|
||||
final Class<?> enclosing = cls.getEnclosingClass();
|
||||
|
||||
return (enclosing == null ? "" : Str.val(enclosing) + sep) + name;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Convert double to string, remove the mess at the end.
|
||||
*
|
||||
* @param d double
|
||||
* @return string
|
||||
*/
|
||||
public static String val(Double d)
|
||||
{
|
||||
String s = d.toString();
|
||||
s = s.replace(',', '.');
|
||||
s = s.replaceAll("([0-9]+\\.[0-9]+)00+[0-9]+", "$1");
|
||||
s = s.replaceAll("0+$", "");
|
||||
s = s.replaceAll("\\.$", "");
|
||||
return s;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Convert object to string. If the object overrides toString(), it is
|
||||
* caled. Otherwise it's class name is converted to string.
|
||||
*
|
||||
* @param o object
|
||||
* @return string representation
|
||||
*/
|
||||
public static String val(Object o)
|
||||
{
|
||||
if (o == null) return "<null>";
|
||||
|
||||
boolean hasToString = false;
|
||||
|
||||
try {
|
||||
hasToString = (o.getClass().getMethod("toString").getDeclaringClass() != Object.class);
|
||||
} catch (final Throwable t) {
|
||||
// oh well..
|
||||
}
|
||||
|
||||
if (hasToString) {
|
||||
return o.toString();
|
||||
} else {
|
||||
|
||||
return val(o.getClass());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -9,8 +9,6 @@ import java.util.Iterator;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import mightypork.utils.annotations.Alias;
|
||||
|
||||
|
||||
/**
|
||||
* Miscelanous utilities
|
||||
@@ -201,97 +199,4 @@ public final class Support {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Convert a class to string, preserving name and outer class, but excluding
|
||||
* path.
|
||||
*
|
||||
* @param cls the class
|
||||
* @return class name
|
||||
*/
|
||||
public static String str(Class<?> cls)
|
||||
{
|
||||
final Alias ln = cls.getAnnotation(Alias.class);
|
||||
if (ln != null) {
|
||||
return ln.name();
|
||||
}
|
||||
|
||||
String name = cls.getName();
|
||||
|
||||
String sep = "";
|
||||
|
||||
if (name.contains("$")) {
|
||||
name = name.substring(name.lastIndexOf("$") + 1);
|
||||
sep = "$";
|
||||
} else {
|
||||
name = name.substring(name.lastIndexOf(".") + 1);
|
||||
sep = ".";
|
||||
}
|
||||
|
||||
final Class<?> enclosing = cls.getEnclosingClass();
|
||||
|
||||
return (enclosing == null ? "" : Support.str(enclosing) + sep) + name;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Convert double to string, remove the mess at the end.
|
||||
*
|
||||
* @param d double
|
||||
* @return string
|
||||
*/
|
||||
public static String str(Double d)
|
||||
{
|
||||
String s = d.toString();
|
||||
s = s.replace(',', '.');
|
||||
s = s.replaceAll("([0-9]+\\.[0-9]+)00+[0-9]+", "$1");
|
||||
s = s.replaceAll("0+$", "");
|
||||
s = s.replaceAll("\\.$", "");
|
||||
return s;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Convert float to string, remove the mess at the end.
|
||||
*
|
||||
* @param f float
|
||||
* @return string
|
||||
*/
|
||||
public static String str(Float f)
|
||||
{
|
||||
String s = f.toString();
|
||||
s = s.replaceAll("([0-9]+\\.[0-9]+)00+[0-9]+", "$1");
|
||||
s = s.replaceAll("0+$", "");
|
||||
s = s.replaceAll("\\.$", "");
|
||||
return s;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Convert object to string. If the object overrides toString(), it is
|
||||
* caled. Otherwise it's class name is converted to string.
|
||||
*
|
||||
* @param o object
|
||||
* @return string representation
|
||||
*/
|
||||
public static String str(Object o)
|
||||
{
|
||||
if (o == null) return "<null>";
|
||||
|
||||
boolean hasToString = false;
|
||||
|
||||
try {
|
||||
hasToString = (o.getClass().getMethod("toString").getDeclaringClass() != Object.class);
|
||||
} catch (final Throwable t) {
|
||||
// oh well..
|
||||
}
|
||||
|
||||
if (hasToString) {
|
||||
return o.toString();
|
||||
} else {
|
||||
|
||||
return str(o.getClass());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package mightypork.utils.eventbus;
|
||||
|
||||
|
||||
import mightypork.utils.annotations.Stub;
|
||||
import mightypork.utils.eventbus.events.flags.DelayedEvent;
|
||||
import mightypork.utils.eventbus.events.flags.DirectEvent;
|
||||
import mightypork.utils.eventbus.events.flags.NonConsumableEvent;
|
||||
@@ -58,8 +59,6 @@ public abstract class BusEvent<HANDLER> {
|
||||
throw new UnsupportedOperationException("Not consumable.");
|
||||
}
|
||||
|
||||
(new Throwable()).printStackTrace();
|
||||
|
||||
consumed = true;
|
||||
}
|
||||
|
||||
@@ -119,7 +118,9 @@ public abstract class BusEvent<HANDLER> {
|
||||
*
|
||||
* @param bus event bus instance
|
||||
*/
|
||||
@Stub
|
||||
public void onDispatchComplete(EventBus bus)
|
||||
{
|
||||
//
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,7 +10,7 @@ import java.util.concurrent.Delayed;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import mightypork.utils.Reflect;
|
||||
import mightypork.utils.Support;
|
||||
import mightypork.utils.Str;
|
||||
import mightypork.utils.eventbus.clients.DelegatingClient;
|
||||
import mightypork.utils.eventbus.events.flags.DelayedEvent;
|
||||
import mightypork.utils.eventbus.events.flags.DirectEvent;
|
||||
@@ -206,7 +206,7 @@ final public class EventBus implements Destroyable {
|
||||
final DelayQueueEntry dm = new DelayQueueEntry(delay, event);
|
||||
|
||||
if (shallLog(event)) {
|
||||
Log.f3(logMark + "Qu [" + Support.str(event) + "]" + (delay == 0 ? "" : (", delay: " + delay + "s")));
|
||||
Log.f3(logMark + "Qu [" + Str.val(event) + "]" + (delay == 0 ? "" : (", delay: " + delay + "s")));
|
||||
}
|
||||
|
||||
sendQueue.add(dm);
|
||||
@@ -224,7 +224,7 @@ final public class EventBus implements Destroyable {
|
||||
{
|
||||
assertLive();
|
||||
|
||||
if (shallLog(event)) Log.f3(logMark + "Di [" + Support.str(event) + "]");
|
||||
if (shallLog(event)) Log.f3(logMark + "Di [" + Str.val(event) + "]");
|
||||
|
||||
dispatch(event);
|
||||
}
|
||||
@@ -234,7 +234,7 @@ final public class EventBus implements Destroyable {
|
||||
{
|
||||
assertLive();
|
||||
|
||||
if (shallLog(event)) Log.f3(logMark + "Di->sub [" + Support.str(event) + "]");
|
||||
if (shallLog(event)) Log.f3(logMark + "Di->sub [" + Str.val(event) + "]");
|
||||
|
||||
doDispatch(delegatingClient.getChildClients(), event);
|
||||
}
|
||||
@@ -254,7 +254,7 @@ final public class EventBus implements Destroyable {
|
||||
|
||||
clients.add(client);
|
||||
|
||||
if (detailedLogging) Log.f3(logMark + "Client joined: " + Support.str(client));
|
||||
if (detailedLogging) Log.f3(logMark + "Client joined: " + Str.val(client));
|
||||
}
|
||||
|
||||
|
||||
@@ -269,7 +269,7 @@ final public class EventBus implements Destroyable {
|
||||
|
||||
clients.remove(client);
|
||||
|
||||
if (detailedLogging) Log.f3(logMark + "Client left: " + Support.str(client));
|
||||
if (detailedLogging) Log.f3(logMark + "Client left: " + Str.val(client));
|
||||
}
|
||||
|
||||
|
||||
@@ -278,7 +278,7 @@ final public class EventBus implements Destroyable {
|
||||
{
|
||||
try {
|
||||
if (detailedLogging) {
|
||||
Log.f3(logMark + "Setting up channel for new event type: " + Support.str(event.getClass()));
|
||||
Log.f3(logMark + "Setting up channel for new event type: " + Str.val(event.getClass()));
|
||||
}
|
||||
|
||||
final Class<?> listener = getEventListenerClass(event);
|
||||
@@ -290,13 +290,13 @@ final public class EventBus implements Destroyable {
|
||||
//channels.flush();
|
||||
|
||||
if (detailedLogging) {
|
||||
Log.f3(logMark + "Created new channel: " + Support.str(event.getClass()) + " -> " + Support.str(listener));
|
||||
Log.f3(logMark + "Created new channel: " + Str.val(event.getClass()) + " -> " + Str.val(listener));
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
} else {
|
||||
Log.w(logMark + "Could not create channel for event " + Support.str(event.getClass()));
|
||||
Log.w(logMark + "Could not create channel for event " + Str.val(event.getClass()));
|
||||
}
|
||||
|
||||
} catch (final Throwable t) {
|
||||
@@ -362,8 +362,8 @@ final public class EventBus implements Destroyable {
|
||||
break;
|
||||
}
|
||||
|
||||
if (!accepted) Log.e(logMark + "Not accepted by any channel: " + Support.str(event));
|
||||
if (!event.wasServed() && shallLog(event)) Log.w(logMark + "Not delivered: " + Support.str(event));
|
||||
if (!accepted) Log.e(logMark + "Not accepted by any channel: " + Str.val(event));
|
||||
if (!event.wasServed() && shallLog(event)) Log.w(logMark + "Not delivered: " + Str.val(event));
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
|
||||
import mightypork.utils.Reflect;
|
||||
import mightypork.utils.Support;
|
||||
import mightypork.utils.Str;
|
||||
import mightypork.utils.eventbus.clients.DelegatingClient;
|
||||
import mightypork.utils.eventbus.clients.ToggleableClient;
|
||||
import mightypork.utils.eventbus.events.flags.NonRejectableEvent;
|
||||
@@ -76,7 +76,7 @@ class EventChannel<EVENT extends BusEvent<CLIENT>, CLIENT> {
|
||||
|
||||
// avoid executing more times
|
||||
if (processed.contains(client)) {
|
||||
Log.w(EventBus.logMark + "Client already served: " + Support.str(client));
|
||||
Log.w(EventBus.logMark + "Client already served: " + Str.val(client));
|
||||
continue;
|
||||
}
|
||||
processed.add(client);
|
||||
@@ -203,6 +203,6 @@ class EventChannel<EVENT extends BusEvent<CLIENT>, CLIENT> {
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return "{ " + Support.str(eventClass) + " => " + Support.str(clientClass) + " }";
|
||||
return "{ " + Str.val(eventClass) + " => " + Str.val(clientClass) + " }";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ package mightypork.utils.eventbus.events;
|
||||
import mightypork.utils.eventbus.BusEvent;
|
||||
import mightypork.utils.eventbus.events.flags.DirectEvent;
|
||||
import mightypork.utils.eventbus.events.flags.NonConsumableEvent;
|
||||
import mightypork.utils.eventbus.events.flags.NonRejectableEvent;
|
||||
import mightypork.utils.interfaces.Destroyable;
|
||||
|
||||
|
||||
@@ -14,6 +15,7 @@ import mightypork.utils.interfaces.Destroyable;
|
||||
*/
|
||||
@DirectEvent
|
||||
@NonConsumableEvent
|
||||
@NonRejectableEvent
|
||||
public class DestroyEvent extends BusEvent<Destroyable> {
|
||||
|
||||
@Override
|
||||
|
||||
@@ -17,8 +17,8 @@ import java.io.UnsupportedEncodingException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import mightypork.utils.Str;
|
||||
import mightypork.utils.logging.Log;
|
||||
import mightypork.utils.string.StringUtil;
|
||||
import mightypork.utils.string.validation.StringFilter;
|
||||
|
||||
|
||||
@@ -234,7 +234,7 @@ public class FileUtil {
|
||||
|
||||
public static String getExtension(String file)
|
||||
{
|
||||
return StringUtil.fromLastChar(file, '.');
|
||||
return Str.fromLast(file, '.');
|
||||
}
|
||||
|
||||
|
||||
@@ -249,13 +249,13 @@ public class FileUtil {
|
||||
String ext, name;
|
||||
|
||||
try {
|
||||
ext = StringUtil.fromLastDot(filename);
|
||||
ext = Str.fromLastDot(filename);
|
||||
} catch (final StringIndexOutOfBoundsException e) {
|
||||
ext = "";
|
||||
}
|
||||
|
||||
try {
|
||||
name = StringUtil.toLastDot(filename);
|
||||
name = Str.toLastDot(filename);
|
||||
} catch (final StringIndexOutOfBoundsException e) {
|
||||
name = "";
|
||||
Log.w("Error extracting extension from file " + filename);
|
||||
@@ -402,13 +402,13 @@ public class FileUtil {
|
||||
|
||||
public static String getBasename(String name)
|
||||
{
|
||||
return StringUtil.toLastChar(StringUtil.fromLastChar(name, '/'), '.');
|
||||
return Str.toLast(Str.fromLast(name, '/'), '.');
|
||||
}
|
||||
|
||||
|
||||
public static String getFilename(String name)
|
||||
{
|
||||
return StringUtil.fromLastChar(name, '/');
|
||||
return Str.fromLast(name, '/');
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import mightypork.utils.Reflect;
|
||||
import mightypork.utils.Support;
|
||||
import mightypork.utils.Str;
|
||||
|
||||
|
||||
/**
|
||||
@@ -116,7 +116,7 @@ public class Ion {
|
||||
{
|
||||
if (!IonBinary.class.isAssignableFrom(objClass)) {
|
||||
if (!IonBundled.class.isAssignableFrom(objClass)) {
|
||||
throw new IllegalArgumentException("Cannot register directly: " + Support.str(objClass));
|
||||
throw new IllegalArgumentException("Cannot register directly: " + Str.val(objClass));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -135,7 +135,7 @@ public class Ion {
|
||||
{
|
||||
if (!IonBinary.class.isAssignableFrom(objClass)) {
|
||||
if (!IonBundled.class.isAssignableFrom(objClass)) {
|
||||
throw new IllegalArgumentException("Cannot register directly: " + Support.str(objClass));
|
||||
throw new IllegalArgumentException("Cannot register directly: " + Str.val(objClass));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -161,7 +161,7 @@ public class Ion {
|
||||
registerUsingMark(mark, objClass);
|
||||
|
||||
} catch (final Exception e) {
|
||||
throw new RuntimeException("Could not register " + Support.str(objClass) + " using an ION_MARK field.", e);
|
||||
throw new RuntimeException("Could not register " + Str.val(objClass) + " using an ION_MARK field.", e);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -223,7 +223,7 @@ public class Ion {
|
||||
}
|
||||
|
||||
if (classToMark.containsKey(objClass)) {
|
||||
throw new IllegalArgumentException(Support.str(objClass) + " is already registered.");
|
||||
throw new IllegalArgumentException(Str.val(objClass) + " is already registered.");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -376,7 +376,7 @@ public class Ion {
|
||||
inst.load(bundle);
|
||||
return inst;
|
||||
} catch (InstantiationException | IllegalAccessException e) {
|
||||
throw new IOException("Could not instantiate " + Support.str(objClass) + ".");
|
||||
throw new IOException("Could not instantiate " + Str.val(objClass) + ".");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -482,7 +482,7 @@ public class Ion {
|
||||
static void assertRegistered(Object obj)
|
||||
{
|
||||
if (!isRegistered(obj)) {
|
||||
throw new RuntimeException("Type not registered: " + Support.str(obj.getClass()));
|
||||
throw new RuntimeException("Type not registered: " + Str.val(obj.getClass()));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -7,13 +7,13 @@ import java.io.StringWriter;
|
||||
import java.util.HashMap;
|
||||
import java.util.logging.Level;
|
||||
|
||||
import mightypork.utils.Str;
|
||||
import mightypork.utils.annotations.FactoryMethod;
|
||||
import mightypork.utils.logging.monitors.LogMonitor;
|
||||
import mightypork.utils.logging.monitors.LogMonitorStdout;
|
||||
import mightypork.utils.logging.writers.ArchivingLog;
|
||||
import mightypork.utils.logging.writers.LogWriter;
|
||||
import mightypork.utils.logging.writers.SimpleLog;
|
||||
import mightypork.utils.string.StringUtil;
|
||||
|
||||
|
||||
/**
|
||||
@@ -315,7 +315,7 @@ public class Log {
|
||||
final long time_ms = (System.currentTimeMillis() - start_ms);
|
||||
final double time_s = time_ms / 1000D;
|
||||
final String time = String.format("%6.2f ", time_s);
|
||||
final String time_blank = StringUtil.repeat(" ", time.length());
|
||||
final String time_blank = Str.repeat(" ", time.length());
|
||||
|
||||
String prefix = "[ ? ]";
|
||||
|
||||
|
||||
@@ -9,8 +9,8 @@ import java.util.Comparator;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import mightypork.utils.Str;
|
||||
import mightypork.utils.files.FileUtil;
|
||||
import mightypork.utils.string.StringUtil;
|
||||
|
||||
|
||||
/**
|
||||
@@ -125,6 +125,6 @@ public class ArchivingLog extends SimpleLog {
|
||||
*/
|
||||
private String getSuffix()
|
||||
{
|
||||
return StringUtil.fromLastChar(getFile().toString(), '.');
|
||||
return Str.fromLast(getFile().toString(), '.');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package mightypork.utils.math.timing;
|
||||
|
||||
|
||||
import mightypork.utils.Support;
|
||||
import mightypork.utils.Str;
|
||||
|
||||
|
||||
/**
|
||||
@@ -57,7 +57,7 @@ public class Profiler {
|
||||
*/
|
||||
public static String endStr(long begun)
|
||||
{
|
||||
return Support.str(end(begun)) + " s";
|
||||
return Str.val(end(begun)) + " s";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,82 +0,0 @@
|
||||
package mightypork.utils.string;
|
||||
|
||||
|
||||
/**
|
||||
* General purpose string utilities
|
||||
*
|
||||
* @author Ondřej Hruška (MightyPork)
|
||||
*/
|
||||
public class StringUtil {
|
||||
|
||||
public static String fromLastDot(String s)
|
||||
{
|
||||
return fromLastChar(s, '.');
|
||||
}
|
||||
|
||||
|
||||
public static String toLastDot(String s)
|
||||
{
|
||||
return toLastChar(s, '.');
|
||||
}
|
||||
|
||||
|
||||
public static String fromLastChar(String s, char c)
|
||||
{
|
||||
if (s == null) return null;
|
||||
return s.substring(s.lastIndexOf(c) + 1, s.length());
|
||||
}
|
||||
|
||||
|
||||
public static String toLastChar(String s, char c)
|
||||
{
|
||||
if (s == null) return null;
|
||||
if (s.lastIndexOf(c) == -1) return s;
|
||||
return s.substring(0, s.lastIndexOf(c));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Repeat a string
|
||||
*
|
||||
* @param repeated string
|
||||
* @param count
|
||||
* @return output
|
||||
*/
|
||||
public static String repeat(String repeated, int count)
|
||||
{
|
||||
String s = "";
|
||||
for (int i = 0; i < count; i++)
|
||||
s += repeated;
|
||||
return s;
|
||||
}
|
||||
|
||||
|
||||
public static boolean isValidFilenameChar(char ch)
|
||||
{
|
||||
return isValidFilenameString(Character.toString(ch));
|
||||
}
|
||||
|
||||
|
||||
public static boolean isValidFilenameString(String filename)
|
||||
{
|
||||
return filename.matches("[a-zA-Z0-9 +\\-.,_%@#!]+");
|
||||
}
|
||||
|
||||
|
||||
public static String ellipsisStart(String orig, int length)
|
||||
{
|
||||
if (orig.length() > length) {
|
||||
orig = "\u2026" + orig.substring(length, orig.length());
|
||||
}
|
||||
return orig;
|
||||
}
|
||||
|
||||
|
||||
public static String ellipsisEnd(String orig, int length)
|
||||
{
|
||||
if (orig.length() > length) {
|
||||
orig = orig.substring(0, length - 1) + "\u2026";
|
||||
}
|
||||
return orig;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user