package de.eisfeldj.augendiagnosefx.util.imagefile; import java.util.Date; import de.eisfeldj.augendiagnosefx.util.imagefile.EyePhoto.RightLeft; /** * Helper class holding the metadata to be written into the file. */ public final class JpegMetadata { /** * Flag indicating that the overlay size has been set automatically by camera activity ant not by user. */ public static final int FLAG_OVERLAY_SET_BY_CAMERA_ACTIVITY = 0b10; // JAVADOC:OFF private static final String LINE_BREAK = "\n"; private String mTitle = null; private String mDescription = null; private String mSubject = null; private String mComment = null; private String mPerson = null; private Float mXCenter = null; private Float mYCenter = null; private Float mOverlayScaleFactor = null; private Float mXPosition = null; private Float mYPosition = null; private Float mZoomFactor = null; private Date mOrganizeDate = null; private RightLeft mRightLeft = null; private Float mBrightness = null; private Float mContrast = null; private Float mSaturation = null; private Float mColorTemperature = null; private Float mPupilSize = null; private Float mPupilXOffset = null; private Float mPupilYOffset = null; private Integer mOverlayColor = null; private int mFlags = 0; public String getTitle() { return mTitle; } public void setTitle(final String title) { this.mTitle = title; } public String getDescription() { return mDescription; } public void setDescription(final String description) { this.mDescription = description; } public String getSubject() { return mSubject; } public void setSubject(final String subject) { this.mSubject = subject; } public String getComment() { return mComment; } public void setComment(final String comment) { this.mComment = comment; } public String getPerson() { return mPerson; } public void setPerson(final String person) { this.mPerson = person; } public Float getXCenter() { return mXCenter; } public void setXCenter(final Float xCenter) { this.mXCenter = xCenter; } public Float getYCenter() { return mYCenter; } public void setYCenter(final Float yCenter) { this.mYCenter = yCenter; } public Float getOverlayScaleFactor() { return mOverlayScaleFactor; } public void setOverlayScaleFactor(final Float overlayScaleFactor) { this.mOverlayScaleFactor = overlayScaleFactor; } public Float getXPosition() { return mXPosition; } public void setXPosition(final Float xPosition) { this.mXPosition = xPosition; } public Float getYPosition() { return mYPosition; } public void setYPosition(final Float yPosition) { this.mYPosition = yPosition; } public Float getZoomFactor() { return mZoomFactor; } public void setZoomFactor(final Float zoomFactor) { this.mZoomFactor = zoomFactor; } public Date getOrganizeDate() { return mOrganizeDate; } public void setOrganizeDate(final Date organizeDate) { this.mOrganizeDate = organizeDate; } public RightLeft getRightLeft() { return mRightLeft; } public void setRightLeft(final RightLeft rightLeft) { this.mRightLeft = rightLeft; } public Float getBrightness() { return mBrightness; } public void setBrightness(final Float brightness) { this.mBrightness = brightness; } public Float getContrast() { return mContrast; } public void setContrast(final Float contrast) { this.mContrast = contrast; } public Float getSaturation() { return mSaturation; } public void setSaturation(final Float saturation) { this.mSaturation = saturation; } public Float getColorTemperature() { return mColorTemperature; } public void setColorTemperature(final Float colorTemparature) { this.mColorTemperature = colorTemparature; } public Integer getOverlayColor() { return mOverlayColor; } public void setOverlayColor(final Integer overlayColor) { this.mOverlayColor = overlayColor; } public Float getPupilSize() { return mPupilSize; } public void setPupilSize(final Float pupilSize) { this.mPupilSize = pupilSize; } public Float getPupilXOffset() { return mPupilXOffset; } public void setPupilXOffset(final Float pupilXOffset) { this.mPupilXOffset = pupilXOffset; } public Float getPupilYOffset() { return mPupilYOffset; } public void setPupilYOffset(final Float pupilYOffset) { this.mPupilYOffset = pupilYOffset; } protected int getFlags() { return mFlags; } protected void setFlags(final int flags) { this.mFlags = flags; } // JAVADOC:ON /** * Check if overlay position is stored. * * @return true if overlay position is stored. */ public boolean hasOverlayPosition() { return mXCenter != null && mYCenter != null && mOverlayScaleFactor != null; } /** * Check if the position of the image in the view is stored. * * @return true if the image position is stored. */ public boolean hasViewPosition() { return mXPosition != null && mYPosition != null && mZoomFactor != null; } /** * Check if brightness and contrast are stored. * * @return true if brightness and contrast are stored. */ public boolean hasBrightnessContrast() { return mBrightness != null && mContrast != null; } // JAVADOC:OFF // Getters and setters with type conversion. public void setXCenter(final String value) { mXCenter = value == null ? null : Float.parseFloat(value); } public String getXCenterString() { return mXCenter == null ? null : mXCenter.toString(); } public void setYCenter(final String value) { mYCenter = value == null ? null : Float.parseFloat(value); } public String getYCenterString() { return mYCenter == null ? null : mYCenter.toString(); } public void setOverlayScaleFactor(final String value) { mOverlayScaleFactor = value == null ? null : Float.parseFloat(value); } public String getOverlayScaleFactorString() { return mOverlayScaleFactor == null ? null : mOverlayScaleFactor.toString(); } public void setXPosition(final String value) { mXPosition = value == null ? null : Float.parseFloat(value); } public String getXPositionString() { return mXPosition == null ? null : mXPosition.toString(); } public void setYPosition(final String value) { mYPosition = value == null ? null : Float.parseFloat(value); } public String getYPositionString() { return mYPosition == null ? null : mYPosition.toString(); } public void setZoomFactor(final String value) { mZoomFactor = value == null ? null : Float.parseFloat(value); } public String getZoomFactorString() { return mZoomFactor == null ? null : mZoomFactor.toString(); } public void setRightLeft(final String value) { mRightLeft = value == null ? null : RightLeft.fromString(value); } public String getRightLeftString() { return mRightLeft == null ? null : mRightLeft.toString(); } public void setBrightness(final String value) { mBrightness = value == null ? null : Float.parseFloat(value); } public String getBrightnessString() { return mBrightness == null ? null : mBrightness.toString(); } public void setContrast(final String value) { mContrast = value == null ? null : Float.parseFloat(value); } public String getContrastString() { return mContrast == null ? null : mContrast.toString(); } public void setSaturation(final String value) { mSaturation = value == null ? null : Float.parseFloat(value); } public String getSaturationString() { return mSaturation == null ? null : mSaturation.toString(); } public void setColorTemperature(final String value) { mColorTemperature = value == null ? null : Float.parseFloat(value); } public String getColorTemperatureString() { return mColorTemperature == null ? null : mColorTemperature.toString(); } public void setOverlayColor(final String value) { mOverlayColor = value == null ? null : (int) Long.parseLong(value, 16); // MAGIC_NUMBER } public String getOverlayColorString() { return mOverlayColor == null ? null : Integer.toHexString(mOverlayColor); } public void setPupilSize(final String value) { mPupilSize = value == null ? null : Float.parseFloat(value); } public String getPupilSizeString() { return mPupilSize == null ? null : mPupilSize.toString(); } public void setPupilXOffset(final String value) { mPupilXOffset = value == null ? null : Float.parseFloat(value); } public String getPupilXOffsetString() { return mPupilXOffset == null ? null : mPupilXOffset.toString(); } public void setPupilYOffset(final String value) { mPupilYOffset = value == null ? null : Float.parseFloat(value); } public String getPupilYOffsetString() { return mPupilYOffset == null ? null : mPupilYOffset.toString(); } // JAVADOC:ON /** * Add a flag from the constants JpegMetadata.FLAG_XXX. * * @param flag * The flag to be added. */ public void addFlag(final int flag) { mFlags |= flag; } /** * Remove a flag from the constants JpegMetadata.FLAG_XXX. * * @param flag * The flag to be removed. */ public void removeFlag(final int flag) { mFlags &= ~flag; } /** * Get a flag from the constants JpegMetadata.FLAG_XXX. * * @param flag * The flag to be retrieved. * @return true if the flag is set. */ public boolean hasFlag(final int flag) { return (mFlags & flag) != 0; } @Override public String toString() { StringBuffer str = new StringBuffer(); str.append("Title: " + mTitle + LINE_BREAK); str.append("Description: " + mDescription + LINE_BREAK); str.append("Subject: " + mSubject + LINE_BREAK); str.append("Comment: " + mComment + LINE_BREAK); str.append("Person: " + mPerson + LINE_BREAK); str.append("X-Center: " + mXCenter + LINE_BREAK); str.append("Y-Center: " + mYCenter + LINE_BREAK); str.append("OverlayScaleFactor: " + mOverlayScaleFactor + LINE_BREAK); str.append("X-Position: " + mXPosition + LINE_BREAK); str.append("Y-Position: " + mYPosition + LINE_BREAK); str.append("ZoomFactor: " + mZoomFactor + LINE_BREAK); str.append("OrganizeDate: " + mOrganizeDate + LINE_BREAK); str.append("RightLeft: " + mRightLeft + LINE_BREAK); str.append("Brightness: " + mBrightness + LINE_BREAK); str.append("Contrast: " + mContrast + LINE_BREAK); str.append("Saturation: " + mSaturation + LINE_BREAK); str.append("ColorTemperature: " + mColorTemperature + LINE_BREAK); str.append("OverlayColor: " + getOverlayColorString() + LINE_BREAK); str.append("Pupil-Size: " + mPupilSize + LINE_BREAK); str.append("Pupil-X-Offset: " + mPupilXOffset + LINE_BREAK); str.append("Pupil-Y-Offset: " + mPupilYOffset + LINE_BREAK); str.append("Flags: " + mFlags + LINE_BREAK); return str.toString(); } }