package me.desht.scrollingmenusign.util; import me.desht.dhutils.LogUtils; import me.desht.dhutils.MiscUtil; import me.desht.dhutils.UUIDFetcher; import me.desht.scrollingmenusign.SMSMenu; import me.desht.scrollingmenusign.ScrollingMenuSign; import me.desht.scrollingmenusign.views.SMSView; import org.bukkit.Bukkit; import java.util.*; public class UUIDMigration { public static void migrateToUUID(final ScrollingMenuSign plugin) { if (plugin.getConfig().getBoolean("sms.uuid_migration_done")) { return; } final Set<String> names = new HashSet<String>(); for (SMSMenu menu : plugin.getHandler().listMenus()) { if (!MiscUtil.looksLikeUUID(menu.getOwner())) { names.add(menu.getOwner()); } } for (SMSView view : plugin.getViewManager().listViews()) { if (!MiscUtil.looksLikeUUID(view.getAttributeAsString(SMSView.OWNER))) { names.add(view.getAttributeAsString(SMSView.OWNER)); } } if (!names.isEmpty()) { Bukkit.getScheduler().runTaskAsynchronously(plugin, new AsyncTask(plugin, names)); } } private static class AsyncTask implements Runnable { private final Set<String> names; private final ScrollingMenuSign plugin; public AsyncTask(ScrollingMenuSign plugin, Set<String> names) { this.names = names; this.plugin = plugin; } @Override public void run() { UUIDFetcher uf = new UUIDFetcher(new ArrayList<String>(names)); try { final Map<String, UUID> response = uf.call(); Bukkit.getScheduler().runTask(plugin, new SyncTask(plugin, response)); } catch (Exception e) { e.printStackTrace(); } } } private static class SyncTask implements Runnable { private final Map<String, UUID> response; private final ScrollingMenuSign plugin; public SyncTask(ScrollingMenuSign plugin, Map<String, UUID> response) { this.response = response; this.plugin = plugin; } @Override public void run() { for (SMSMenu menu : plugin.getHandler().listMenus()) { if (!MiscUtil.looksLikeUUID(menu.getOwner())) { UUID uuid = response.get(menu.getOwner()); menu.setOwnerId(uuid); } } for (SMSView view : plugin.getViewManager().listViews()) { if (!MiscUtil.looksLikeUUID(view.getAttributeAsString(SMSView.OWNER))) { String owner = view.getAttributeAsString(SMSView.OWNER); UUID uuid = response.get(owner); view.setOwnerId(uuid); } } plugin.getConfig().set("sms.uuid_migration_done", true); plugin.saveConfig(); LogUtils.info("Menu & view owner names migrated to UUID format"); } } }