powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Зацените, пожалуйста, код, идею и реализацию.
27 сообщений из 27, показаны все 2 страниц
Зацените, пожалуйста, код, идею и реализацию.
    #33699966
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Идея такая: Написать свой класс форматирования сообщений регистратора. Сообщения форматируются таким образом чтоб на выходе получилась страница HTML содержащая возможность фильтрации через регулярные выражения.

Скомпилированный класс и сходник в атаче.
К сожалению пока я не исправил одну багу страница не пашет в IE.

Вставлять, полагаю, вы все знаете как. Но на всякий пожарный:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
 this .log = Logger.getLogger("myLogger");
		 try {
			FileHandler hand =  new  FileHandler("log1.htm");
			hand.setFormatter( new  HTMLFormatter());
			 this .log.addHandler(hand);
			//this.log.addHandler(new HTMLFormatter());
		}
		 catch (IOException e){}

Очень жду отзывов! Это один из моих первых проектов на яве. Хотелось бы узнать что я сделал плохо, а что хорошо. Особенно в плане проектирования. Как легко вам разобраться в моём коде?
...
Рейтинг: 0 / 0
Зацените, пожалуйста, код, идею и реализацию.
    #33699972
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ув. модератор, удалите, пожалуйста, предыдущий пост.
Там не тот класс.

Вот:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
 import  java.util.logging.Formatter;
 import  java.text.DateFormat;
 import  java.util.Date;
 import  java.util.logging.LogRecord;
 import  java.util.logging.Handler;

/**
 * 
 */

