Further workarounds for java being rubbish, by having a dedicated class to create concrete instances of interfaces for you

git-svn-id: https://svn.apache.org/repos/asf/poi/branches/ooxml@637610 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Nick Burch 2008-03-16 16:51:58 +00:00
parent 379e682366
commit 1f3c93908c
8 changed files with 149 additions and 15 deletions

View File

@ -0,0 +1,19 @@
/* ====================================================================
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.ss.usermodel;
public interface CreationHelper {}

View File

@ -153,17 +153,6 @@ public interface Cell {
String getCellFormula(); String getCellFormula();
/**
* Creates a RichTextString, which you can then pass to
* {@link #setCellValue(RichTextString)}. This is required
* because Java is broken, and won't allow you to define
* static methods or constructors on interfaces, and without
* that there's no way to get a RichTextString without
* creating the appropriate concrete class.
* @param text The text to initialise the RichTextString with
*/
RichTextString createRichTextString(String text);
/** /**
* get the value of the cell as a number. For strings we throw an exception. * get the value of the cell as a number. For strings we throw an exception.
* For blank cells we return a 0. * For blank cells we return a 0.

View File

@ -0,0 +1,42 @@
/* ====================================================================
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.ss.usermodel;
/**
* An object that handles instantiating concrete
* classes of the various instances one needs for
* HSSF and XSSF.
* Works around a major shortcoming in Java, where we
* can't have static methods on interfaces or abstract
* classes.
* This allows you to get the appropriate class for
* a given interface, without you having to worry
* about if you're dealing with HSSF or XSSF, despite
* Java being quite rubbish.
*/
public interface CreationHelper {
/**
* Creates a new RichTextString instance
* @param text The text to initialise the RichTextString with
*/
RichTextString createRichTextString(String text);
/**
* Creates a new DataFormat instance
*/
DataFormat createDataFormat();
}

View File

@ -18,14 +18,12 @@
package org.apache.poi.ss.usermodel; package org.apache.poi.ss.usermodel;
public interface DataFormat { public interface DataFormat {
/** /**
* get the format index that matches the given format string. * get the format index that matches the given format string.
* Creates a new format if one is not found. Aliases text to the proper format. * Creates a new format if one is not found. Aliases text to the proper format.
* @param format string matching a built in format * @param format string matching a built in format
* @return index of format. * @return index of format.
*/ */
short getFormat(String format); short getFormat(String format);
/** /**
@ -33,7 +31,5 @@ public interface DataFormat {
* @param index of a format * @param index of a format
* @return string represented at index of format or null if there is not a format at that index * @return string represented at index of format or null if there is not a format at that index
*/ */
String getFormat(short index); String getFormat(short index);
} }

View File

@ -455,4 +455,13 @@ public interface Workbook {
*/ */
List getAllEmbeddedObjects(); List getAllEmbeddedObjects();
/**
* Returns an object that handles instantiating concrete
* classes of the various instances one needs for
* HSSF and XSSF.
* Works around a major shortcoming in Java, where we
* can't have static methods on interfaces or abstract
* classes.
*/
CreationHelper getCreationHelper();
} }

View File

@ -0,0 +1,43 @@
/* ====================================================================
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.xssf.usermodel;
import org.apache.poi.ss.usermodel.CreationHelper;
import org.apache.poi.ss.usermodel.DataFormat;
import org.apache.poi.ss.usermodel.RichTextString;
public class XSSFCreationHelper implements CreationHelper {
private XSSFWorkbook workbook;
private XSSFDataFormat dataFormat;
XSSFCreationHelper(XSSFWorkbook wb) {
workbook = wb;
// Create the things we only ever need one of
dataFormat = new XSSFDataFormat();
}
/**
* Creates a new XSSFRichTextString for you.
*/
public RichTextString createRichTextString(String text) {
return new XSSFRichTextString(text);
}
public DataFormat createDataFormat() {
return dataFormat;
}
}

View File

@ -0,0 +1,32 @@
/* ====================================================================
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.xssf.usermodel;
import org.apache.poi.ss.usermodel.DataFormat;
/**
* TODO - figure out how this should really work for XSSF
*/
public class XSSFDataFormat implements DataFormat {
public short getFormat(String format) {
return -1;
}
public String getFormat(short index) {
return null;
}
}

View File

@ -27,6 +27,7 @@ import javax.xml.namespace.QName;
import org.apache.poi.POIXMLDocument; import org.apache.poi.POIXMLDocument;
import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.CreationHelper;
import org.apache.poi.ss.usermodel.DataFormat; import org.apache.poi.ss.usermodel.DataFormat;
import org.apache.poi.ss.usermodel.Font; import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.Name; import org.apache.poi.ss.usermodel.Name;
@ -533,4 +534,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook {
this.sharedStringSource = sharedStringSource; this.sharedStringSource = sharedStringSource;
} }
public CreationHelper getCreationHelper() {
return new XSSFCreationHelper(this);
}
} }