[LIB-9] Separate chesshog-graphics module
[chesshog.git] / chesshog-graphics / src / main / java / org / hedgecode / chess / img / ImageFormat.java
diff --git a/chesshog-graphics/src/main/java/org/hedgecode/chess/img/ImageFormat.java b/chesshog-graphics/src/main/java/org/hedgecode/chess/img/ImageFormat.java
new file mode 100644 (file)
index 0000000..95380ba
--- /dev/null
@@ -0,0 +1,113 @@
+/*
+ * Copyright (c) 2018-2019. Developed by Hedgecode.
+ *
+ * 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.hedgecode.chess.img;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import javax.imageio.ImageIO;
+
+/**
+ * Supported image formats for reading/writing.
+ *
+ * @author Dmitry Samoshin aka gotty
+ */
+public enum ImageFormat {
+
+    PNG ( new String[]{"png"} ),
+    GIF ( new String[]{"gif"} ),
+    JPG ( new String[]{"jpg", "jpeg"} ),
+    SVG ( new String[]{"svg"} ), // todo
+    BMP ( new String[]{"bmp", "wbmp"} );
+
+    private String[] fortmatExts;
+
+    private boolean isRead;
+    private boolean isWrite;
+
+    private static String[] allAvailableExts;
+
+    ImageFormat(String[] exts) {
+        fortmatExts = exts;
+        isRead = isExist(
+                ImageIO.getReaderFormatNames(), fortmatExts
+        );
+        isWrite = isExist(
+                ImageIO.getWriterFormatNames(), fortmatExts
+        );
+    }
+
+    public String getExt() {
+        return fortmatExts[0];
+    }
+
+    public String[] getExts() {
+        return fortmatExts;
+    }
+
+    public boolean isRead() {
+        return isRead;
+    }
+
+    public boolean isWrite() {
+        return isWrite;
+    }
+
+    public static ImageFormat findFormat(String formatName) {
+        if (formatName != null) {
+            for (ImageFormat imageFormat : ImageFormat.values()) {
+                if (isExist(imageFormat.getExts(), formatName))
+                    return imageFormat;
+            }
+        }
+        return null;
+    }
+
+    public static String[] getAllExts() {
+        if (allAvailableExts == null) {
+            List<String> listExts = new ArrayList<>();
+            for (ImageFormat imageFormat : ImageFormat.values()) {
+                listExts.addAll(Arrays.asList(imageFormat.getExts()));
+            }
+            allAvailableExts = listExts.toArray(new String[listExts.size()]);
+        }
+        return allAvailableExts;
+    }
+
+    private static boolean isExist(String[] names, String... args) {
+        for (String arg : args) {
+            for (String name : names) {
+                if (arg.equalsIgnoreCase(name))
+                    return true;
+            }
+        }
+        return false;
+    }
+
+
+/*
+    public static void main(String[] args) {
+        ImageFormat imageFormat = JPG;
+        System.out.println("Supported format: " + imageFormat);
+        imageFormat = findFormat("jpeg");
+        imageFormat = findFormat("svg");
+        imageFormat = findFormat("jpeeg");
+    }
+*/
+
+}
\ No newline at end of file