/**
 * @author sarin2.0
 * Форматирует регистрационную запись в виде HTML страницы и JavaScript.
 * На JS реализованны механизмы поиска и прочая ерунда.
 * Просто вешайте на FileHandler и будьте счастливы:)
 */
 class  HTMLFormatter  extends  Formatter {
	
	/**
	 * Эти поля будут содержать код функций JavaScript.
	 * Инициализация полей будет происходить в соответствующих методах.
	 * Вот.
	 * */
	
	 private  String init = "";
	 private  String redraw = "";
	 private  String buildPanel = "";
	 private  String panel = "";
	 private  String Tail = "";
	 private  String fields = ""; //Поля должны быть перечислены здесь под теми названиями которые они имеют в коде JavaScript. Смотрите fieldsSetText
	
	 private   int  c =  0 ; //содержит текущий элемент массива в коде JavaScript;
	 private   int  dateStyle = DateFormat.FULL;
	 private   int  timeStyle = DateFormat.FULL;
	
	 public  HTMLFormatter(){
		 this .initSetText();
		 this .redrawSetText();
		 this .panelSetText();
		 this .fieldsSetText();
		 this .buildPanelSetText();
		
		 this .Tail =  this .init;
		 this .Tail +=  this .redraw;
		 this .Tail +=  this .buildPanel;
		
		 this .Tail += "\n </script>";
		 this .Tail += "\n <body id=\"body\" onLoad=\"init()\">";
		 this .Tail +=  this .panel;
		 this .Tail += "\n\t <div id=\"tableArea\">";
		 this .Tail += "\n\t </div>";
		 this .Tail += "\n </body>";
	}
	
	/**
	 * Этот метод преобразует регистрационные записи в объявления переменных JavaScript
	 * @param record: обрабатываемая запись
	 * */	
	 public  String format(LogRecord record){
		DateFormat dateFormat = DateFormat.getDateTimeInstance( this .getDateStyle(),  this .getTimeStyle());
		String rec = "\n\t log[" +  this .c + "] = new Object()";
		rec += "\n\n\t log[" +  this .c + "][\"level\"] = \"" + record.getLevel() + "\"";
		rec += "\n\t log[" +  this .c + "][\"loggerName\"] = \"" + record.getLoggerName() + "\"";
		rec += "\n\t log[" +  this .c + "][\"sequenceNumber\"] = \"" + record.getSequenceNumber() + "\"";
		rec += "\n\t log[" +  this .c + "][\"millis\"] = \"" + record.getMillis() + "\"";
		rec += "\n\t log[" +  this .c + "][\"date\"] = \"" + dateFormat.format( new  Date(record.getMillis())) + "\"";
		rec += "\n\t log[" +  this .c + "][\"message\"] = \"" + record.getMessage() + "\"";
		rec += "\n\t log[" +  this .c + "][\"class\"] = \"" + record.getSourceClassName() + "\"";
		rec += "\n\t log[" +  this .c + "][\"method\"] = \"" + record.getSourceMethodName() + "\"";
		 this .c++;
		 return  rec;
	}
	
	/**
	 * Выставляет текст функции init
	 * */
	 private   void  initSetText(){
		 this .init += "\n\n function init(){";
		 this .init += "\n\t buildPanel()";
		 this .init += "\n\t redraw()";
		 this .init += "\n }";
	}
	
	/**
	 * Выставляет текст функции redraw
	 * */
	 private   void  redrawSetText(){
		 this .redraw = "\n\n function redraw(){";
		 this .redraw += "\n\t parentNode = document.getElementById(\"tableArea\")";
		 this .redraw += "\n\t parentNode.innerHTML = \"\"";
		 this .redraw += "\n\t table = document.createElement(\"table\")";
		 this .redraw += "\n\t table.setAttribute(\"border\", \"1\")";
		 this .redraw += "\n\t table.setAttribute(\"cellpadding\", \"2\")";
		 this .redraw += "\n\t table.setAttribute(\"cellspacing\", \"0\")";
		
		 this .redraw += "\n\t for (i = c; i >=  0; i--){";
		 this .redraw += "\n\t\t isFieldsGood = true";
		 this .redraw += "\n\t\t for (j = fields.length - 1; j >= 0; j--){";
		 this .redraw += "\n\t\t\t exp = new RegExp(document.getElementById(fields[j] + \"Filter\").value)";
		 this .redraw += "\n\t\t\t isFieldsGood = isFieldsGood && exp.test(log[i][fields[j]])";
		 this .redraw += "\n\t\t }";
		 this .redraw += "\n\t\t if (isFieldsGood){";
		 this .redraw += "\n\t\t\t row = table.insertRow(0)";
		 this .redraw += "\n\t\t\t for (j = fields.length - 1; j >= 0; j--){";
		 this .redraw += "\n\t\t\t\t if (document.getElementById(fields[j] + \"Visible\").checked){";
		 this .redraw += "\n\t\t\t\t\t coll = row.insertCell(0)";
		 this .redraw += "\n\t\t\t\t\t coll.appendChild(document.createTextNode(log[i][fields[j]]))";
		 this .redraw += "\n\t\t\t\t }";
		 this .redraw += "\n\t\t\t }";
		 this .redraw += "\n\t\t }";
				
		 this .redraw += "\n\t }";
		 this .redraw += "\n\t row = table.insertRow(0)";
		 this .redraw += "\n\t for (j = fields.length - 1; j >= 0; j--){";
		 this .redraw += "\n\t\t if (document.getElementById(fields[j] + \"Visible\").checked){";
		 this .redraw += "\n\t\t\t coll = row.insertCell(0)";
		 this .redraw += "\n\t\t\t coll.appendChild(document.createTextNode(fields[j]))";
		 this .redraw += "\n\t\t }";
		 this .redraw += "\n\t }";
		 this .redraw += "\n\t parentNode.appendChild(table)";
		 this .redraw += "\n }";
		
	}
	
	/**
	 * Создаёт панель для фильтрации записей.
	 */
	 private   void  panelSetText(){
		 this .panel = "\n\t <form name=\"panel\" id=\"panel\">";
		
		 this .panel += "\n\t\t <input type=\"button\" onClick=\"redraw()\">";
		 this .panel += "\n\t </form>";
	}
	
	 private   void  fieldsSetText(){
		 this .fields = "\n\t fields = new Array()";
		 this .fields += "\n\t fields[0] = \"level\"";
		 this .fields += "\n\t fields[1] = \"loggerName\"";
		 this .fields += "\n\t fields[2] = \"sequenceNumber\"";
		 this .fields += "\n\t fields[3] = \"millis\"";
		 this .fields += "\n\t fields[4] = \"date\"";
		 this .fields += "\n\t fields[5] = \"message\"";
		 this .fields += "\n\t fields[6] = \"class\"";
		 this .fields += "\n\t fields[7] = \"method\"";
	}
	
	 private   void  buildPanelSetText(){
		 this .buildPanel = "\n\n function buildPanel(){";
		 this .buildPanel += "\n\t panel = document.getElementById(\"panel\")";
		 this .buildPanel += "\n\t table = document.createElement(\"table\")";
		 this .buildPanel += "\n\t table.setAttribute(\"border\", \"1\")";
		 this .buildPanel += "\n\t table.setAttribute(\"cellpadding\", \"2\")";
		 this .buildPanel += "\n\t table.setAttribute(\"cellspacing\", \"0\")";
		 this .buildPanel += "\n\t for (i = fields.length - 1; i >= 0; i--){";
		 this .buildPanel += "\n\t\t row = table.insertRow(0)";
		 this .buildPanel += "\n\t\t name = fields[i] + \"Filter\"";
		 this .buildPanel += "\n\t\t coll = row.insertCell(0)";
		 this .buildPanel += "\n\t\t coll.innerHTML = \"<input type=\\\"text\\\" name=\\\"\" + name + \"\\\" id=\\\"\" + name + \"\\\"/>\"";
		 this .buildPanel += "\n\t\t name = fields[i] + \"Visible\"";
		 this .buildPanel += "\n\t\t coll = row.insertCell(0)";
		 this .buildPanel += "\n\t\t coll.innerHTML = \"<input type=\\\"checkbox\\\" checked=\\\"true\\\" name=\\\"\" + name + \"\\\" id=\\\"\" + name + \"\\\"/>\"";
		 this .buildPanel += "\n\t\t coll = row.insertCell(0)";
		 this .buildPanel += "\n\t\t coll.appendChild(document.createTextNode(fields[i]))";
		 this .buildPanel += "\n\t }";
		 this .buildPanel += "\n\t row = table.insertRow(0)";
		 this .buildPanel += "\n\t coll = row.insertCell(0)";
		 this .buildPanel += "\n\t coll.appendChild(document.createTextNode(\"Filter (RegExp)\"))";
		 this .buildPanel += "\n\t coll = row.insertCell(0)";
		 this .buildPanel += "\n\t coll.appendChild(document.createTextNode(\"Visible\"))";
		 this .buildPanel += "\n\t coll = row.insertCell(0)";
		 this .buildPanel += "\n\t coll.appendChild(document.createTextNode(\"Field\"))";
		 this .buildPanel += "\n\t panel.appendChild(table)";
		 this .buildPanel += "\n }";
	}
	
	 public  String getHead(Handler h){
		String Head = "<?xml version=\"1.0\", encoding=\"cp1251\">"; 
		Head += "\n <script type=\"text/javascript\">";
		Head += "\n\t " +  this .fields;
		Head += "\n\t log =new Array()";
		 return  Head;
	}
	
	/**
	 * Это метод выводит конец документа.
	 * */
	 public  String getTail(Handler h){
		 return   this .Tail + "\n<script>\n\t c = " + ( this .c -  1 ) + " \n</script>";
	}

	/**
	 * @param dateStyle The dateStyle to set.
	 */
	 public   void  setDateStyle( int  dateStyle) {
		 this .dateStyle = dateStyle;
	}

	/**
	 * @return Returns the dateStyle.
	 */
	 public   int  getDateStyle() {
		 return  dateStyle;
	}

	/**
	 * @param timeStyle The timeStyle to set.
	 */
	 public   void  setTimeStyle( int  timeStyle) {
		 this .timeStyle = timeStyle;
	}

	/**
	 * @return Returns the timeStyle.
	 */
	 public   int  getTimeStyle() {
		 return  timeStyle;
	}
	
}

