From a55acf97f38bb5e15274a7c83a46ab4bdd1d0f77 Mon Sep 17 00:00:00 2001 From: EugeniyVlasov Date: Thu, 25 Oct 2007 18:00:52 +0000 Subject: [PATCH] git-svn-id: https://only.mawhrin.net/repos/FBReaderJ/trunk@50 6a642e6f-84f6-412e-ac94-c4a38d5a04b0 --- .../zlibrary/options/ZLBoolean3Option.java | 12 +- src/org/zlibrary/options/ZLBooleanOption.java | 11 +- src/org/zlibrary/options/ZLColorOption.java | 15 +- src/org/zlibrary/options/ZLDoubleOption.java | 11 +- src/org/zlibrary/options/ZLIntegerOption.java | 13 +- .../options/ZLIntegerRangeOption.java | 19 ++- src/org/zlibrary/options/ZLOption.java | 38 +++-- src/org/zlibrary/options/ZLSimpleOption.java | 25 +++ .../zlibrary/options/ZLSimpleOptionImpl.java | 17 -- src/org/zlibrary/options/ZLStringOption.java | 12 +- src/org/zlibrary/options/util/ZLBoolean3.java | 4 + src/org/zlibrary/options/util/ZLColor.java | 108 +++++-------- .../org/test/zlibrary/options/ModelTests.java | 150 ++++++++++++++++++ test/org/test/zlibrary/options/TestAll.java | 12 ++ 14 files changed, 338 insertions(+), 109 deletions(-) create mode 100644 src/org/zlibrary/options/ZLSimpleOption.java delete mode 100644 src/org/zlibrary/options/ZLSimpleOptionImpl.java create mode 100644 test/org/test/zlibrary/options/ModelTests.java create mode 100644 test/org/test/zlibrary/options/TestAll.java diff --git a/src/org/zlibrary/options/ZLBoolean3Option.java b/src/org/zlibrary/options/ZLBoolean3Option.java index c97934beb..581d07722 100644 --- a/src/org/zlibrary/options/ZLBoolean3Option.java +++ b/src/org/zlibrary/options/ZLBoolean3Option.java @@ -2,6 +2,12 @@ package org.zlibrary.options; import org.zlibrary.options.util.*; +/** + * класс опция со значением из трехзначной логики + * значения бывают "истина", "ложь" и "не знаю". + * @author Администратор + * + */ public final class ZLBoolean3Option extends ZLSimpleOption{ private ZLBoolean3 myValue; @@ -16,7 +22,11 @@ public final class ZLBoolean3Option extends ZLSimpleOption{ } public void setValue(ZLBoolean3 value){ - //TODO установка значения + myValue = value; + } + + public void setValueToDefault(){ + myValue = myDefaultValue; } public ZLBoolean3Option(String category, String group, String optionName, ZLBoolean3 defaultValue){ diff --git a/src/org/zlibrary/options/ZLBooleanOption.java b/src/org/zlibrary/options/ZLBooleanOption.java index 8702279b5..e66164f0f 100644 --- a/src/org/zlibrary/options/ZLBooleanOption.java +++ b/src/org/zlibrary/options/ZLBooleanOption.java @@ -1,5 +1,10 @@ package org.zlibrary.options; +/** + * класс логическая опция. + * @author Администратор + * + */ public final class ZLBooleanOption extends ZLSimpleOption{ private boolean myValue; @@ -14,7 +19,11 @@ public final class ZLBooleanOption extends ZLSimpleOption{ } public void setValue(boolean value){ - //TODO установка значения + myValue = value; + } + + public void setValueToDefault(){ + myValue = myDefaultValue; } public ZLBooleanOption (String category, String group, String optionName, boolean defaultValue){ diff --git a/src/org/zlibrary/options/ZLColorOption.java b/src/org/zlibrary/options/ZLColorOption.java index 81c1258e1..ea2454d42 100644 --- a/src/org/zlibrary/options/ZLColorOption.java +++ b/src/org/zlibrary/options/ZLColorOption.java @@ -2,6 +2,14 @@ package org.zlibrary.options; import org.zlibrary.options.util.*; +/** + * класс опция цвета. внутри опции цвет хранится одним числом, + * чтобы уменьшить затраты на память (в три раза! =)), но обращение + * к этой опции все равно осуществляется с помощью класса ZLColor, который + * реализует более привычное RGB представление цвета. + * @author Администратор + * + */ public final class ZLColorOption extends ZLOption{ private long myIntValue; @@ -12,12 +20,15 @@ public final class ZLColorOption extends ZLOption{ } public void setValue(ZLColor value){ - //TODO установка значения + myIntValue = value.getIntValue(); + } + + public void setValueToDefault(){ + myIntValue = myDefaultIntValue; } public ZLColorOption (String category, String group, String optionName, ZLColor defaultValue){ super(category, group, optionName); - //convert? myDefaultIntValue = defaultValue.getIntValue(); myIntValue = myDefaultIntValue; } diff --git a/src/org/zlibrary/options/ZLDoubleOption.java b/src/org/zlibrary/options/ZLDoubleOption.java index d6db6a616..3b9aa8911 100644 --- a/src/org/zlibrary/options/ZLDoubleOption.java +++ b/src/org/zlibrary/options/ZLDoubleOption.java @@ -1,5 +1,10 @@ package org.zlibrary.options; +/** + * класс дробная опция. + * @author Администратор + * + */ public final class ZLDoubleOption extends ZLOption{ private double myValue; @@ -10,7 +15,11 @@ public final class ZLDoubleOption extends ZLOption{ } public void setValue(double value){ - //TODO установка значения + myValue = value; + } + + public void setValueToDefault(){ + myValue = myDefaultValue; } public ZLDoubleOption (String category, String group, String optionName, double defaultValue){ diff --git a/src/org/zlibrary/options/ZLIntegerOption.java b/src/org/zlibrary/options/ZLIntegerOption.java index d4efbcbca..a650bf304 100644 --- a/src/org/zlibrary/options/ZLIntegerOption.java +++ b/src/org/zlibrary/options/ZLIntegerOption.java @@ -1,5 +1,10 @@ package org.zlibrary.options; +/** + * класс целочисленная опция. + * @author Администратор + * + */ public final class ZLIntegerOption extends ZLOption{ private long myValue; private long myDefaultValue; @@ -9,10 +14,14 @@ public final class ZLIntegerOption extends ZLOption{ } public void setValue(long value){ -// TODO установка значения + myValue = value; + } + + public void setValueToDefault(){ + myValue = myDefaultValue; } - public ZLIntegerOption (String category, String group, String optionName, int defaultValue){ + public ZLIntegerOption (String category, String group, String optionName, long defaultValue){ super(category, group, optionName); myDefaultValue = defaultValue; myValue = myDefaultValue; diff --git a/src/org/zlibrary/options/ZLIntegerRangeOption.java b/src/org/zlibrary/options/ZLIntegerRangeOption.java index fc1a1c39e..2bae060d6 100644 --- a/src/org/zlibrary/options/ZLIntegerRangeOption.java +++ b/src/org/zlibrary/options/ZLIntegerRangeOption.java @@ -1,5 +1,11 @@ package org.zlibrary.options; +/** + * класс ранжированная целочисленная опция. есть верхний и нижний + * пределы, которые тут же и указываются. + * @author Администратор + * + */ public final class ZLIntegerRangeOption extends ZLOption{ private long myValue; private long myDefaultValue; @@ -19,14 +25,23 @@ public final class ZLIntegerRangeOption extends ZLOption{ } public void setValue(long value){ -// TODO установка значения + if ((myMinValue <= value) && (myMaxValue >= value)) + myValue = value; + } + + public void setValueToDefault(){ + myValue = myDefaultValue; } public ZLIntegerRangeOption (String category, String group, String optionName, long minValue, long maxValue, long defaultValue){ super(category, group, optionName); - myDefaultValue = defaultValue; myMinValue = minValue; myMaxValue = maxValue; + //страхуемся от ошибки программиста =) + if ((myMinValue <= defaultValue) && (myMaxValue >= defaultValue)) + myDefaultValue = defaultValue; + else + myDefaultValue = myMinValue; myValue = myDefaultValue; } diff --git a/src/org/zlibrary/options/ZLOption.java b/src/org/zlibrary/options/ZLOption.java index ff61f6d77..02546010a 100644 --- a/src/org/zlibrary/options/ZLOption.java +++ b/src/org/zlibrary/options/ZLOption.java @@ -5,25 +5,35 @@ public abstract class ZLOption { public static final String CONFIG_CATEGORY = "options"; public static final String STATE_CATEGORY = "state"; - public String myCategory; - public String myGroup; - public String myOptionName; - public boolean myIsSynchronized; - - public void clearGroup(String group){ - - } + protected String myCategory; + protected String myGroup; + protected String myOptionName; + //protected boolean myIsSynchronized; - //private final ZLOption& operator = (final ZLOptions options); + /** + * чтобы не забыть определить этот метод во всех final наследниках. + * установка значения в дефолт. полезный метод. + */ + public abstract void setValueToDefault(); + /** + * конструктор. + * @param category + * @param group + * @param optionName + */ + //TODO когда разберусь написать сюда джавадок public ZLOption (String category, String group, String optionName){ - + myCategory = category; + myGroup = group; + myOptionName = optionName; } + + //public void clearGroup(String group){} + //private final ZLOption& operator = (final ZLOptions options); //public boolean isAutoSavingSupported(); //public void startAutoSave(int seconds); - //protected ZLOption(String category, String group, String optionName); - - /*private ZLOption(const ZLOption&); - *private final ZLOption& operator = (const ZLOption&);*/ + //private ZLOption(const ZLOption&); + //private final ZLOption& operator = (const ZLOption&); } diff --git a/src/org/zlibrary/options/ZLSimpleOption.java b/src/org/zlibrary/options/ZLSimpleOption.java new file mode 100644 index 000000000..00bded5fc --- /dev/null +++ b/src/org/zlibrary/options/ZLSimpleOption.java @@ -0,0 +1,25 @@ +package org.zlibrary.options; + +/** + * класс простая опция. описывает опции, вывод которых на экран + * делается более или менее одной строчкой + * @author Администратор + * + */ +abstract class ZLSimpleOption extends ZLOption { + + /** + * во всех final наследниках должен быть метод, + * отдающий тип этого наследника. + * @return + */ + public abstract OptionType getType(); + + /** + * конструктор. создается так же как и любая опция + * @see ZLOption + */ + public ZLSimpleOption(String category, String group, String optionName){ + super(category, group, optionName); + } +} diff --git a/src/org/zlibrary/options/ZLSimpleOptionImpl.java b/src/org/zlibrary/options/ZLSimpleOptionImpl.java deleted file mode 100644 index 394b53893..000000000 --- a/src/org/zlibrary/options/ZLSimpleOptionImpl.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.zlibrary.options; - - -abstract class ZLSimpleOption extends ZLOption { - - public abstract OptionType getType(); - - public ZLSimpleOption(String category, String group, String optionName){ - super(category, group, optionName); - } - - /*public void clearGroup(String group) { - // TODO Auto-generated method stub - - }*/ - -} diff --git a/src/org/zlibrary/options/ZLStringOption.java b/src/org/zlibrary/options/ZLStringOption.java index 1c65aa03d..208f9d247 100644 --- a/src/org/zlibrary/options/ZLStringOption.java +++ b/src/org/zlibrary/options/ZLStringOption.java @@ -1,9 +1,11 @@ package org.zlibrary.options; - +/** + * класс строковая опция. + * @author Администратор + */ public final class ZLStringOption extends ZLSimpleOption { - private String myValue; private String myDefaultValue; @@ -16,7 +18,11 @@ public final class ZLStringOption extends ZLSimpleOption { } public void setValue(String value){ -// TODO установка значения + myValue = value; + } + + public void setValueToDefault(){ + myValue = myDefaultValue; } public ZLStringOption (String category, String group, String optionName, String defaultValue){ diff --git a/src/org/zlibrary/options/util/ZLBoolean3.java b/src/org/zlibrary/options/util/ZLBoolean3.java index 92274b749..839dd51b2 100644 --- a/src/org/zlibrary/options/util/ZLBoolean3.java +++ b/src/org/zlibrary/options/util/ZLBoolean3.java @@ -1,5 +1,9 @@ package org.zlibrary.options.util; +/** + * сущность "значение трехзначной логики" + * @author Администратор + */ public enum ZLBoolean3 { B3_FALSE, B3_TRUE, diff --git a/src/org/zlibrary/options/util/ZLColor.java b/src/org/zlibrary/options/util/ZLColor.java index 2b720cd5e..f9176a86d 100644 --- a/src/org/zlibrary/options/util/ZLColor.java +++ b/src/org/zlibrary/options/util/ZLColor.java @@ -2,93 +2,59 @@ package org.zlibrary.options.util; import java.awt.Color; +/** + * сущность "цвет". представление здесь - стандартные RGB компоненты + * @author Администратор + * + */ public class ZLColor { - private int myRed; - private int myGreen; - private int myBlue; + private int myRed = 0; + private int myGreen = 0; + private int myBlue = 0; - public int getBlue() { - return myBlue; - } - public int getGreen() { - return myGreen; - } - public int getRed() { - return myRed; - } - - public void setBlue(int mask){ - setColor(myRed, myGreen, mask); - } - - public void setGreen(int mask){ - setColor(myRed, mask, myBlue); - } - - public void setRed(int mask){ - setColor(mask, myGreen, myBlue); - } - - public boolean isInitialized(){ - return (myRed != -1); - } /** * перекрываем метод toString, * по сути - кодировка в десятичную запись */ public String toString(){ - if (!isInitialized()){ - return "not initialized"; - } else { - return "" + myRed + ", " + myGreen + ", " + myBlue; - } + return "" + myRed + ", " + myGreen + ", " + myBlue; } /** - * конструктор по умолчанию делает цвет черным + * является ли число корректным значением компоненты ргб цвета. */ - public ZLColor (){ - myRed = 0; - myGreen = 0; - myBlue = 0; + private boolean isCorrectComponent(int value){ + return (value >=0 && value <= 255); } - /** - * с инициализацией сразу трех компонент цвета есть одна проблема - * она состоит в том что если мы сначала удачно прочли красный - * а потом неудачно прочли синий, то красный то мы уже успели - * поменять а вот на синем вылетели с иксепшоном и таким образом - * получили полуторный непонятный цвет, явно не то чего хотели - * поэтому приходится определять такой метод, а остальные через него - * @param red - * @param green - * @param blue + * устанавливаем только те компоненты, которые заданы корректно, + * то есть являются неотрицательным числом < 256 */ public void setColor (int red, int green, int blue){ - myRed = red; - myGreen = green; - myBlue = blue; - } - /** - * конструктор с параметрами - */ - public ZLColor (int red, int green, int blue){ - setColor(red, green, blue); + if (isCorrectComponent(red)) + myRed = red; + if (isCorrectComponent(green)) + myGreen = green; + if (isCorrectComponent(blue)) + myBlue = blue; } /** - * этот метод отлично отражает бессмысленность - * данной структуры. когда выяснилось что RGBColor надо рисовать - * пришлось научиться приводить мой цвет в авт-шный + * конвертирование в АВТшный цвет. * @param color */ + //TODO решить нужно ли это вообще public void convertFromColor(Color color){ myRed = (int)color.getRed(); myGreen = (int)color.getGreen(); myBlue = (int)color.getBlue(); } + public Color convertToColor(){ + return new Color(myRed, myGreen, myBlue); + } + /** * и конструктор соответственно для удобства * @param color @@ -97,16 +63,26 @@ public class ZLColor { public ZLColor (Color color){ setColor((int)color.getRed(), (int)color.getGreen(), (int)color.getBlue()); } + + /** + * @return цвет одним числом, чтобы хранить в памяти меньше =) + */ + public int getIntValue(){ + return myRed*1000000 + myGreen*1000 + myBlue; + } /** - * @return наш цвет как человеческий цвет из awt + * конструктор по умолчанию делает цвет черным */ - public Color convertToColor(){ - return new Color(myRed, myGreen, myBlue); + public ZLColor (){ } - public int getIntValue(){ - //TODO возвращение цвета одним числом - return 0; + /** + * конструктор с параметрами + */ + public ZLColor (int red, int green, int blue){ + setColor(red, green, blue); } + + } diff --git a/test/org/test/zlibrary/options/ModelTests.java b/test/org/test/zlibrary/options/ModelTests.java new file mode 100644 index 000000000..1ac1265b0 --- /dev/null +++ b/test/org/test/zlibrary/options/ModelTests.java @@ -0,0 +1,150 @@ +package org.test.zlibrary.options; + +import junit.framework.*; +import org.zlibrary.options.*; +import org.zlibrary.options.util.*; + +/** + * тесты на модель опций. + * @author Администратор + * тесты 01 - это тесты на геттеры значений + * тесты 02 - это тесты на сеттеры при условии корректости геттеров + * тесты 03 - это тесты на setValueToDefault + */ +public class ModelTests extends TestCase{ + + private ZLColorOption myColorOption; + private ZLDoubleOption myDoubleOption; + private ZLIntegerOption myIntegerOption; + private ZLIntegerRangeOption myIntegerRangeOption; + private ZLBoolean3Option myBoolean3Option; + private ZLBooleanOption myBooleanOption; + private ZLStringOption myStringOption; + + private final long myDefaultColor = 176255000L; + private final long myDefaultIntRange = 75L; + private final long myDefaultInt = 15L; + private final ZLBoolean3 myDefaultBoolean3 = ZLBoolean3.B3_UNDEFINED; + private final boolean myDefaultBoolean = true; + private final String myDefaultString = "Hello World"; + private final double myDefaultDouble = 1.2; + + public void setUp(){ + myColorOption = new ZLColorOption("","","my Color", new ZLColor (176, 255, 0)); + myDoubleOption = new ZLDoubleOption("","","My Double", myDefaultDouble); + myIntegerOption = new ZLIntegerOption("","","I", myDefaultInt); + myIntegerRangeOption = new ZLIntegerRangeOption("","","IR", -90L, 90L, myDefaultIntRange); + myBoolean3Option = new ZLBoolean3Option("","","my Boolean 3", myDefaultBoolean3); + myBooleanOption = new ZLBooleanOption("","","my Boolean", myDefaultBoolean); + myStringOption = new ZLStringOption("","","my String", myDefaultString); + } + + public void test01_color(){ + assertEquals(myColorOption.getValue(), myDefaultColor); + } + + public void test01_double(){ + assertEquals(myDoubleOption.getValue(), myDefaultDouble); + } + + public void test01_integer(){ + assertEquals(myIntegerOption.getValue(), myDefaultInt); + } + + public void test01_integerRange(){ + assertEquals(myIntegerRangeOption.getValue(), myDefaultIntRange); + } + + public void test01_boolean3(){ + assertEquals(myBoolean3Option.getValue(), myDefaultBoolean3); + } + + public void test01_boolean(){ + assertEquals(myBooleanOption.getValue(), myDefaultBoolean); + } + + public void test01_string(){ + assertEquals(myStringOption.getValue(), myDefaultString); + } + + public void test02_color(){ + myColorOption.setValue(new ZLColor()); + assertEquals(myColorOption.getValue(), 0L); + } + + public void test02_double(){ + myDoubleOption.setValue(0.1); + assertEquals(myDoubleOption.getValue(), 0.1); + } + + public void test02_integer(){ + myIntegerOption.setValue(10000000); + assertEquals(myIntegerOption.getValue(), 10000000); + } + + public void test02_integerRangeRight(){ + myIntegerRangeOption.setValue(-1L); + assertEquals(myIntegerRangeOption.getValue(), -1L); + } + + public void test02_integerRangeWrong(){ + myIntegerRangeOption.setValue(10000000L); + assertEquals(myIntegerRangeOption.getValue(), 75L); + } + + public void test02_boolean3(){ + myBoolean3Option.setValue(ZLBoolean3.B3_TRUE); + assertEquals(myBoolean3Option.getValue(), ZLBoolean3.B3_TRUE); + } + + public void test02_boolean(){ + myBooleanOption.setValue(false); + assertEquals(myBooleanOption.getValue(), false); + } + + public void test02_string(){ + myColorOption.setValue(new ZLColor()); + assertEquals(myStringOption.getValue(), "Hello World"); + } + + public void test03_color(){ + myColorOption.setValueToDefault(); + assertEquals(myColorOption.getValue(), myDefaultColor); + } + + public void test03_double(){ + myDoubleOption.setValueToDefault(); + assertEquals(myDoubleOption.getValue(), myDefaultDouble); + } + + public void test03_integer(){ + myIntegerOption.setValueToDefault(); + assertEquals(myIntegerOption.getValue(), myDefaultInt); + } + + public void test03_integerRangeRight(){ + myIntegerRangeOption.setValueToDefault(); + assertEquals(myIntegerRangeOption.getValue(), myDefaultIntRange); + } + + public void test03_integerRangeWrong(){ + myIntegerRangeOption.setValueToDefault(); + assertEquals(myIntegerRangeOption.getValue(), 75L); + } + + public void test03_boolean3(){ + myBoolean3Option.setValueToDefault(); + assertEquals(myBoolean3Option.getValue(), myDefaultBoolean3); + } + + public void test03_boolean(){ + myBooleanOption.setValueToDefault(); + assertEquals(myBooleanOption.getValue(), myDefaultBoolean); + } + + public void test03_string(){ + myColorOption.setValueToDefault(); + assertEquals(myStringOption.getValue(), myDefaultString); + } + +} diff --git a/test/org/test/zlibrary/options/TestAll.java b/test/org/test/zlibrary/options/TestAll.java new file mode 100644 index 000000000..5a39d8a1a --- /dev/null +++ b/test/org/test/zlibrary/options/TestAll.java @@ -0,0 +1,12 @@ +package org.test.zlibrary.options; + +import junit.framework.Test; +import junit.framework.TestSuite; + +public class TestAll { + public static Test suite() { + TestSuite suite = new TestSuite(); + suite.addTestSuite(ModelTests.class); + return suite; + } +} \ No newline at end of file