Электронный магазин на Java и XML

       

Класс Image


Очередной класс, который мы рассмотрим, — это класс Image. Он основан на следующем определении DTD:

<!ELEMENT image (caption?)>

<!ATTLIST image format (gif|png|jpg) #REQUIRED width CDATA #IMPLIED height CDATA #IMPLIED src CDATA

#REQUIRED>

<!ELEMENT caption (paragraph)* >

Определенный здесь элемент caption аналогичен элементу description в объекте product. Поскольку структура элемента paragraph достаточно сложная, мы представим этот элемент в виде простой строки XML, которую пользователь может непосредственно редактировать. Атрибуты format и scr можно представить в виде полей типа String. Атрибуты height и width не являются обязательными, поэтому следует учесть, что иногда эти атрибуты будут отсутствовать. Для этого нужно использовать класс Integer, в котором имеется значение null, означающее отсутствие атрибута. Начало класса Image показано в листинге 6.28.

Листинг 6.28. Начало кода класса Image (Image.java)

package com.XmlEcomBook.Chap06;

import java.io.*; import org.w3c.dom.*;

public class Image {

private String format; private Integer width; private Integer height; private String src; private String caption;

Конструкторы класса Image действуют по тому же принципу, что и конструкторы других классов связывания данных. Конструктор без аргументов создает объект Image, устанавливаемый по умолчанию; затем второй конструктор создает объект Image на основе объекта DOM Element. Аргументы scr и format извлекаются непосредственно из элемента image. Для атрибутов width и height используется служебный метод get Integer, так как существует вероятность того, что эти атрибуты не будут присутствовать, поскольку они являются необязательными. Метод getlnteger возвращает null в тех случаях, когда ему передается пустой объект. Наконец, если существует элемент caption, его содержимое извлекается как текст. Эти конструкторы показаны в листинге 6.29.

Листинг 6.29. Конструкторы класса Image (Image.java)

public Image( Element imgElement) { format = imgElement.getAttribute( "format" ); width = Util.getInteger( imgElement.getAttribute( "width" ) ); height = Util.getInteger( imgElement.getAttribute( "height" ) ); src = imgElement.getAttribute( "src" ); NodeList captionList = imgElement.getElementsByTagName( "caption" ); if( captionList.getLength() > 0 ) { Element captionElement = (Element)captionList.item( 0 ); caption = Util.extractMarkupAsText(captionElement.getChildNodes()); } }


Каждое из полей класса Image имеет методы getXxx и setXxx. Эти простые методы задают или возвращают значение соответствующего поля. Из соображений экономии места мы не приводим их в книге, но на прилагаемом компакт-диске все эти методы присутствуют.

Метод toXML, который генерирует элемент image, показан в листинге 6.30. Открывающий тег содержит четыре атрибута — атрибуты format и scr присутствуют всегда, так как они являются обязательными, а для необязательных атрибутов width и height организована проверка их наличия. Перед тем как записать их, следует проверить, содержат ли они какое-либо значение (отличное от null).



Листинг 6.30. Преобразование Image в XML (Image.java)

public void toXML( XMLWriter writer ) throws IOException { writer.write( "<image " ); writer.write( "format='" + format + "' " ); if( width != null ) writer.write( "width='" + width + "' " ); if( height != null ) writer.write( "height='" + height + "' " ); writer.writeln( "src='" + src + "'>" ); writer.indent(); if( caption != null ) writer.writeln( "<caption>" + caption + "</caption>" ); writer.unindent(); writer.writeln( "</image>" ); } }

 




Содержание раздела