...
Рейтинг: 0 / 0
Зацените, пожалуйста, код, идею и реализацию.
    #33699983
Фотография А.Грасоff™
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
заместо строк и операций += с ними обыкновенно используется
что-нить более шустрое и менее ресурсоемкое. например,
StringBuffer.

--
бес потпеси, потому што раз троганъ
...
Рейтинг: 0 / 0
Зацените, пожалуйста, код, идею и реализацию.
    #33699986
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А.Грасоff™
StringBuffer

Эт чё такое?
...
Рейтинг: 0 / 0
Зацените, пожалуйста, код, идею и реализацию.
    #33699990
Фотография Программизд 02
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Администратор
Sarin А.Грасоff™
StringBuffer

Эт чё такое?

StringBuffer это супер! По сравнению с ним String sucks.
...
Рейтинг: 0 / 0
Зацените, пожалуйста, код, идею и реализацию.
    #33699993
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программизд 02 Sarin А.Грасоff™
StringBuffer

Эт чё такое?

StringBuffer это супер! По сравнению с ним String sucks.
Достато сменить тип поля?
...
Рейтинг: 0 / 0
Зацените, пожалуйста, код, идею и реализацию.
    #33700004
Фотография А.Грасоff™
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sarin Программизд 02 Sarin А.Грасоff™
StringBuffer

Эт чё такое?

StringBuffer это супер! По сравнению с ним String sucks.
Достато сменить тип поля?нет.
+= надо менять на:

Код: plaintext
1.
2.
3.
StringBuffer sb =  new  StringBuffer("My Text");
sb.append("\r\nMy Text");
sb.append("\r\nMy Text").append("\r\nMy Text").append("\r\n")..append("My Text");
однако, так делать не стоит:
Код: plaintext
sb.append("\r\n" + "My Text");

PS есть еще StringBuilder :)
...
Рейтинг: 0 / 0
Зацените, пожалуйста, код, идею и реализацию.
    #33700099
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а разве компилятор сам не переводит конкатенацию строк в StringBuilder???
...
Рейтинг: 0 / 0
Зацените, пожалуйста, код, идею и реализацию.
    #33700167
ш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ш
Гость
unicornmirageа разве компилятор сам не переводит конкатенацию строк в StringBuilder???откуда инфа?
String concatenation is implemented through the StringBuilder(or StringBuffer) class and its append method
это ведь ничего не значит?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
 package  test;

 public   class  StringAndBuilder {
   public   static   final   int  ITER_COUNT =  1000000 ;
   public   static   final  String[] WORDS = {"one", "two", "three", "four", "five", "six", "seven"};

   public   static   void  main(String[] args) {
     long  st = System.currentTimeMillis();
     for  ( int  i =  0 ; i < ITER_COUNT; i++) {
      testStringBuilder();
    }
     long  et = System.currentTimeMillis();
    System.out.println("testStringBuilder: " + (et - st));

    st = System.currentTimeMillis();
     for  ( int  i =  0 ; i < ITER_COUNT; i++) {
      testString();
    }
    et = System.currentTimeMillis();
    System.out.println("testString: " + (et - st));
  }

   private   static  String testStringBuilder() {
    StringBuilder sb =  new  StringBuilder(WORDS[ 0 ]);
     for  ( int  i =  1 ; i < WORDS.length; i++) {
      sb.append(" ").append(WORDS[i]);
    }
     return  sb.toString();
  }

   private   static  String testString() {
    String s = WORDS[ 0 ];
     for  ( int  i =  1 ; i < WORDS.length; i++) {
      s += " " + WORDS[i];
    }
     return  s;
  }
}
Код: plaintext
1.
2.
testStringBuilder: 1188
testString: 2453
...
Рейтинг: 0 / 0
Зацените, пожалуйста, код, идею и реализацию.
    #33700196
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
шоткуда инфа?


инфа из практики:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
 public   class  TestString {
     public   static   void  main(String[] args) {
        String s1 = "A" + "B" + "C";

        String s2 = "A" + TestString. class .getName() + "C";
    }
}

после компиляции декомпилируем например Java Decompiler и получаем:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
 public   class  TestString
{

     public  TestString()
    {
    }

     public   static   void  main(String args[])
    {
        String s = "ABC";
        String s1 = ( new  StringBuilder()).append("A").append(TestString.getName()).append("C").toString();
    }
}
...
Рейтинг: 0 / 0
Зацените, пожалуйста, код, идею и реализацию.
    #33700199
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что касается вышеприведенного теста - не знаю почему так происходит. может кто нибудь объяснит?
...
Рейтинг: 0 / 0
Зацените, пожалуйста, код, идею и реализацию.
    #33700214
