1 14 package org.compiere.model; 15 16 import java.io.Serializable ; 17 import java.sql.PreparedStatement ; 18 import java.sql.ResultSet ; 19 import java.sql.SQLException ; 20 import java.util.ArrayList ; 21 import java.util.Properties ; 22 23 import org.compiere.util.DB; 24 import org.compiere.util.Env; 25 import org.compiere.util.Log; 26 27 33 public class MWindowVO implements Serializable 34 { 35 40 private MWindowVO (Properties ctx, int WindowNo) 41 { 42 this.ctx = ctx; 43 this.WindowNo = WindowNo; 44 } 46 47 public Properties ctx; 48 49 public int WindowNo; 50 51 public int AD_Window_ID = 0; 53 public String Name = ""; 54 public String Description = ""; 55 public String Help = ""; 56 public String WindowType = ""; 57 public int AD_Image_ID = 0; 58 public int AD_Color_ID = 0; 59 public String IsReadWrite = null; 60 61 62 public ArrayList Tabs = null; 63 64 public static final String WINDOWTYPE_QUERY = "Q"; 65 public static final String WINDOWTYPE_TRX = "T"; 66 public static final String WINDOWTYPE_MMAINTAIN = "M"; 67 68 72 public void setCtx (Properties newCtx) 73 { 74 ctx = newCtx; 75 for (int i = 0; i < Tabs.size() ; i++) 76 { 77 MTabVO tab = (MTabVO)Tabs.get(i); 78 tab.setCtx(newCtx); 79 } 80 } 82 83 84 92 public static MWindowVO create (Properties ctx, int WindowNo, int AD_Window_ID) 93 { 94 return create (ctx, WindowNo, AD_Window_ID, 0); 95 } 97 106 public static MWindowVO create (Properties ctx, int WindowNo, int AD_Window_ID, int AD_Menu_ID) 107 { 108 Log.trace(Log.l2_Sub, "MWindowVO.create #" + WindowNo, 109 "AD_Window_ID=" + AD_Window_ID + "; AD_Menu_ID=" + AD_Menu_ID); 110 MWindowVO vo = new MWindowVO (ctx, WindowNo); 111 vo.AD_Window_ID = AD_Window_ID; 112 113 if (vo.AD_Window_ID == 0 && AD_Menu_ID != 0) 115 { 116 String sql = "SELECT AD_Window_ID FROM AD_Menu " 117 + "WHERE AD_Menu_ID=? AND Action='W'"; 118 try 119 { 120 PreparedStatement pstmt = DB.prepareStatement(sql); 121 pstmt.setInt(1, AD_Menu_ID); 122 ResultSet rs = pstmt.executeQuery(); 123 while (rs.next()) 124 vo.AD_Window_ID = rs.getInt(1); 125 rs.close(); 126 pstmt.close(); 127 } 128 catch (SQLException e) 129 { 130 Log.error("MWindowVO.create-Menu", e); 131 return null; 132 } 133 Log.trace(Log.l2_Sub, "AD_Window_ID=" + vo.AD_Window_ID); 134 } 135 136 138 StringBuffer sql = new StringBuffer ("SELECT Name,Description,Help,WindowType, " 139 + "AD_Color_ID,AD_Image_ID, a.IsReadWrite "); 140 141 if (Env.isBaseLanguage(vo.ctx, "AD_Window")) 142 sql.append("FROM AD_Window w, AD_Window_Access a " 143 + "WHERE w.AD_Window_ID=?" 144 + " AND w.AD_Window_ID=a.AD_Window_ID AND a.AD_Role_ID=?" 145 + " AND w.IsActive='Y' AND a.IsActive='Y'"); 146 else 147 sql.append("FROM AD_Window_vt w, AD_Window_Access a " 148 + "WHERE w.AD_Window_ID=?" 149 + " AND w.AD_Window_ID=a.AD_Window_ID AND a.AD_Role_ID=?" 150 + " AND a.IsActive='Y'") 151 .append(" AND AD_Language='") 152 .append(Env.getAD_Language(vo.ctx)).append("'"); 153 154 try 155 { 156 PreparedStatement pstmt = DB.prepareStatement(sql.toString()); 158 pstmt.setInt(1, vo.AD_Window_ID); 159 pstmt.setInt(2, Env.getContextAsInt(vo.ctx, "#AD_Role_ID")); 160 ResultSet rs = pstmt.executeQuery(); 162 if (rs.next()) 163 { 164 vo.Name = rs.getString(1); 165 vo.Description = rs.getString(2); 166 if (vo.Description == null) 167 vo.Description = ""; 168 vo.Help = rs.getString(3); 169 if (vo.Help == null) 170 vo.Help = ""; 171 vo.WindowType = rs.getString(4); 172 vo.AD_Color_ID = rs.getInt(5); 174 vo.AD_Image_ID = rs.getInt(6); 175 vo.IsReadWrite = rs.getString(7); 176 } 177 rs.close(); 178 pstmt.close(); 179 } 180 catch (SQLException ex) 181 { 182 Log.error("MWindowVO.create - " + sql.toString(), ex); 183 return null; 184 } 185 if (vo.IsReadWrite == null) 186 { 187 Log.saveError("AccessTableNoView", ""); 188 return null; 189 } 190 191 createTabs (vo); 193 if (vo.Tabs == null || vo.Tabs.size() == 0) 194 { 195 Log.error("MWindowVO.create - No Tabs"); 196 return null; 197 } 198 199 return vo; 200 } 202 207 private static boolean createTabs (MWindowVO mWindowVO) 208 { 209 mWindowVO.Tabs = new ArrayList (); 210 211 String sql = MTabVO.getSQL(mWindowVO); 212 int TabNo = 0; 213 int AD_Table_ID = 0; 214 try 215 { 216 PreparedStatement pstmt = DB.prepareStatement(sql); 218 pstmt.setInt(1, mWindowVO.AD_Window_ID); 219 ResultSet rs = pstmt.executeQuery(); 220 boolean firstTab = true; 221 while (rs.next()) 222 { 223 if (AD_Table_ID == 0) 224 AD_Table_ID = rs.getInt("AD_Table_ID"); 225 MTabVO mTabVO = MTabVO.create(mWindowVO, TabNo, rs, 227 mWindowVO.WindowType.equals(WINDOWTYPE_QUERY), mWindowVO.WindowType.equals(WINDOWTYPE_TRX)); if (mTabVO == null && firstTab) 230 break; if (mTabVO != null) 232 { 233 if (!mTabVO.IsReadOnly && "N".equals(mWindowVO.IsReadWrite)) 234 mTabVO.IsReadOnly = true; 235 mWindowVO.Tabs.add(mTabVO); 236 TabNo++; firstTab = false; 238 } 239 } 240 rs.close(); 241 pstmt.close(); 242 } 243 catch (SQLException e) 244 { 245 Log.error("MWindowVO.createTabs", e); 246 return false; 247 } 248 249 if (TabNo == 0 || mWindowVO.Tabs.size() == 0) 251 return false; 252 253 Env.setContext(mWindowVO.ctx, mWindowVO.WindowNo, "BaseTable_ID", AD_Table_ID); 255 return true; 256 } 258 } 260 | Popular Tags |