Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> реализовать Factory 
V
    Опции темы
Samotnik
Дата 13.4.2008, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 5
Всего: 191



вобщем, нужно :
Юезр на странице выбирает, с какого файла он хочет читать инфу, либо с  .csv  либо  с  .xml
Делаю так  : передаю с текстедитора  параметр 
Код

<input type="text" name="typeFile" id="typeFile" onblur="getTypeFile();">

принимаю на сервлете его в  методе  service 
Код

String getPathVariable;
 if (request.getParameter("typeFile") != null) 
            getPathVariable = request.getParameter("typeFile");
//в   getPathVariable   будет  значение  либо  xml   либо   csv 

а вот теперь мне нужно прикрутить фабрку, т.е.  в зависимости от того что пришло  (xml  или  csv) мне нужно прочитать данные либо с одно  либо  с другого.     Уже написал  классы, которые ситают  данные, один класс  читайет  csv   другой  xml  ..
Проблема, в том ,  что не могу понять как их вызывать, и как  забрать значения, которые те классы достали...

Добавлено через 14 минут и 44 секунды
ДА,  вот тут http://www.allapplabs.com/java_design_patt...ory_pattern.htm   есть пример,  в нем все понятно,  в зависимости от того, что введет юзер M либо  W  то выведится соответсвующее приветсвие, а  мне нужно из классов  ПОЛУЧИТЬ  те данные, которые они прочитали из файлов  smile  
PM MAIL   Вверх
Zamuta
Дата 13.4.2008, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 18.1.2006

Репутация: 4
Всего: 6



Samotnik, 

ну так и делай как написано.
Код

CsvReader csvr = new CsvReader(); // Не знаю как у тебя классы называются
if (getPathVariable.equals("csv")){
csv.readCSV("интпутстрим или path");
}else if (getPathVariable.equals("xml")){
// аналогично
}


Или покажи классы которые читают из файлов.


--------------------
Thank you opensource.
PM MAIL ICQ   Вверх
Samotnik
Дата 13.4.2008, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 5
Всего: 191



Zamuta,  дык это понятно ...   вобщем вот класс, который читает с  xml 
Код

package controllers;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.File;


public class XMLReader extends HelppperClass{
    public XMLReader(){
       StringBuilder sb = new StringBuilder();
        try {
            DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
            Document doc = docBuilder.parse(new File("D:\\work\\sources\\DataProject.xml "));
            // normalize text representation
            doc.getDocumentElement().normalize();
            System.out.println("Root element of the doc is " +
                    doc.getDocumentElement().getNodeName());

            NodeList listOfPersons = doc.getElementsByTagName("person");
            int totalPersons = listOfPersons.getLength();
            System.out.println("Total no of people : " + totalPersons);

            for (int s = 0; s < listOfPersons.getLength(); s++) {

                Node firstPersonNode = listOfPersons.item(s);
                if (firstPersonNode.getNodeType() == Node.ELEMENT_NODE) {

                    Element firstPersonElement = (Element) firstPersonNode;

                    //-------
                    NodeList firstNameList = firstPersonElement.getElementsByTagName("name");
                    Element firstNameElement = (Element) firstNameList.item(0);

                    NodeList textFNList = firstNameElement.getChildNodes();
                    System.out.println("First Name : " +
                            ((Node) textFNList.item(0)).getNodeValue().trim());
                    String sdf = ((Node) textFNList.item(0)).getNodeValue().trim();
                    printAndAppend(sb,sdf);
                    //-------
                    NodeList lastNameList = firstPersonElement.getElementsByTagName("nametask");
                    Element lastNameElement = (Element) lastNameList.item(0);

                    NodeList textLNList = lastNameElement.getChildNodes();
                    System.out.println("Last Name : " +
                            ((Node) textLNList.item(0)).getNodeValue().trim());

                    //----
                    NodeList ageList = firstPersonElement.getElementsByTagName("idtask");
                    Element ageElement = (Element) ageList.item(0);

                    NodeList textAgeList = ageElement.getChildNodes();
                    System.out.println("Age : " +
                            ((Node) textAgeList.item(0)).getNodeValue().trim());

                    //------

                    NodeList ageList2 = firstPersonElement.getElementsByTagName("work");
                    Element ageElement2 = (Element) ageList2.item(0);

                    NodeList textAgeList2 = ageElement2.getChildNodes();
                    System.out.println("Age : " +
                            ((Node) textAgeList2.item(0)).getNodeValue().trim());
                    //------

                    NodeList ageList3 = firstPersonElement.getElementsByTagName("people");
                    Element ageElement3 = (Element) ageList3.item(0);

                    NodeList textAgeList3 = ageElement3.getChildNodes();
                    System.out.println("Age : " +
                            ((Node) textAgeList3.item(0)).getNodeValue().trim());

                }//end of if clause
            }//end of for loop with s var
        } catch (SAXParseException err) {
            System.out.println("** Parsing error" + ", line "
                    + err.getLineNumber() + ", uri " + err.getSystemId());
            System.out.println(" " + err.getMessage());

        } catch (SAXException e) {
            Exception x = e.getException();
            ((x == null) ? e : x).printStackTrace();

        } catch (Throwable t) {
            t.printStackTrace();
        }
        //System.exit (0);

    }//end of main
    public String printAndAppend(StringBuilder sb, String s){
        try{
    sb.append(s).append("\n");
    System.out.println(s);
        }catch(Exception exe){}
        return s;
    }
}