unicornmirageчто касается вышеприведенного теста - не знаю почему так происходит. может кто нибудь объяснит?
Вообще, следующие объявления эквивалентны:
Код: plaintext
1.
2.
String s1 = "A" + "B" + "C";
String s1 = "ABC";
Не знаю, каким компилятором вы пользовались, но правильный, должен был вычислить "A" + "B" + "C" на этапе компиляции. ( Можно просмотреть class-файл в HEX-редакторе. )

Конструкция с .append должна применяться только в случае использования переменных. Например, для такого случая
Код: plaintext
1.
String s = "string1" + otherVarString + "string2";

Обо всем этом написано в JLS :: 3.10.5 String Literals
...
Рейтинг: 0 / 0
Зацените, пожалуйста, код, идею и реализацию.
    #33700223
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я пользовался компилятором в jdk1.5.0 (05)
...
Рейтинг: 0 / 0
Зацените, пожалуйста, код, идею и реализацию.
    #33700226
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Êþº¾    1  %
    
   
   
   
    <init> ()V Code LineNumberTable main ([Ljava/lang/String;)V 
SourceFile TestString.java  
 ABC java/lang/StringBuilder A    antarctic/sequrity/TestString ! " # C $ # java/lang/Object append -(Ljava/lang/String;)Ljava/lang/StringBuilder; java/lang/Class getName ()Ljava/lang/String; toString !          
          *· ±           	 	       B     "L» Y· ¶  ¶ ¶ 	¶ ¶ 
M±             
 !       

а вот что наблюдается при просмотре скомпилированного примера TestString.class

как видно - в файле присутствует имя класса StringBuilder который в исходном коде не применялся при конкатенации. следовательно - его создал компилятор. :)
...
Рейтинг: 0 / 0
Зацените, пожалуйста, код, идею и реализацию.
    #33700227
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я сам всегда использую StringBuilder и вышеприведенные тесты показывают значение
testStringBuilder: 1390
testString: 3344
что говорит о пользе StringBuilder. но все же имеет место факт.
...
Рейтинг: 0 / 0
Зацените, пожалуйста, код, идею и реализацию.
    #33700234
vfabr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
господа читайте внимательно не только официальные документы и НЕХ коды, но и вопросы и ответы собеседника тогда с вероятностью 3 сигма все проблемы будут решаться в разы быстрее.
...
Рейтинг: 0 / 0
Зацените, пожалуйста, код, идею и реализацию.
    #33700265
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
всё ясно. спасибо, разобрался :)
...
Рейтинг: 0 / 0
Зацените, пожалуйста, код, идею и реализацию.
    #33700351
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sarin
this.Tail += "\n </script>";
this.Tail += "\n <body id=\"body\" onLoad=\"init()\">";
this.Tail += this.panel;
this.Tail += "\n\t <div id=\"tableArea\">";
this.Tail += "\n\t </div>";
this.Tail += "\n </body>";
Имхо такому не должно быть места ни в одной хорошей программе. Объекты, конечно, объединяют данные с кодом, но незачем настолько тесно :)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
 private   final  String templateTail = 
  "\n </script>" +
  "\n <body id=\"body\" onLoad=\"init()\">%s" +
  "\n\t <div id=\"tableArea\">" +
  "\n\t </div>" +
  "\n </body>";
...
 this .Tail = Format.format (templateTail,  this .panel);

с моей точки зрения, намного удачнее.
...
Рейтинг: 0 / 0
Зацените, пожалуйста, код, идею и реализацию.
    #33700363
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
с моей точки зрения, намного удачнее.
Пожалуй:)
...
Рейтинг: 0 / 0
Зацените, пожалуйста, код, идею и реализацию.
    #33700629
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Небольший изменения. Добавлено красивости. Панель можно скрывать/показывать.
Код вывода заработал в IE.

Отличий по части кода мало поэтому постю только скомпиленый класс.
Начал переделывать строки:)

Скажите, это вообще нужно комунибудь?
...
Рейтинг: 0 / 0
Зацените, пожалуйста, код, идею и реализацию.
    #33700864
ц
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ц
Гость
SarinСкажите, это вообще нужно комунибудь?
если есть такие статьи , значит, нужно, наверное :)
...
Рейтинг: 0 / 0
Зацените, пожалуйста, код, идею и реализацию.
    #33701465
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А кто регистрацию использует?
...
Рейтинг: 0 / 0
Зацените, пожалуйста, код, идею и реализацию.
    #33701700
Фотография А.Грасоff™
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SarinА кто регистрацию использует?
уху как-то привычнее слышать, а глазу читать - логирование :)
...
Рейтинг: 0 / 0
Зацените, пожалуйста, код, идею и реализацию.
    #33702185
Миша Оно
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SarinНебольший изменения.
А новые сорцы можно увидеть?
...
Рейтинг: 0 / 0
Зацените, пожалуйста, код, идею и реализацию.
    #33702607
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Миша Оно SarinНебольший изменения.
А новые сорцы можно увидеть?
Да легко. Я пока не сделал все те изменения которые мне рекомендовали.

Основные улучшения коснулись того что вывод теперь можно смотреть в IE, панель можно скрывать. Небольшая красивость: та строка таблицы на которой курсор мыши подсвечивается.

