1dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu/*
2dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * Copyright 2011 castLabs, Berlin
3dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu *
4dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * Licensed under the Apache License, Version 2.0 (the License);
5dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * you may not use this file except in compliance with the License.
6dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * You may obtain a copy of the License at
7dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu *
8dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu *     http://www.apache.org/licenses/LICENSE-2.0
9dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu *
10dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * Unless required by applicable law or agreed to in writing, software
11dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * distributed under the License is distributed on an AS IS BASIS,
12dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * See the License for the specific language governing permissions and
14dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * limitations under the License.
15dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu */
16dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
17dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhupackage com.googlecode.mp4parser.boxes.ultraviolet;
18dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
19dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport com.coremedia.iso.IsoTypeReader;
20dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport com.coremedia.iso.Utf8;
21dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport com.googlecode.mp4parser.AbstractFullBox;
22dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
23dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport java.nio.ByteBuffer;
24dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
25dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu/**
26dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu *
27dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu */
28dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhupublic class BaseLocationBox extends AbstractFullBox {
29dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    String baseLocation = "";
30dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    String purchaseLocation = "";
31dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
32dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public BaseLocationBox() {
33dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        super("bloc");
34dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
35dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
36dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public BaseLocationBox(String baseLocation, String purchaseLocation) {
37dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        super("bloc");
38dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        this.baseLocation = baseLocation;
39dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        this.purchaseLocation = purchaseLocation;
40dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
41dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
42dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public String getBaseLocation() {
43dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        return baseLocation;
44dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
45dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
46dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public void setBaseLocation(String baseLocation) {
47dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        this.baseLocation = baseLocation;
48dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
49dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
50dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public String getPurchaseLocation() {
51dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        return purchaseLocation;
52dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
53dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
54dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public void setPurchaseLocation(String purchaseLocation) {
55dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        this.purchaseLocation = purchaseLocation;
56dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
57dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
58dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    @Override
59dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    protected long getContentSize() {
60dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        return 1028;
61dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
62dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
63dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    @Override
64dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public void _parseDetails(ByteBuffer content) {
65dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        parseVersionAndFlags(content);
66dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        baseLocation = IsoTypeReader.readString(content);
67dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        content.get(new byte[256 - Utf8.utf8StringLengthInBytes(baseLocation) - 1]);
68dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        purchaseLocation = IsoTypeReader.readString(content);
69dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        content.get(new byte[256 - Utf8.utf8StringLengthInBytes(purchaseLocation) - 1]);
70dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        content.get(new byte[512]);
71dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
72dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
73dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    @Override
74dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    protected void getContent(ByteBuffer byteBuffer) {
75dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        writeVersionAndFlags(byteBuffer);
76dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        byteBuffer.put(Utf8.convert(baseLocation));
77dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        byteBuffer.put(new byte[256 - Utf8.utf8StringLengthInBytes(baseLocation)]); // string plus term zero
78dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        byteBuffer.put(Utf8.convert(purchaseLocation));
79dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        byteBuffer.put(new byte[256 - Utf8.utf8StringLengthInBytes(purchaseLocation)]); // string plus term zero
80dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        byteBuffer.put(new byte[512]);
81dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
82dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
83dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    @Override
84dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public boolean equals(Object o) {
85dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        if (this == o) return true;
86dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        if (o == null || getClass() != o.getClass()) return false;
87dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
88dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        BaseLocationBox that = (BaseLocationBox) o;
89dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
90dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        if (baseLocation != null ? !baseLocation.equals(that.baseLocation) : that.baseLocation != null) return false;
91dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        if (purchaseLocation != null ? !purchaseLocation.equals(that.purchaseLocation) : that.purchaseLocation != null)
92dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            return false;
93dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
94dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        return true;
95dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
96dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
97dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    @Override
98dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public int hashCode() {
99dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        int result = baseLocation != null ? baseLocation.hashCode() : 0;
100dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        result = 31 * result + (purchaseLocation != null ? purchaseLocation.hashCode() : 0);
101dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        return result;
102dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
103dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu}
104