org.apache.poi.hpsf.ClassID Maven / Gradle / Ivy
Show all versions of org.apache.servicemix.bundles.poi
/* ====================================================================
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
==================================================================== */
package org.apache.poi.hpsf;
import java.nio.ByteBuffer;
import java.util.Arrays;
import java.util.Locale;
import java.util.Map;
import java.util.UUID;
import java.util.function.Supplier;
import org.apache.poi.common.Duplicatable;
import org.apache.poi.common.usermodel.GenericRecord;
import org.apache.poi.util.GenericRecordUtil;
import org.apache.poi.util.LittleEndianInput;
import org.apache.poi.util.LittleEndianOutput;
/**
* Represents a class ID (16 bytes). Unlike other little-endian
* type the {@link ClassID} is not just 16 bytes stored in the wrong
* order. Instead, it is a double word (4 bytes) followed by two
* words (2 bytes each) followed by 8 bytes.
*
* The ClassID (or CLSID) is a UUID - see RFC 4122
*/
public class ClassID implements Duplicatable, GenericRecord {
/** The number of bytes occupied by this object in the byte stream. */
public static final int LENGTH = 16;
/**
* The bytes making out the class ID in correct order, i.e. big-endian.
*/
private final byte[] bytes = new byte[LENGTH];
/**
* Creates a ClassID and reads its value from a byte array.
*
* @param src The byte array to read from.
* @param offset The offset of the first byte to read.
*/
public ClassID(final byte[] src, final int offset) {
read(src, offset);
}
/**
* Creates a ClassID and initializes its value with 0x00 bytes.
*/
public ClassID() {
Arrays.fill(bytes, (byte)0);
}
/**
* Clones the given ClassID
*
* @param other The ClassID to use a base for creating this one
*/
public ClassID(ClassID other) {
System.arraycopy(other.bytes, 0, bytes, 0, bytes.length);
}
/**
* Creates a ClassID from a human-readable representation of the Class ID in standard
* format {@code "{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}"}.
*
* @param externalForm representation of the Class ID represented by this object.
*/
public ClassID(String externalForm) {
String clsStr = externalForm.replaceAll("[{}-]", "");
for (int i=0; i> getGenericProperties() {
return GenericRecordUtil.getGenericProperties("uuid", this::toString);
}
}