Сорцы:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
 import  java.util.logging.Formatter;
 import  java.text.DateFormat;
 import  java.util.Date;
 import  java.util.logging.LogRecord;
 import  java.util.logging.Handler;

/**
 * 
 */

/**
 * @author sarin2.0
 * Форматирует регистрационную запись в виде HTML страницы и JavaScript.
 * На JS реализованны механизмы поиска и прочая ерунда.
 * Просто вешайте на FileHandler и будьте счастливы:)
 */
 class  HTMLFormatter  extends  Formatter {
	
	/**
	 * Эти поля будут содержать код функций JavaScript.
	 * Инициализация полей будет происходить в соответствующих методах.
	 * Вот.
	 * */
	
	 private  String init = "";
	 private  String redraw = "";
	 private  String buildPanel = "";
	 private  String panel = "";
	 private  String Tail = "";
	 private  String fields = ""; //Поля должны быть перечислены здесь под теми названиями которые они имеют в коде JavaScript. Смотрите fieldsSetText
	
	 private  String style = "\n\t tr {background-color: #FFFFFE; border-style: solid; border-color: #000; border-width: 1px;}"
		+ "\n\t tr:hover {background-color: #FFD}"
		+ "\n\t input {border-style: solid; border-color: #000; border-width: 1px;}";
	
	
	 private   int  c =  0 ; //содержит текущий элемент массива в коде JavaScript;
	 private   int  dateStyle = DateFormat.FULL;
	 private   int  timeStyle = DateFormat.FULL;
	
	 public  HTMLFormatter(){
		 this .initSetText();
		 this .redrawSetText();
		 this .panelSetText();
		 this .fieldsSetText();
		 this .buildPanelSetText();
		
		 this .Tail =  this .init
		+  this .redraw
		+  this .buildPanel;
		
		 this .Tail += "\n </script>"
		+ "\n <body id=\"body\" onLoad=\"init()\">"
		+  this .panel
		+ "\n\t <div id=\"tableArea\">"
		+ "\n\t </div>"
		+ "\n </body>";
	}
	
	/**
	 * Этот метод преобразует регистрационные записи в объявления переменных JavaScript
	 * @param record: обрабатываемая запись
	 * */	
	 public  String format(LogRecord record){
		DateFormat dateFormat = DateFormat.getDateTimeInstance( this .getDateStyle(),  this .getTimeStyle());
		String rec = "\n\t log[" +  this .c + "] = new Object()";
		rec += "\n\n\t log[" +  this .c + "][\"level\"] = \"" + record.getLevel() + "\"";
		rec += "\n\t log[" +  this .c + "][\"loggerName\"] = \"" + record.getLoggerName() + "\"";
		rec += "\n\t log[" +  this .c + "][\"sequenceNumber\"] = \"" + record.getSequenceNumber() + "\"";
		rec += "\n\t log[" +  this .c + "][\"millis\"] = \"" + record.getMillis() + "\"";
		rec += "\n\t log[" +  this .c + "][\"date\"] = \"" + dateFormat.format( new  Date(record.getMillis())) + "\"";
		rec += "\n\t log[" +  this .c + "][\"message\"] = \"" + record.getMessage() + "\"";
		rec += "\n\t log[" +  this .c + "][\"class\"] = \"" + record.getSourceClassName() + "\"";
		rec += "\n\t log[" +  this .c + "][\"method\"] = \"" + record.getSourceMethodName() + "\"";
		 this .c++;
		 return  rec;
	}
	
	/**
	 * Выставляет текст функции init
	 * */
	 private   void  initSetText(){
		 this .init += "\n\n function init(){";
		 this .init += "\n\t buildPanel()";
		 this .init += "\n\t redraw()";
		 this .init += "\n }";
	}
	
	/**
	 * Выставляет текст функции redraw
	 * */
	 private   void  redrawSetText(){
		 this .redraw = "\n\n function redraw(){";
		 this .redraw += "\n\t parentNode = document.getElementById(\"tableArea\")";
		 this .redraw += "\n\t parentNode.innerHTML = \"\"";
		 this .redraw += "\n\t table = document.createElement(\"table\")";
		 this .redraw += "\n\t table.setAttribute(\"border\", \"1\")";
		 this .redraw += "\n\t table.setAttribute(\"cellpadding\", \"2\")";
		 this .redraw += "\n\t table.setAttribute(\"cellspacing\", \"0\")";
		
		 this .redraw += "\n\t for (i = c; i >=  0; i--){";
		 this .redraw += "\n\t\t isFieldsGood = true";
		 this .redraw += "\n\t\t for (j = fields.length - 1; j >= 0; j--){";
		 this .redraw += "\n\t\t\t exp = new RegExp(document.getElementById(fields[j] + \"Filter\").value)";
		 this .redraw += "\n\t\t\t isFieldsGood = isFieldsGood && exp.test(log[i][fields[j]])";
		 this .redraw += "\n\t\t }";
		 this .redraw += "\n\t\t if (isFieldsGood){";
		 this .redraw += "\n\t\t\t row = table.insertRow(0)";
		 this .redraw += "\n\t\t\t row.setAttribute(\"class\", \"tr\")";
		 this .redraw += "\n\t\t\t for (j = fields.length - 1; j >= 0; j--){";
		 this .redraw += "\n\t\t\t\t if (document.getElementById(fields[j] + \"Visible\").checked){";
		 this .redraw += "\n\t\t\t\t\t coll = row.insertCell(0)";
		 this .redraw += "\n\t\t\t\t\t coll.appendChild(document.createTextNode(log[i][fields[j]]))";
		 this .redraw += "\n\t\t\t\t }";
		 this .redraw += "\n\t\t\t }";
		 this .redraw += "\n\t\t }";
				
		 this .redraw += "\n\t }"
		+ "\n\t row = table.insertRow(0)";
		 this .redraw += "\n\t for (j = fields.length - 1; j >= 0; j--){";
		 this .redraw += "\n\t\t if (document.getElementById(fields[j] + \"Visible\").checked){";
		 this .redraw += "\n\t\t\t coll = row.insertCell(0)";
		 this .redraw += "\n\t\t\t coll.appendChild(document.createTextNode(fields[j]))";
		 this .redraw += "\n\t\t }";
		 this .redraw += "\n\t }";
		 this .redraw += "\n\t parentNode.appendChild(table)";
		 this .redraw += "\n }";
		
	}
	
	/**
	 * Создаёт панель для фильтрации записей.
	 */
	 private   void  panelSetText(){
		 this .panel = "\n\t <form name=\"panelForm\" id=\"panelForm\" align=\"center\">"
			+ "\n\t\t <table border=\"0\">"
			+ "\n\t\t\t <tr>"
			+ "\n\t\t\t\t <td colspan=\"3\"><div id=\"panel\" style=\"border-width: 0px; border-color: #000;\"></div></td>"
			+ "\n\t\t\t </tr>"
			+ "\n\t\t\t <tr>"
			+ "\n\t\t\t\t <td><input type=\"button\" value=\"Rebuild table\" onClick=\"redraw()\"></td><td><input type=\"button\" value=\"Hide\" onClick=\"document.getElementById(\'panel\').setAttribute(\'style\', \'display: none\')\"></td><td><input type=\"button\" value=\"Show\" onClick=\"document.getElementById(\'panel\').setAttribute(\'style\', \'display: block\')\"></td>"
			+ "\n\t\t\t </tr>"
			+ "\n\t\t </table>";
		
		 this .panel += "\n\t </form>";
	}
	
	 private   void  fieldsSetText(){
		 this .fields = "\n\t fields = new Array()";
		 this .fields += "\n\t fields[0] = \"level\"";
		 this .fields += "\n\t fields[1] = \"loggerName\"";
		 this .fields += "\n\t fields[2] = \"sequenceNumber\"";
		 this .fields += "\n\t fields[3] = \"millis\"";
		 this .fields += "\n\t fields[4] = \"date\"";
		 this .fields += "\n\t fields[5] = \"message\"";
		 this .fields += "\n\t fields[6] = \"class\"";
		 this .fields += "\n\t fields[7] = \"method\"";
	}
	
	 private   void  buildPanelSetText(){
		 this .buildPanel = "\n\n function buildPanel(){";
		 this .buildPanel += "\n\t var panel = document.getElementById(\"panel\")";
		 this .buildPanel += "\n\t var table = document.createElement(\"table\")";
		 this .buildPanel += "\n\t table.setAttribute(\"border\", \"1\")";
		 this .buildPanel += "\n\t table.setAttribute(\"cellpadding\", \"2\")";
		 this .buildPanel += "\n\t table.setAttribute(\"cellspacing\", \"0\")";
		 this .buildPanel += "\n\t for (i = fields.length - 1; i >= 0; i--){";
		 this .buildPanel += "\n\t\t row = table.insertRow(0)";
		 this .buildPanel += "\n\t\t name = fields[i] + \"Filter\"";
		 this .buildPanel += "\n\t\t coll = row.insertCell(0)";
		 this .buildPanel += "\n\t\t coll.innerHTML = \"<input type=\\\"text\\\" name=\\\"\" + name + \"\\\" id=\\\"\" + name + \"\\\"/>\"";
		 this .buildPanel += "\n\t\t name = fields[i] + \"Visible\"";
		 this .buildPanel += "\n\t\t coll = row.insertCell(0)";
		 this .buildPanel += "\n\t\t coll.innerHTML = \"<input type=\\\"checkbox\\\" checked=\\\"true\\\" name=\\\"\" + name + \"\\\" id=\\\"\" + name + \"\\\"/>\"";
		 this .buildPanel += "\n\t\t coll = row.insertCell(0)";
		 this .buildPanel += "\n\t\t coll.appendChild(document.createTextNode(fields[i]))";
		 this .buildPanel += "\n\t }";
		 this .buildPanel += "\n\t row = table.insertRow(0)";
		 this .buildPanel += "\n\t coll = row.insertCell(0)";
		 this .buildPanel += "\n\t coll.appendChild(document.createTextNode(\"Filter (RegExp)\"))";
		 this .buildPanel += "\n\t coll = row.insertCell(0)";
		 this .buildPanel += "\n\t coll.appendChild(document.createTextNode(\"Visible\"))";
		 this .buildPanel += "\n\t coll = row.insertCell(0)";
		 this .buildPanel += "\n\t coll.appendChild(document.createTextNode(\"Field\"))";
		 this .buildPanel += "\n\t panel.appendChild(table)";
		 this .buildPanel += "\n }";
	}
	
	 public  String getHead(Handler h){
		String Head = "<?xml version=\"1.0\", encoding=\"cp1251\">" 
		+ "\n <style>"
		+ "\n\t" +  this .style
		+ "\n </style>"
		+ "\n <script type=\"text/javascript\">"
		+ "\n\t " +  this .fields

		+ "\n\t log =new Array()";
		 return  Head;
	}
	
	/**
	 * Это метод выводит конец документа.
	 * */
	 public  String getTail(Handler h){
		 return   this .Tail + "\n<script>\n\t c = " + ( this .c -  1 ) + " \n</script>";
	}

	/**
	 * @param dateStyle The dateStyle to set.
	 */
	 public   void  setDateStyle( int  dateStyle) {
		 this .dateStyle = dateStyle;
	}

	/**
	 * @return Returns the dateStyle.
	 */
	 public   int  getDateStyle() {
		 return  dateStyle;
	}

	/**
	 * @param timeStyle The timeStyle to set.
	 */
	 public   void  setTimeStyle( int  timeStyle) {
		 this .timeStyle = timeStyle;
	}

	/**
	 * @return Returns the timeStyle.
	 */
	 public   int  getTimeStyle() {
		 return  timeStyle;
	}
	
}

