Skip to content

Commit 50c2927

Browse files
committed
Issue 26: windowsReservedNamesReplacements
1 parent eda791a commit 50c2927

File tree

2 files changed

+62
-2
lines changed

2 files changed

+62
-2
lines changed

src/main/java/com/googlecode/scheme2ddl/FileNameConstructor.java

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,11 @@
44
import org.apache.commons.logging.Log;
55
import org.apache.commons.logging.LogFactory;
66
import org.springframework.beans.factory.InitializingBean;
7+
import org.springframework.beans.factory.annotation.Autowired;
8+
import org.springframework.stereotype.Component;
79
import org.springframework.util.Assert;
810

11+
import javax.annotation.Resource;
912
import java.util.HashMap;
1013
import java.util.Map;
1114

@@ -33,6 +36,12 @@ public class FileNameConstructor implements InitializingBean {
3336
private String preparedTemplate;
3437
private Map<String, String> extensionMap;
3538

39+
40+
private boolean needToReplaceWindowsReservedFileNames = false;
41+
42+
@Resource
43+
private Map<String,String> windowsReservedNamesReplacements;
44+
3645
/**
3746
* prepare template
3847
* replace keywords with %keyword
@@ -89,8 +98,17 @@ public String map2FileName(UserObject userObject) {
8998
filename = filename.replace(nonOracleChar + kw_type_lower, typeName.toLowerCase());
9099
filename = filename.replace(nonOracleChar + kw_type_UPPER, typeName.toUpperCase());
91100

92-
filename = filename.replace(nonOracleChar + kw_objectname_lower, userObject.getName().toLowerCase());
93-
filename = filename.replace(nonOracleChar + kw_objectname_UPPER, userObject.getName().toUpperCase());
101+
102+
String userObjectName = userObject.getName();
103+
104+
if (needToReplaceWindowsReservedFileNames){
105+
if (windowsReservedNamesReplacements.get(userObjectName) != null){
106+
userObjectName = windowsReservedNamesReplacements.get(userObjectName);
107+
}
108+
}
109+
110+
filename = filename.replace(nonOracleChar + kw_objectname_lower, userObjectName.toLowerCase());
111+
filename = filename.replace(nonOracleChar + kw_objectname_UPPER, userObjectName.toUpperCase());
94112

95113
String extension = extensionMap.get(typeName.toUpperCase());
96114
if (extension == null) {
@@ -126,9 +144,19 @@ public void afterPropertiesSet() {
126144
extensionMap = new HashMap<String, String>();
127145
extensionMap.put("DEFAULT", "sql");
128146
}
147+
148+
149+
if (windowsReservedNamesReplacements == null){
150+
needToReplaceWindowsReservedFileNames=false;
151+
152+
}
129153
}
130154

131155
public void setExtensionMap(Map<String, String> extensionMap) {
132156
this.extensionMap = extensionMap;
133157
}
158+
159+
public void setNeedToReplaceWindowsReservedFileNames(boolean needToReplaceWindowsReservedFileNames) {
160+
this.needToReplaceWindowsReservedFileNames = needToReplaceWindowsReservedFileNames;
161+
}
134162
}

src/main/resources/scheme2ddl.config.xml

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@
7474
-->
7575
<property name="template" value="types_plural/object_name.ext"/>
7676
<property name="templateForSysDBA" value="SCHEMA/types_plural/object_name.ext"/>
77+
<property name="needToReplaceWindowsReservedFileNames" value="true"/>
7778

7879
<!-- File extension map rules.
7980
Use predefined 'TOAD' or 'PL/SQL Developer' mapping or create custom mapping -->
@@ -121,6 +122,37 @@
121122
</util:map>
122123

123124

125+
<!--
126+
Windows doesn't allow to save files with reserved file names
127+
https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247%28v=vs.85%29.aspx
128+
This is confugurable workaround for this limitation
129+
-->
130+
<util:map id="windowsReservedNamesReplacements" key-type="java.lang.String" value-type="java.lang.String">
131+
<entry key="CON " value="CON_" />
132+
<entry key="PRN" value="PRN_" />
133+
<entry key="AUX" value="AUX_" />
134+
<entry key="NUL" value="NUL_" />
135+
<entry key="COM1" value="COM1_"/>
136+
<entry key="COM2" value="COM2_"/>
137+
<entry key="COM3" value="COM3_"/>
138+
<entry key="COM4" value="COM4_"/>
139+
<entry key="COM5" value="COM5_"/>
140+
<entry key="COM6" value="COM6_"/>
141+
<entry key="COM7" value="COM7_"/>
142+
<entry key="COM8" value="COM8_"/>
143+
<entry key="COM9" value="COM9_"/>
144+
<entry key="LPT1" value="LPT1_"/>
145+
<entry key="LPT2" value="LPT2_"/>
146+
<entry key="LPT3" value="LPT3_"/>
147+
<entry key="LPT4" value="LPT4_"/>
148+
<entry key="LPT5" value="LPT5_"/>
149+
<entry key="LPT6" value="LPT6_"/>
150+
<entry key="LPT7" value="LPT7_"/>
151+
<entry key="LPT8" value="LPT8_"/>
152+
<entry key="LPT9" value="LPT9_"/>
153+
</util:map>
154+
155+
124156
<!-- Specify dependable items for every user object type accordingly with http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14258/d_metada.htm#BGBIEDIA -->
125157
<util:map id="dependencies">
126158
<entry key="TABLE">

0 commit comments

Comments
 (0)