| /* ==================================================================== |
| 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.ddf; |
| |
| import java.util.Map; |
| import java.util.function.Function; |
| import java.util.function.Supplier; |
| import java.util.stream.Collectors; |
| import java.util.stream.Stream; |
| |
| public enum EscherRecordTypes { |
| // records greater then 0xF000 belong to Microsoft Office Drawing format also known as Escher |
| |
| /** |
| * {@link EscherContainerRecord Container} for all OfficeArt file records that contain document-wide data. |
| * <p> |
| * Contains, amongst others children, a {@link #BSTORE_CONTAINER}. |
| * <p> |
| * Referred to as an {@code OfficeArtDggContainer} in {@code [MS-ODRAW].pdf v20201117}. |
| */ |
| DGG_CONTAINER(0xF000, "DggContainer", null, EscherContainerRecord::new), |
| |
| /** |
| * {@link EscherContainerRecord Container} for all BLIPs (binary large image or picture) that are used in the |
| * drawings associated with the parent {@link #DGG_CONTAINER}. |
| * <p> |
| * Contains a list of {@link EscherBSERecord}s. |
| * <p> |
| * Referred to as an {@code OfficeArtBStoreContainer} in {@code [MS-ODRAW].pdf v20201117}. |
| */ |
| BSTORE_CONTAINER(0xf001, "BStoreContainer", null, EscherContainerRecord::new), |
| |
| /** |
| * {@link EscherContainerRecord Container} for all the file records for the objects in a drawing. |
| * <p> |
| * Referred to as an {@code OfficeArtDgContainer} in {@code [MS-ODRAW].pdf v20201117}. |
| */ |
| DG_CONTAINER(0xf002, "DgContainer", null, EscherContainerRecord::new), |
| SPGR_CONTAINER(0xf003, "SpgrContainer", null, EscherContainerRecord::new), |
| SP_CONTAINER(0xf004, "SpContainer", null, EscherContainerRecord::new), |
| SOLVER_CONTAINER(0xf005, "SolverContainer", null, EscherContainerRecord::new), |
| DGG(0xf006, "Dgg", "MsofbtDgg", EscherDggRecord::new), |
| BSE(0xf007, "BSE", "MsofbtBSE", EscherBSERecord::new), |
| DG(0xf008, "Dg", "MsofbtDg", EscherDgRecord::new), |
| SPGR(0xf009, "Spgr", "MsofbtSpgr", EscherSpgrRecord::new), |
| SP(0xf00a, "Sp", "MsofbtSp", EscherSpRecord::new), |
| OPT(0xf00b, "Opt", "msofbtOPT", EscherOptRecord::new), |
| TEXTBOX(0xf00c, null, null, EscherTextboxRecord::new), |
| CLIENT_TEXTBOX(0xf00d, "ClientTextbox", "msofbtClientTextbox", EscherTextboxRecord::new), |
| ANCHOR(0xf00e, null, null, null), |
| CHILD_ANCHOR(0xf00f, "ChildAnchor", "MsofbtChildAnchor", EscherChildAnchorRecord::new), |
| CLIENT_ANCHOR(0xf010, "ClientAnchor", "MsofbtClientAnchor", EscherClientAnchorRecord::new), |
| CLIENT_DATA(0xf011, "ClientData", "MsofbtClientData", EscherClientDataRecord::new), |
| CONNECTOR_RULE(0xf012, null, null, null), |
| ALIGN_RULE(0xf013, null, null, null), |
| ARC_RULE(0xf014, null, null, null), |
| CLIENT_RULE(0xf015, null, null, null), |
| CLSID(0xf016, null, null, null), |
| CALLOUT_RULE(0xf017, null, null, null), |
| BLIP_START(0xf018, "Blip", "msofbtBlip", null), |
| BLIP_EMF(0xf018 + 2 /* 0xf01a */, "BlipEmf", null, EscherMetafileBlip::new), |
| BLIP_WMF(0xf018 + 3 /* 0xf01b */, "BlipWmf", null, EscherMetafileBlip::new), |
| BLIP_PICT(0xf018 + 4 /* 0xf01c */, "BlipPict", null, EscherMetafileBlip::new), |
| BLIP_JPEG(0xf018 + 5 /* 0xf01d */, "BlipJpeg", null, EscherBitmapBlip::new), |
| BLIP_PNG(0xf018 + 6 /* 0xf01e */, "BlipPng", null, EscherBitmapBlip::new), |
| BLIP_DIB(0xf018 + 7 /* 0xf01f */, "BlipDib", null, EscherBitmapBlip::new), |
| BLIP_END(0xf117, "Blip", "msofbtBlip", null), |
| REGROUP_ITEMS(0xf118, null, null, null), |
| SELECTION(0xf119, null, null, null), |
| COLOR_MRU(0xf11a, null, null, null), |
| DELETED_PSPL(0xf11d, null, null, null), |
| SPLIT_MENU_COLORS(0xf11e, "SplitMenuColors", "MsofbtSplitMenuColors", EscherSplitMenuColorsRecord::new), |
| OLE_OBJECT(0xf11f, null, null, null), |
| COLOR_SCHEME(0xf120, null, null, null), |
| // same as EscherTertiaryOptRecord.RECORD_ID |
| USER_DEFINED(0xf122, "TertiaryOpt", null, EscherTertiaryOptRecord::new), |
| UNKNOWN(0xffff, "unknown", "unknown", UnknownEscherRecord::new); |
| |
| public final short typeID; |
| public final String recordName; |
| public final String description; |
| public final Supplier<? extends EscherRecord> constructor; |
| |
| EscherRecordTypes(int typeID, String recordName, String description, Supplier<? extends EscherRecord> constructor) { |
| this.typeID = (short) typeID; |
| this.recordName = recordName; |
| this.description = description; |
| this.constructor = constructor; |
| } |
| |
| private Short getTypeId() { |
| return typeID; |
| } |
| |
| private static final Map<Short, EscherRecordTypes> LOOKUP = |
| Stream.of(values()).collect(Collectors.toMap(EscherRecordTypes::getTypeId, Function.identity())); |
| |
| public static EscherRecordTypes forTypeID(int typeID) { |
| EscherRecordTypes rt = LOOKUP.get((short)typeID); |
| return (rt != null) ? rt : EscherRecordTypes.UNKNOWN; |
| } |
| |
| } |