...
Рейтинг: 0 / 0
Зацените, пожалуйста, код, идею и реализацию.
    #33703515
Миша Оно
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
10 с половиной минут рефакторинга в идее и получаем:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
 import  java.util.logging.Formatter;
 import  java.text.DateFormat;
 import  java.util.Date;
 import  java.util.logging.LogRecord;
 import  java.util.logging.Handler;

/**
 * @author sarin2.0
 *         Форматирует регистрационную запись в виде HTML страницы и JavaScript.
 *         На JS реализованны механизмы поиска и прочая ерунда.
 *         Просто вешайте на FileHandler и будьте счастливы:)
 */
 public   class  HTMLFormatter  extends  Formatter {

     private   int  dateStyle = DateFormat.FULL;
     private   int  timeStyle = DateFormat.FULL;

     private   int  logNumber =  0 ; //содержит текущий элемент массива в коде JavaScript;

     public  HTMLFormatter() {
    }

     public  String getHead(Handler h) {
         return  "<?xml version=\"1.0\", encoding=\"cp1251\">"
                + "\n <style>"
                + "\n\t" + getStyle()
                + "\n </style>"
                + "\n <script type=\"text/javascript\">"
                + "\n\t " + getFieldsScript()
                + "\n\t log = new Array();";
    }

     private   static  String getStyle() {
         return  "\n\t tr {background-color: #FFFFFE; border-style: solid; border-color: #000; border-width: 1px;}"
                + "\n\t tr:hover {background-color: #FFD}"
                + "\n\t input {border-style: solid; border-color: #000; border-width: 1px;}";
    }

     private   static  String getFieldsScript() {
         return  "\n\t fields = new Array();"
                + "\n\t fields[0] = \"level\";"
                + "\n\t fields[1] = \"loggerName\";"
                + "\n\t fields[2] = \"sequenceNumber\";"
                + "\n\t fields[3] = \"millis\";"
                + "\n\t fields[4] = \"date\";"
                + "\n\t fields[5] = \"message\";"
                + "\n\t fields[6] = \"class\";"
                + "\n\t fields[7] = \"method\";";
    }

    /**
     * Этот метод преобразует регистрационные записи в объявления переменных JavaScript
     *
     * @param record: обрабатываемая запись
     */
     public  String format(LogRecord record) {
         return  "\n\t logRecord = new Object();"
                + "\n\t logRecord[\"level\"] = \"" + record.getLevel() + "\";"
                + "\n\t logRecord[\"loggerName\"] = \"" + record.getLoggerName() + "\";"
                + "\n\t logRecord[\"sequenceNumber\"] = \"" + record.getSequenceNumber() + "\";"
                + "\n\t logRecord[\"millis\"] = \"" + record.getMillis() + "\";"
                + "\n\t logRecord[\"date\"] = \"" + getFormattedDate(record.getMillis()) + "\";"
                + "\n\t logRecord[\"message\"] = \"" + record.getMessage() + "\";"
                + "\n\t logRecord[\"class\"] = \"" + record.getSourceClassName() + "\";"
                + "\n\t logRecord[\"method\"] = \"" + record.getSourceMethodName() + "\";"
                + "\n\t log[" + logNumber++ + "] = logRecord";
    }

     private  String getFormattedDate( long  millis) {
         return  DateFormat.getDateTimeInstance(getDateStyle(), getTimeStyle()).format( new  Date(millis));
    }

    /**
     * Это метод выводит конец документа.
     */
     public  String getTail(Handler h) {
         return  getInitScript()
                + getRedrawScript()
                + getBuildPanelScript()
                + "\n </script>"
                + "\n <body id=\"body\" onLoad=\"init()\">"
                + getPanelFormHtml()
                + "\n\t <div id=\"tableArea\">"
                + "\n\t </div>"
                + "\n </body>"
                + "\n<script>\n\t logNumber = " + (logNumber -  1 ) + " \n</script>";
    }

     private   static  String getInitScript() {
         return  "\n\n function init(){"
                + "\n\t buildPanel();"
                + "\n\t redraw();"
                + "\n }";
    }

     private   static  String getRedrawScript() {
         return  "\n\n function redraw(){"
                + "\n\t parentNode = document.getElementById(\"tableArea\");"
                + "\n\t parentNode.innerHTML = \"\";"
                + "\n\t table = document.createElement(\"table\");"
                + "\n\t table.setAttribute(\"border\", \"1\");"
                + "\n\t table.setAttribute(\"cellpadding\", \"2\");"
                + "\n\t table.setAttribute(\"cellspacing\", \"0\");"
                + "\n\t for (i = logNumber; i >=  0; i--){"
                + "\n\t\t isFieldsGood = true;"
                + "\n\t\t for (j = fields.length - 1; j >= 0; j--){"
                + "\n\t\t\t exp = new RegExp(document.getElementById(fields[j] + \"Filter\").value);"
                + "\n\t\t\t isFieldsGood = isFieldsGood && exp.test(log[i][fields[j]]);"
                + "\n\t\t }"
                + "\n\t\t if (isFieldsGood){"
                + "\n\t\t\t row = table.insertRow(0);"
                + "\n\t\t\t row.setAttribute(\"class\", \"tr\");"
                + "\n\t\t\t for (j = fields.length - 1; j >= 0; j--){"
                + "\n\t\t\t\t if (document.getElementById(fields[j] + \"Visible\").checked){"
                + "\n\t\t\t\t\t coll = row.insertCell(0);"
                + "\n\t\t\t\t\t coll.appendChild(document.createTextNode(log[i][fields[j]]));"
                + "\n\t\t\t\t }"
                + "\n\t\t\t }"
                + "\n\t\t }"
                + "\n\t }"
                + "\n\t row = table.insertRow(0);"
                + "\n\t for (j = fields.length - 1; j >= 0; j--){"
                + "\n\t\t if (document.getElementById(fields[j] + \"Visible\").checked){"
                + "\n\t\t\t coll = row.insertCell(0);"
                + "\n\t\t\t coll.appendChild(document.createTextNode(fields[j]));"
                + "\n\t\t }"
                + "\n\t }"
                + "\n\t parentNode.appendChild(table)"
                + "\n }";
    }

     private   static  String getBuildPanelScript() {
         return  "\n\n function buildPanel(){"
                + "\n\t var panel = document.getElementById(\"panel\");"
                + "\n\t var table = document.createElement(\"table\");"
                + "\n\t table.setAttribute(\"border\", \"1\";)"
                + "\n\t table.setAttribute(\"cellpadding\", \"2\");"
                + "\n\t table.setAttribute(\"cellspacing\", \"0\");"
                + "\n\t for (i = fields.length - 1; i >= 0; i--){"
                + "\n\t\t row = table.insertRow(0);"
                + "\n\t\t name = fields[i] + \"Filter\";"
                + "\n\t\t coll = row.insertCell(0);"
                + "\n\t\t coll.innerHTML = \"<input type=\\\"text\\\" name=\\\"\" + name + \"\\\" id=\\\"\" + name + \"\\\"/>\";"
                + "\n\t\t name = fields[i] + \"Visible\";"
                + "\n\t\t coll = row.insertCell(0);"
                + "\n\t\t coll.innerHTML = \"<input type=\\\"checkbox\\\" checked=\\\"true\\\" name=\\\"\" + name + \"\\\" id=\\\"\" + name + \"\\\"/>\";"
                + "\n\t\t coll = row.insertCell(0);"
                + "\n\t\t coll.appendChild(document.createTextNode(fields[i]));"
                + "\n\t }"
                + "\n\t row = table.insertRow(0);"
                + "\n\t coll = row.insertCell(0);"
                + "\n\t coll.appendChild(document.createTextNode(\"Filter (RegExp)\"));"
                + "\n\t coll = row.insertCell(0);"
                + "\n\t coll.appendChild(document.createTextNode(\"Visible\"));"
                + "\n\t coll = row.insertCell(0);"
                + "\n\t coll.appendChild(document.createTextNode(\"Field\"));"
                + "\n\t panel.appendChild(table);"
                + "\n }";
    }

     private   static  String getPanelFormHtml() {
         return  "\n\t <form name=\"panelForm\" id=\"panelForm\" align=\"center\">"
                + "\n\t\t <table border=\"0\">"
                + "\n\t\t\t <tr>"
                + "\n\t\t\t\t <td colspan=\"3\"><div id=\"panel\" style=\"border-width: 0px; border-color: #000;\"></div></td>"
                + "\n\t\t\t </tr>"
                + "\n\t\t\t <tr>"
                + "\n\t\t\t\t <td><input type=\"button\" value=\"Rebuild table\" onClick=\"redraw()\"></td><td><input type=\"button\" value=\"Hide\" onClick=\"document.getElementById(\'panel\').setAttribute(\'style\', \'display: none\')\"></td><td><input type=\"button\" value=\"Show\" onClick=\"document.getElementById(\'panel\').setAttribute(\'style\', \'display: block\')\"></td>"
                + "\n\t\t\t </tr>"
                + "\n\t\t </table>"
                + "\n\t </form>";
    }

    /**
     * @param dateStyle The dateStyle to set.
     */
     public   void  setDateStyle( int  dateStyle) {
         this .dateStyle = dateStyle;
    }

    /**
     * @return Returns the dateStyle.
     */
     public   int  getDateStyle() {
         return  dateStyle;
    }

    /**
     * @param timeStyle The timeStyle to set.
     */
     public   void  setTimeStyle( int  timeStyle) {
         this .timeStyle = timeStyle;
    }

    /**
     * @return Returns the timeStyle.
     */
     public   int  getTimeStyle() {
         return  timeStyle;
    }
}

Каковы мысли?
...
Рейтинг: 0 / 0
Зацените, пожалуйста, код, идею и реализацию.
    #33704230
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я пользую Эклипс. С рефакторингом мало знаком.

Спасибо.
...
Рейтинг: 0 / 0
27 сообщений из 27, показаны все 2 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / Зацените, пожалуйста, код, идею и реализацию.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]