/** * */ package logbook.util; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.io.RandomAccessFile; import java.nio.channels.FileChannel; import java.nio.channels.FileLock; import java.util.Calendar; import java.util.Date; import logbook.data.DataType; /** * @author Nekopanda * */ public class ReportUtils { /** * ファイルがロックされているかを確認します * * @param file ファイル * @return * @throws IOException */ public static boolean isLocked(File file) throws IOException { if (!file.isFile()) { return false; } try { RandomAccessFile raf = new RandomAccessFile(file, "rw"); try { FileChannel channel = raf.getChannel(); FileLock lock = channel.tryLock(); if (lock == null) { return true; } lock.release(); return false; } finally { raf.close(); } } catch (FileNotFoundException e) { return true; } } public static Calendar calendarFromDate(Date date) { Calendar cal = Calendar.getInstance(); cal.setTime(date); return cal; } /** * オブジェクト配列をテーブルウィジェットに表示できるように文字列に変換します * * @param data テーブルに表示する内容 * @return テーブルに表示する内容 */ public static String[] toStringArray(Comparable[] data) { String[] ret = new String[data.length]; for (int i = 0; i < data.length; ++i) { if (data[i] == null) { ret[i] = ""; } else { ret[i] = data[i].toString(); } } return ret; } @SuppressWarnings("incomplete-switch") public static boolean isShipUpdate(DataType type) { switch (type) { case CHARGE: case CHANGE: case PORT: case SHIP2: case SHIP3: case MISSION_RESULT: case NDOCK: case DECK: case GET_SHIP: case DESTROY_SHIP: case POWERUP: case LOCK_SHIP: case NYUKYO_START: case NYUKYO_SPEEDCHANGE: case SLOT_EXCHANGE_INDEX: // 戦闘結果を反映させるため戦闘でも更新 case BATTLE: case BATTLE_MIDNIGHT: case BATTLE_SP_MIDNIGHT: case BATTLE_NIGHT_TO_DAY: case COMBINED_AIR_BATTLE: case COMBINED_BATTLE: case COMBINED_BATTLE_MIDNIGHT: case COMBINED_BATTLE_SP_MIDNIGHT: case COMBINED_BATTLE_WATER: case COMBINED_EC_BATTLE: case COMBINED_EC_BATTLE_MIDNIGHT: // 艦娘の入手 case BATTLE_RESULT: case COMBINED_BATTLE_RESULT: return true; } return false; } }