/** * Writes an attribute in DateTimeSyntax into the stream. * <p> * The syntax value is defined as 11 octets follwing the * DateAndTime format of RFC 1903. (see IppResponse) * </p> * * @param attribute the attribute * @throws IOException if thrown by the stream */ private void write(DateTimeSyntax attribute) throws IOException { String name = ((Attribute) attribute).getName(); out.writeByte(IppValueTag.DATETIME); out.writeShort(name.length()); out.write(name.getBytes()); out.writeShort(11); // length fixed to 11 Date date = attribute.getValue(); Calendar cal = new GregorianCalendar(); cal.setTime(date); out.writeShort(cal.get(Calendar.YEAR)); out.writeByte(cal.get(Calendar.MONTH)); out.writeByte(cal.get(Calendar.DAY_OF_MONTH)); out.writeByte(cal.get(Calendar.HOUR_OF_DAY)); out.writeByte(cal.get(Calendar.MINUTE)); int second = cal.get(Calendar.SECOND); out.writeByte(second == 0 ? 60 : second); out.writeByte(cal.get(Calendar.MILLISECOND) / 100); int offsetInMillis = cal.get(Calendar.ZONE_OFFSET); char directionFromUTC = '+'; if (offsetInMillis < 0) { directionFromUTC = '-'; offsetInMillis = offsetInMillis * (-1); } out.writeByte(directionFromUTC); out.writeByte(offsetInMillis / 3600000); // hours out.writeByte((offsetInMillis % 3600000) / 60000); // minutes }
/** * Writes the given attribute groups of the given map instance * (key=group, values=set of attributes) into the supplied data * output stream. * * @param attributes the set with the attributes. * * @throws IOException if thrown by the used DataOutputStream. * @throws IppException if unknown attributes occur. */ public void writeAttributes(AttributeSet attributes) throws IOException, IppException { Attribute[] attributeArray = attributes.toArray(); for (int i = 0; i < attributeArray.length; i++) { logger.log(Component.IPP, "Attribute: Name: <" + attributeArray[i] .getCategory().getName() + "> Value: <" + attributeArray[i].toString() + ">"); if (attributeArray[i] instanceof IntegerSyntax) write((IntegerSyntax) attributeArray[i]); else if (attributeArray[i] instanceof TextSyntax) write((TextSyntax) attributeArray[i]); else if (attributeArray[i] instanceof DateTimeSyntax) write((DateTimeSyntax) attributeArray[i]); else if (attributeArray[i] instanceof ResolutionSyntax) write((ResolutionSyntax) attributeArray[i]); else if (attributeArray[i] instanceof SetOfIntegerSyntax) write((SetOfIntegerSyntax) attributeArray[i]); else if (attributeArray[i] instanceof EnumSyntax) write((EnumSyntax) attributeArray[i]); else if (attributeArray[i] instanceof URISyntax) write((URISyntax) attributeArray[i]); else if (attributeArray[i] instanceof CharsetSyntax) write((CharsetSyntax) attributeArray[i]); else if (attributeArray[i] instanceof NaturalLanguageSyntax) write((NaturalLanguageSyntax) attributeArray[i]); else if (attributeArray[i] instanceof RequestedAttributes) write((RequestedAttributes) attributeArray[i]); else throw new IppException("Unknown syntax type"); } }
public static Object getIppValue(Attribute attr, byte ippvtag) { Object o = null; switch (ippvtag) { // integer values for the "value-tag" field. case IppAttribute.TAG_BOOLEAN: case IppAttribute.TAG_INTEGER: case IppAttribute.TAG_ENUM: if (attr instanceof IntegerSyntax) { o = new Integer(((IntegerSyntax) attr).getValue()); } else if (attr instanceof EnumSyntax) { o = new Integer(((EnumSyntax) attr).getValue()); } else if (attr instanceof DateTimeSyntax || attr instanceof ResolutionSyntax || attr instanceof SetOfIntegerSyntax || attr instanceof Size2DSyntax || attr instanceof TextSyntax || attr instanceof URISyntax) { // TODO - process other attr's types } break; // octetString values for the "value-tag" field. case IppAttribute.TAG_DATETIME: case IppAttribute.TAG_RESOLUTION: case IppAttribute.TAG_RANGEOFINTEGER: case IppAttribute.TAG_OCTETSTRINGUNSPECIFIEDFORMAT: case IppAttribute.TAG_TEXTWITHLANGUAGE: case IppAttribute.TAG_NAMEWITHLANGUAGE: if (attr instanceof IntegerSyntax) { // TODO - it seems that this needs to be fixed o = new Integer(((IntegerSyntax) attr).toString()); } else if (attr instanceof EnumSyntax) { // TODO - it seems that this needs to be fixed o = new Integer(((EnumSyntax) attr).toString()); } else if (attr instanceof DateTimeSyntax || attr instanceof ResolutionSyntax || attr instanceof SetOfIntegerSyntax || attr instanceof Size2DSyntax) { // TODO - process other attr's types } else if (attr instanceof TextSyntax) { // TODO - it seems that this needs to be fixed o = new Integer(((TextSyntax) attr).toString()); } else if (attr instanceof URISyntax) { // TODO - it seems that this needs to be fixed o = new Integer(((URISyntax) attr).toString()); } break; // character-string values for the "value-tag" field case IppAttribute.TAG_TEXTWITHOUTLANGUAGE: case IppAttribute.TAG_NAMEWITHOUTLANGUAGE: case IppAttribute.TAG_KEYWORD: case IppAttribute.TAG_URI: case IppAttribute.TAG_URISCHEME: case IppAttribute.TAG_CHARSET: case IppAttribute.TAG_NATURAL_LANGUAGE: case IppAttribute.TAG_MIMEMEDIATYPE: if (attr instanceof IntegerSyntax) { o = ((IntegerSyntax) attr).toString(); } else if (attr instanceof EnumSyntax) { o = ((EnumSyntax) attr).toString(); } else if (attr instanceof DateTimeSyntax || attr instanceof ResolutionSyntax || attr instanceof SetOfIntegerSyntax || attr instanceof Size2DSyntax) { // TODO - process other attr's types } else if (attr instanceof TextSyntax) { o = ((TextSyntax) attr).toString(); } else if (attr instanceof URISyntax) { o = ((URISyntax) attr).toString(); } break; default: break; } return o; }