Вот  мне нужно, как  то передать   s  из метода  printAndAppend  на сервлет .....
Вопрос, что написать на сервелете, и как  реализовать передачу    
PM MAIL   Вверх
ivg
Дата 13.4.2008, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Autonomous R&D
**


Профиль
Группа: Участник
Сообщений: 686
Регистрация: 8.2.2006
Где: Екатеринбург

Репутация: 32
Всего: 81



Судя по примеру вашего класса XMLReader (кстати не очень удачное название, назовите хоть что ли MyXMLReader), результатом чтения файлов как .cvs так и .xml будет строка?
Если так то зачем здесь использовать указанный паттерн? По моему, проще в зависимости от getPathVariable вызывать тот или другой метод (код одного из них в конструкторе вашего класса XMLReader).

Цитата(Samotnik @  13.4.2008,  18:50 Найти цитируемый пост)
Вот  мне нужно, как  то передать   s  из метода  printAndAppend  на сервлет .....

здесь логика другая: не передавать на сервлет, а из кода сервлета вызывается метод, который вернёт нужный результат, или сам выведет его в респонс.

PM MAIL   Вверх
Samotnik
Дата 13.4.2008, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 5
Всего: 191



Цитата(ivg @  13.4.2008,  20:00 Найти цитируемый пост)
результатом чтения файлов как .cvs так и .xml будет строка?

да, в идеале должно быть так,  т.к.  мне эту строку в вылетающий список  нужно будет передать на  .html

Цитата(ivg @  13.4.2008,  20:00 Найти цитируемый пост)
Если так то зачем здесь использовать указанный паттерн?

Дело в  том, что нужно тут  обязательно реализовать этот паттерн!!!!!! 
Если есть другой способ, я с удовольствием выслушаю !

Добавлено через 1 минуту и 2 секунды
Цитата(ivg @  13.4.2008,  20:00 Найти цитируемый пост)
здесь логика другая: не передавать на сервлет, а из кода сервлета вызывается метод, который вернёт нужный результат, или сам выведет его в респонс.

и как это сделать ?   
мой метод printAndAppend  выполнит эту функцию ?
PM MAIL   Вверх
ivg
  Дата 13.4.2008, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Autonomous R&D
**


Профиль
Группа: Участник
Сообщений: 686
Регистрация: 8.2.2006
Где: Екатеринбург

Репутация: 32
Всего: 81



Цитата(Samotnik @  13.4.2008,  20:05 Найти цитируемый пост)
Если есть другой способ, я с удовольствием выслушаю !


Цитата(ivg @  13.4.2008,  20:00 Найти цитируемый пост)
в зависимости от getPathVariable вызывать тот или другой метод (код одного из них в конструкторе вашего класса XMLReader).

ну например
Код

public class FileUtil {
  
  public static String readXMLFile() {
    StringBuilder sb = new StringBuilder();
    try {
      ...
    } catch(Exception e) {
       ...
    }
    return sb.toString(); 
  }

  public static String readCSVFile() {
    StringBuilder sb = new StringBuilder();
    try {
      ...
    } catch(Exception e) {
       ...
    }
    return sb.toString();
  }
}

в методе service сервлета:
Код

  String content;
  if ("csv".equals(getPathVariable)) {
    content = FileUtil.readCSVFile();
  } else if ("xml".equals(getPathVariable)){
    content = FileUtil.readXMLFile();
  } else {
    content = "only xml or csv file type allowed!!!";
  }
  // ну а дальше дело техники вывести строку в респонс. 


Это сообщение отредактировал(а) ivg - 13.4.2008, 20:39
PM MAIL   Вверх
ivg
Дата 13.4.2008, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Autonomous R&D
**


Профиль
Группа: Участник
Сообщений: 686
Регистрация: 8.2.2006
Где: Екатеринбург

Репутация: 32
Всего: 81



Цитата(Samotnik @  13.4.2008,  20:05 Найти цитируемый пост)
Дело в  том, что нужно тут  обязательно реализовать этот паттерн!!!!!!

Ну раз так то например
Код

public interface IContentReader {
  public String getContent();
}

Код

public class MyXMLReader extends HelppperClass implements IContentReader  {
  public MyXMLReader() { }
  
  public String getContent() {
    StringBuilder sb = new StringBuilder();
    try {
      ...
    } catch(Exception e) {
       ...
    }
    return sb.toString();
  }
}

Код

public class MyCSVReader extends HelppperClass implements IContentReader  {
  public MyCSVReader() { }
  
  public String getContent() {
    StringBuilder sb = new StringBuilder();
    try {
      ...
    } catch(Exception e) {
       ...
    }
    return sb.toString();
  }
}

Код

public class ContentReaderFactory {
  public static IContentReader createContentReader(String fileType) {
    if ("csv".equals(fileType)) {
      return new MyCSVReader();
    } else if ("xml".equals(fileType)){
      return new MyXMLReader();
    } else {
      throw new RuntimeException("only xml or csv file type allowed!!!");
    }
  }
}

в методе service сервлета:
Код

  IContentReader contentReader = ContentReaderFactory.createContentReader(getPathVariable);
  String content = contentReader.getContent();
  // ну а дальше дело техники вывести строку в респонс. 


Первый вариант кажется проще?   smile smile

Это сообщение отредактировал(а) ivg - 13.4.2008, 21:21
PM MAIL   Вверх
Samotnik
Дата 13.4.2008, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 5
Всего: 191



Цитата(ivg @  13.4.2008,  21:18 Найти цитируемый пост)
Первый вариант кажется проще?

намного,  ведь там  тоже   фабрика реализованна, да ? 
PM MAIL   Вверх
ivg
Дата 14.4.2008, 06:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Autonomous R&D
**


Профиль
Группа: Участник
Сообщений: 686
Регистрация: 8.2.2006
Где: Екатеринбург

Репутация: 32
Всего: 81



Цитата(Samotnik @  13.4.2008,  21:38 Найти цитируемый пост)
ведь там  тоже   фабрика реализованна, да ?

Нет. Одним из ключевых моментов этого паттерна является инстанциирование объекта, класс (тип) которого определяется во время выполнения.
Вот, а если сравнить код клиента (имеется ввиду код из метода service сервлета), то второй вариант попроще будет.  smile
Вобщем в определённых ситуациях использование этого паттерна имеет смысл. Если задачка учебная, предлагаю её усложнить, чтобы применение фабрики было оправдано. Например добавить еще пару тройку вариантов, в создаваемые классы добавить поля, в которых например сохранять результаты чтения. smile 
Цитата(Samotnik @  13.4.2008,  20:05 Найти цитируемый пост)
т.к.  мне эту строку в вылетающий список  нужно будет передать на  .html

И вы потом хотите эту строку снова разбирать, чтобы в селекте (html) вывести нужные значения? Или строка ещё где-то используется?
PM MAIL   Вверх
Samotnik
Дата 14.4.2008, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 5
Всего: 191



ivg,   ну мне дали задание, в котором нужно реализовать factory  я решил его применить при чтении файлов, т.е.  если юзер выбрал   xml    то генерится фабричный метод и достает данные  из   xml   если   юзер выбрал  csv   то   фабричный метод генерит  чтение  из  csv 
у меня есть :
сервлет, который принял  (либо  xml    либо  csv )
есть  классы, которые читают  из  разных файлов (если нвдо,  могу вместо  классов  чтения сделать методы ....)
вот я и пытаюсь узнать, как это все вместе прикрутить и реализовать фабричный метод 
PM MAIL   Вверх
ivg
Дата 14.4.2008, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Autonomous R&D
**


Профиль
Группа: Участник
Сообщений: 686
Регистрация: 8.2.2006
Где: Екатеринбург

Репутация: 32
Всего: 81



Ну тогда, если целесообразность применения данного паттерна не играет роли (учебное задание), то я думаю можно смело использовать второй вариант. Просто, для реальных задач и исходя из озвученных условий, боюсь это будет излишним.
PM MAIL   Вверх
Samotnik
Дата 14.4.2008, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 5
Всего: 191



а какую функцию  должен выполнять  класс HelppperClass ?
Что там должно быть  ? 
PM MAIL   Вверх
ivg
Дата 14.4.2008, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Autonomous R&D
**


Профиль
Группа: Участник
Сообщений: 686
Регистрация: 8.2.2006
Где: Екатеринбург

Репутация: 32
Всего: 81



Так это у вас он обозначен в третьем посте.
Цитата(Samotnik @  13.4.2008,  18:50 Найти цитируемый пост)
public class XMLReader extends HelppperClass{

PM MAIL   Вверх
Samotnik
Дата 14.4.2008, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 5
Всего: 191



ivg,  а он пустой  smile   я еще ничего туда не писал, и наверное не буду  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0595 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.