From eadc631076b5524da37d678d8f4d280fc2873672 Mon Sep 17 00:00:00 2001 From: varuntangirala Date: Wed, 3 May 2023 07:14:01 -0400 Subject: [PATCH 01/31] [BACKLOG-37246] Page Zoom (AA) - Base XUL/GWT Dialog Classes - XML Attributes --- .../mantle/client/admin/ChangePasswordByUserDialog.java | 5 +++-- .../pentaho/mantle/client/admin/ChangePasswordDialog.java | 5 +++-- .../java/org/pentaho/mantle/client/admin/RoleDialog.java | 7 ++++--- .../java/org/pentaho/mantle/client/admin/UserDialog.java | 5 +++-- 4 files changed, 13 insertions(+), 9 deletions(-) diff --git a/user-console/src/main/java/org/pentaho/mantle/client/admin/ChangePasswordByUserDialog.java b/user-console/src/main/java/org/pentaho/mantle/client/admin/ChangePasswordByUserDialog.java index 35602d8d770..32d4a963550 100644 --- a/user-console/src/main/java/org/pentaho/mantle/client/admin/ChangePasswordByUserDialog.java +++ b/user-console/src/main/java/org/pentaho/mantle/client/admin/ChangePasswordByUserDialog.java @@ -77,6 +77,9 @@ public ChangePasswordByUserDialog( MantleController controller ) { cancelBtn.setStylePrimaryName( "pentaho-button" ); cancelBtn.addClickHandler( new CancelListener() ); + setResponsive( true ); + setWidthCategory( WidthCategory.EXTRASMALL ); + this.controller = controller; } @@ -84,8 +87,6 @@ public ChangePasswordByUserDialog( MantleController controller ) { protected DialogBox createManagedDialog() { DialogBox dialog = super.createManagedDialog(); dialog.setStyleDependentName( "change-password", true ); - dialog.setResponsive( true ); - dialog.setWidthCategory( DialogBox.DialogWidthCategory.EXTRA_SMALL ); return dialog; } diff --git a/user-console/src/main/java/org/pentaho/mantle/client/admin/ChangePasswordDialog.java b/user-console/src/main/java/org/pentaho/mantle/client/admin/ChangePasswordDialog.java index 25206b77468..829ce5e9ee2 100644 --- a/user-console/src/main/java/org/pentaho/mantle/client/admin/ChangePasswordDialog.java +++ b/user-console/src/main/java/org/pentaho/mantle/client/admin/ChangePasswordDialog.java @@ -72,6 +72,9 @@ public ChangePasswordDialog( UpdatePasswordController controller ) { cancelBtn.setStylePrimaryName( "pentaho-button" ); cancelBtn.addClickHandler( new CancelListener() ); + setResponsive( true ); + setWidthCategory( WidthCategory.EXTRASMALL ); + this.controller = controller; } @@ -79,8 +82,6 @@ public ChangePasswordDialog( UpdatePasswordController controller ) { protected DialogBox createManagedDialog() { DialogBox dialog = super.createManagedDialog(); dialog.setStyleDependentName( "change-password", true ); - dialog.setResponsive( true ); - dialog.setWidthCategory( DialogBox.DialogWidthCategory.EXTRA_SMALL ); return dialog; } diff --git a/user-console/src/main/java/org/pentaho/mantle/client/admin/RoleDialog.java b/user-console/src/main/java/org/pentaho/mantle/client/admin/RoleDialog.java index 91583cd8c35..141ab0c49cd 100644 --- a/user-console/src/main/java/org/pentaho/mantle/client/admin/RoleDialog.java +++ b/user-console/src/main/java/org/pentaho/mantle/client/admin/RoleDialog.java @@ -63,6 +63,10 @@ public RoleDialog( UserRolesAdminPanelController controller ) { cancelBtn.setStylePrimaryName( "pentaho-button" ); cancelBtn.addClickHandler( new CancelListener() ); + setResponsive( true ); + setWidthCategory( WidthCategory.EXTRASMALL ); + setMinimumHeightCategory( MinimumHeightCategory.CONTENT ); + this.controller = controller; } @@ -70,9 +74,6 @@ public RoleDialog( UserRolesAdminPanelController controller ) { protected DialogBox createManagedDialog() { DialogBox dialog = super.createManagedDialog(); dialog.setStyleDependentName( "new-role", true ); - dialog.setResponsive( true ); - dialog.setWidthCategory( DialogBox.DialogWidthCategory.EXTRA_SMALL ); - dialog.setMinimumHeightCategory( DialogBox.DialogMinimumHeightCategory.CONTENT ); return dialog; } diff --git a/user-console/src/main/java/org/pentaho/mantle/client/admin/UserDialog.java b/user-console/src/main/java/org/pentaho/mantle/client/admin/UserDialog.java index 121fdc7271f..cbce040a1be 100644 --- a/user-console/src/main/java/org/pentaho/mantle/client/admin/UserDialog.java +++ b/user-console/src/main/java/org/pentaho/mantle/client/admin/UserDialog.java @@ -80,6 +80,9 @@ public UserDialog( UserRolesAdminPanelController controller ) { cancelBtn.setStylePrimaryName( "pentaho-button" ); cancelBtn.addClickHandler( new CancelListener() ); + setResponsive( true ); + setWidthCategory( WidthCategory.EXTRASMALL ); + this.controller = controller; } @@ -87,8 +90,6 @@ public UserDialog( UserRolesAdminPanelController controller ) { protected DialogBox createManagedDialog() { DialogBox dialog = super.createManagedDialog(); dialog.setStyleDependentName( "new-user", true ); - dialog.setResponsive( true ); - dialog.setWidthCategory( DialogBox.DialogWidthCategory.EXTRA_SMALL ); return dialog; } From 301bd7996ccab00f9cd1f42f4d64501061d77d11 Mon Sep 17 00:00:00 2001 From: kdarshana12 Date: Thu, 4 May 2023 15:03:34 +0100 Subject: [PATCH 02/31] [BACKLOG-37557] Added KeyDownHandlers for listbox --- .../SelectUserOrRoleDialog.java | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/user-console/src/main/java/org/pentaho/mantle/client/solutionbrowser/fileproperties/SelectUserOrRoleDialog.java b/user-console/src/main/java/org/pentaho/mantle/client/solutionbrowser/fileproperties/SelectUserOrRoleDialog.java index d2dd090421e..45f1fd62023 100644 --- a/user-console/src/main/java/org/pentaho/mantle/client/solutionbrowser/fileproperties/SelectUserOrRoleDialog.java +++ b/user-console/src/main/java/org/pentaho/mantle/client/solutionbrowser/fileproperties/SelectUserOrRoleDialog.java @@ -14,7 +14,7 @@ * See the GNU Lesser General Public License for more details. * * - * Copyright (c) 2002-2018 Hitachi Vantara. All rights reserved. + * Copyright (c) 2002-2023 Hitachi Vantara. All rights reserved. * */ @@ -25,6 +25,8 @@ import com.google.gwt.core.client.JsonUtils; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; +import com.google.gwt.event.dom.client.KeyDownEvent; +import com.google.gwt.event.dom.client.KeyDownHandler; import com.google.gwt.http.client.Request; import com.google.gwt.http.client.RequestBuilder; import com.google.gwt.http.client.RequestCallback; @@ -67,6 +69,26 @@ public void onClick( ClickEvent event ) { } } ); + usersListBox.addKeyDownHandler( new KeyDownHandler() { + @Override + public void onKeyDown( KeyDownEvent event ) { + if ( event.isDownArrow() || event.isUpArrow() ) { + rolesListBox.setSelectedIndex( -1 ); + okButton.setEnabled( true ); + } + } + } ); + + rolesListBox.addKeyDownHandler( new KeyDownHandler() { + @Override + public void onKeyDown( KeyDownEvent event ) { + if ( event.isDownArrow() || event.isUpArrow() ) { + usersListBox.setSelectedIndex( -1 ); + okButton.setEnabled( true ); + } + } + } ); + setCallback( new IDialogCallback() { public void cancelPressed() { From a3168a7445ed47a3d231a29d186218162f88f3e6 Mon Sep 17 00:00:00 2001 From: phalguni-a Date: Fri, 5 May 2023 16:13:06 +0530 Subject: [PATCH 03/31] [BACKLOG-37603] - WCAG Shift-Tab to go back and forth between folders and files impacts being able to select files --- .../resources/org/pentaho/mantle/public/browser/js/browser.js | 1 + 1 file changed, 1 insertion(+) diff --git a/user-console/src/main/resources/org/pentaho/mantle/public/browser/js/browser.js b/user-console/src/main/resources/org/pentaho/mantle/public/browser/js/browser.js index 3203dc2e865..1a3c91e5b97 100644 --- a/user-console/src/main/resources/org/pentaho/mantle/public/browser/js/browser.js +++ b/user-console/src/main/resources/org/pentaho/mantle/public/browser/js/browser.js @@ -1250,6 +1250,7 @@ define([ $target.addClass("selected"); $target.children(".element").attr("tabindex", 0).attr("aria-selected", true); //deselect any files + $("#fileBrowserFiles").children("[role=listbox]").removeAttr("aria-activedescendant"); $(".file.selected").removeClass("selected"); depth = $target.attr("path").split("/").length; event.stopPropagation(); From 5f558f04ff43a0decd2023056478a9d84dcb7ba8 Mon Sep 17 00:00:00 2001 From: phalguni-a Date: Mon, 8 May 2023 15:23:02 +0530 Subject: [PATCH 04/31] [BACKLOG-37610] - Properties option doesn't load anything --- .../org/pentaho/mantle/public/browser/js/browser.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/user-console/src/main/resources/org/pentaho/mantle/public/browser/js/browser.js b/user-console/src/main/resources/org/pentaho/mantle/public/browser/js/browser.js index 1a3c91e5b97..7e8a6973b09 100644 --- a/user-console/src/main/resources/org/pentaho/mantle/public/browser/js/browser.js +++ b/user-console/src/main/resources/org/pentaho/mantle/public/browser/js/browser.js @@ -1497,8 +1497,10 @@ define([ } break; case a11yUtil.keyCodes.space: - evt.preventDefault(); - this.clickFile(evt); + if ($(evt.currentTarget).children(".active-descendant").length > 0) { + evt.preventDefault(); + this.clickFile(evt); + } break; case a11yUtil.keyCodes.A: // control + A From 0e1d5a8bb5bbf6dbed10f57c934df5369dee1c1e Mon Sep 17 00:00:00 2001 From: singletonc Date: Tue, 9 May 2023 11:59:35 -0400 Subject: [PATCH 05/31] [BACKLOG-37059] Page Zoom (AA) - User Console "Burger Menu" --- .../mantle/client/MantleApplication.java | 17 +- .../mantle/client/ui/BurgerMenuBar.java | 330 ++++++++++++++++++ .../mantle/client/ui/BurgerMenuPopup.java | 116 ++++++ .../mantle/client/ui/CustomDropDown.java | 15 +- .../mantle/client/ui/PerspectiveManager.java | 26 +- .../mantle/client/ui/UserDropDown.java | 5 +- .../client/ui/xul/MantleController.java | 160 ++++++++- .../mantle/client/ui/xul/MantleModel.java | 14 + .../mantle/client/ui/xul/MantleXul.java | 19 +- .../org/pentaho/mantle/public/Mantle.jsp | 1 + .../themes/ruby/images/burgerButton.png | Bin 0 -> 1533 bytes .../ruby/images/dropdown_left_arrow_blue.png | Bin 0 -> 704 bytes .../ruby/images/dropdown_left_arrow_white.png | Bin 0 -> 1406 bytes .../mantle/public/themes/ruby/mantleRuby.css | 307 +++++++++++++--- .../org/pentaho/mantle/public/xul/mantle.xul | 5 + 15 files changed, 958 insertions(+), 57 deletions(-) create mode 100644 user-console/src/main/java/org/pentaho/mantle/client/ui/BurgerMenuBar.java create mode 100644 user-console/src/main/java/org/pentaho/mantle/client/ui/BurgerMenuPopup.java create mode 100644 user-console/src/main/resources/org/pentaho/mantle/public/themes/ruby/images/burgerButton.png create mode 100644 user-console/src/main/resources/org/pentaho/mantle/public/themes/ruby/images/dropdown_left_arrow_blue.png create mode 100644 user-console/src/main/resources/org/pentaho/mantle/public/themes/ruby/images/dropdown_left_arrow_white.png diff --git a/user-console/src/main/java/org/pentaho/mantle/client/MantleApplication.java b/user-console/src/main/java/org/pentaho/mantle/client/MantleApplication.java index 0ced27d68f1..debb92e3975 100644 --- a/user-console/src/main/java/org/pentaho/mantle/client/MantleApplication.java +++ b/user-console/src/main/java/org/pentaho/mantle/client/MantleApplication.java @@ -52,7 +52,6 @@ import org.pentaho.mantle.client.events.MantleSettingsLoadedEvent; import org.pentaho.mantle.client.events.MantleSettingsLoadedEventHandler; import org.pentaho.mantle.client.events.PerspectivesLoadedEvent; -import org.pentaho.mantle.client.events.PerspectivesLoadedEventHandler; import org.pentaho.mantle.client.events.UserSettingsLoadedEvent; import org.pentaho.mantle.client.events.UserSettingsLoadedEventHandler; import org.pentaho.mantle.client.messages.Messages; @@ -87,6 +86,8 @@ public class MantleApplication implements UserSettingsLoadedEventHandler, Mantle private static MantleApplication instance; + private static UserDropDown userDropDown; + private MantleApplication() { } @@ -342,9 +343,10 @@ public void onMantleSettingsLoaded( MantleSettingsLoadedEvent event ) { mantleRevisionOverride = settings.get( "user-console-revision" ); RootPanel.get( "pucMenuBar" ).add( MantleXul.getInstance().getMenubar() ); + RootPanel.get( "pucBurgerToolbar" ).add( MantleXul.getInstance().getBurgerToolbarWrapper() ); RootPanel.get( "pucPerspectives" ).add( PerspectiveManager.getInstance() ); RootPanel.get( "pucToolBar" ).add( MantleXul.getInstance().getToolbar() ); - RootPanel.get( "pucUserDropDown" ).add( new UserDropDown() ); + RootPanel.get( "pucUserDropDown" ).add( getUserDropDown() ); if ( showOnlyPerspective && !StringUtils.isEmpty( startupPerspective ) ) { RootPanel.get( "pucHeader" ).setVisible( false ); @@ -484,6 +486,17 @@ public DeckPanel getContentDeck() { return contentDeck; } + /** + * Get the UserDropDown + * @return UserDropDown + */ + public static UserDropDown getUserDropDown() { + if ( userDropDown == null ) { + userDropDown = new UserDropDown(); + } + return userDropDown; + } + private void loadWhitelistedHosts() { if ( getWhitelistedHosts() != null ) { diff --git a/user-console/src/main/java/org/pentaho/mantle/client/ui/BurgerMenuBar.java b/user-console/src/main/java/org/pentaho/mantle/client/ui/BurgerMenuBar.java new file mode 100644 index 00000000000..cc264b54413 --- /dev/null +++ b/user-console/src/main/java/org/pentaho/mantle/client/ui/BurgerMenuBar.java @@ -0,0 +1,330 @@ +/*! + * This program is free software; you can redistribute it and/or modify it under the + * terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software + * Foundation. + * + * You should have received a copy of the GNU Lesser General Public License along with this + * program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html + * or from the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU Lesser General Public License for more details. + * + * Copyright (c) 2023 Hitachi Vantara. All rights reserved. + */ + +package org.pentaho.mantle.client.ui; + +import com.google.gwt.core.client.Scheduler; +import com.google.gwt.event.dom.client.KeyCodes; +import com.google.gwt.safehtml.shared.annotations.IsSafeHtml; +import com.google.gwt.user.client.DOM; +import com.google.gwt.user.client.Event; +import com.google.gwt.user.client.ui.DecoratedPopupPanel; +import com.google.gwt.user.client.ui.MenuBar; +import com.google.gwt.user.client.ui.MenuItem; +import com.google.gwt.user.client.ui.PopupPanel; +import com.google.gwt.user.client.ui.Widget; +import com.google.gwt.user.client.ui.impl.FocusImpl; +import org.pentaho.gwt.widgets.client.menuitem.PentahoMenuItem; +import org.pentaho.gwt.widgets.client.menuitem.PentahoMenuSeparator; +import org.pentaho.gwt.widgets.client.utils.ElementUtils; +import org.pentaho.gwt.widgets.client.utils.MenuBarUtils; + +import java.util.List; + +/** + * Extension of {@link MenuBar MenuBar}, the BurgerMenuBar is a compact version of the PUC menus + */ +public class BurgerMenuBar extends MenuBar { + + public static class BurgerBackMenuItem extends PentahoMenuItem { + public BurgerBackMenuItem( @IsSafeHtml String text, boolean asHTML ) { + super( text, asHTML, null ); + + addStyleName( "pen-BurgerBackMenuItem" ); + + setScheduledCommand( this::goBack ); + } + + private void goBack() { + ( (BurgerMenuBar) getParentMenu() ).closeLocal( true ); + } + } + + public BurgerMenuBar() { + super( true ); + + // Changing the primary style name will result in + // Menu Popup Panels with an additional class of pen-BurgerMenuBarPopup (beyond the gwt-MenuBarPopup) + setStylePrimaryName( "pen-BurgerMenuBar" ); + + // Recover base style names to allow sharing the CSS. + addStyleName( "gwt-MenuBar" ); + addStyleName( "gwt-MenuBar-vertical" ); + } + + @Override + public void onBrowserEvent( Event event ) { + MenuItem selectedItemBefore = null; + int eventType = DOM.eventGetType( event ); + switch ( eventType ) { + case Event.ONCLICK: { + onItemClick( findItemLocal( DOM.eventGetTarget( event ) ) ); + return; + } + + // Overriding mouse over and out, and prevent calling the base, private itemOver method, + // is the only way to prevent hovering-over from automatically open a sub-menu on non-top-level menus... + case Event.ONMOUSEOVER: + onItemOver( findItemLocal( DOM.eventGetTarget( event ) ), true ); + return; + + case Event.ONMOUSEOUT: + onItemOver( findItemLocal( DOM.eventGetTarget( event ) ), false ); + return; + + case Event.ONKEYDOWN: + switch ( event.getKeyCode() ) { + case KeyCodes.KEY_ESCAPE: + // Override so that only this menubar's popup menu is closed, + // and not all popups until (but except) the top-level one. + onEscape(); + eatEventLocal( event ); + return; + + case KeyCodes.KEY_ENTER: + // Override to also place focus on submenu, when there is one. + onEnter(); + eatEventLocal( event ); + return; + + default: + selectedItemBefore = getSelectedItem(); + break; + } + break; + + default: + break; + } + + super.onBrowserEvent( event ); + + if ( eventType == Event.ONKEYDOWN ) { + MenuItem selectedItemAfter = getSelectedItem(); + if ( selectedItemAfter != null && selectedItemAfter != selectedItemBefore ) { + // Selected menu item changed when using the keyboard. + ensureVisible( selectedItemAfter ); + } + } + } + + private void onItemClick( MenuItem item ) { + focus(); + + if ( item != null ) { + doItemActionLocal( item, true, true ); + } + } + + private void onItemOver( MenuItem item, boolean isOver ) { + // Still need to select and unselect items. + if ( item != null && item.isEnabled() ) { + selectItem( isOver ? item : null ); + focus(); + } + } + + protected void onEscape() { + closeLocal( true ); + } + + protected void onEnter() { + if ( !selectFirstItemIfNoneSelectedLocal() ) { + doItemActionLocal( getSelectedItem(), true, true ); + } + } + + protected void ensureVisible( MenuItem menuItem ) { + ElementUtils.scrollVerticallyIntoView( menuItem.getElement() ); + } + + // region Back Menu Items + + /** + * Adds a "back" menu item to each descendant menu bar. + *

+ * Should be called on the root of the subtree, once it's fully built, or when there have been modifications to it. + *

+ * + * @see BurgerBackMenuItem + */ + public void addBackItemToDescendantMenus() { + addBackItems( null ); + } + + private void addBackItems( MenuItem parentMenuItem ) { + if ( parentMenuItem != null && hasItemsButNoBackItem() ) { + // Add a back menu item, followed by a menu item separator. + insertSeparator( new PentahoMenuSeparator(), 0 ); + insertItem( new BurgerBackMenuItem( parentMenuItem.getHTML(), true ), 0 ); + } + + for ( MenuItem menuItem : getItems() ) { + BurgerMenuBar subMenu = (BurgerMenuBar) menuItem.getSubMenu(); + if ( subMenu != null ) { + subMenu.addBackItems( menuItem ); + } + } + } + + private boolean hasItemsButNoBackItem() { + List menuItems = getItems(); + if ( !menuItems.isEmpty() ) { + return !( menuItems.get( 0 ) instanceof BurgerBackMenuItem ); + } else { + return false; + } + } + // endregion Back Menu Items + + protected void closeRoot() { + PopupPanel menuPopup = getRootPopup(); + if ( menuPopup != null ) { + menuPopup.hide(); + } + } + + protected BurgerMenuBar getRootMenu() { + BurgerMenuBar parentMenu = getMenuBarParent(); + if ( parentMenu != null ) { + return parentMenu.getRootMenu(); + } + + return this; + } + + protected PopupPanel getRootPopup() { + Widget parent = getRootMenu().getParent(); + while ( parent != null ) { + if ( parent instanceof PopupPanel ) { + return (BurgerMenuPopup) parent; + } + + parent = parent.getParent(); + } + + return null; + } + + /** + * Local version of {@link MenuBar MenuBar} private super.findItem( Element ) + */ + protected MenuItem findItemLocal( com.google.gwt.dom.client.Element hItem ) { + for ( MenuItem item : getItems() ) { + if ( item.getElement().isOrHasChild( hItem ) ) { + return item; + } + } + + return null; + } + + /** + * Local version of {@link MenuBar MenuBar} private super.eatEvent( Event ) + * + * @param event Event to eat + */ + protected void eatEventLocal( Event event ) { + event.stopPropagation(); + event.preventDefault(); + } + + /** + * Local version of {@link MenuBar MenuBar} private super.close( boolean ) + * + * @param focus boolean value determining if focus is applied to parent after closing + */ + protected void closeLocal( boolean focus ) { + BurgerMenuBar parentMenuBar = getMenuBarParent(); + if ( parentMenuBar != null ) { + PopupPanel popupPanel = parentMenuBar.getMenuBarPopup(); + if ( popupPanel != null ) { + popupPanel.hide( !focus ); + } + + if ( focus ) { + parentMenuBar.focus(); + } + } + } + + /** + * Local version of {@link MenuBar MenuBar} private super.selectFirstItemIfNoneSelected() + * + * @return true if no item was selected before method call (and an item was then selected), else false. + */ + private boolean selectFirstItemIfNoneSelectedLocal() { + if ( getSelectedItem() == null ) { + for ( MenuItem nextItem : getItems() ) { + if ( nextItem.isEnabled() ) { + selectItem( nextItem ); + break; + } + } + + return true; + } + + return false; + } + + /** + * Local, adapted version of {@link MenuBar MenuBar} private super.doItemAction(MenuItem, boolean, boolean). Overrides + * the command execution of a menu item closes the whole menu (unlike closeAllParents()). Additionally, the special + * back menu items do not cause the menu to close. + * + * @param item MenuItem whose action is to be performed + * @param fireCommand boolean determining if command is to be fired + * @param focus boolean determining if focus should be applied to parent MenuBar + */ + protected void doItemActionLocal( MenuItem item, boolean fireCommand, boolean focus ) { + if ( !item.isEnabled() ) { + return; + } + + if ( fireCommand && item.getScheduledCommand() != null ) { + FocusImpl.getFocusImplForPanel().blur( getElement() ); + + if ( !( item instanceof BurgerBackMenuItem ) ) { + closeRoot(); + } + + Scheduler.ScheduledCommand cmd = item.getScheduledCommand(); + Scheduler.get().scheduleFinally( cmd::execute ); + } else { + MenuBarUtils.doItemAction( item, fireCommand, focus ); + } + + if ( item.getScheduledCommand() == null && item.getSubMenu() != null ) { + item.getSubMenu().focus(); + } + } + + /** + * Access to {@link MenuBar MenuBar} private field super.popup + */ + protected DecoratedPopupPanel getMenuBarPopup() { + return MenuBarUtils.getPopup( this ); + } + + /** + * Access to {@link MenuBar MenuBar} private field super.parentMenu + */ + protected BurgerMenuBar getMenuBarParent() { + return (BurgerMenuBar) MenuBarUtils.getParentMenu( this ); + } +} diff --git a/user-console/src/main/java/org/pentaho/mantle/client/ui/BurgerMenuPopup.java b/user-console/src/main/java/org/pentaho/mantle/client/ui/BurgerMenuPopup.java new file mode 100644 index 00000000000..f09fb8369b1 --- /dev/null +++ b/user-console/src/main/java/org/pentaho/mantle/client/ui/BurgerMenuPopup.java @@ -0,0 +1,116 @@ +/*! + * This program is free software; you can redistribute it and/or modify it under the + * terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software + * Foundation. + * + * You should have received a copy of the GNU Lesser General Public License along with this + * program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html + * or from the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU Lesser General Public License for more details. + * + * Copyright (c) 2023 Hitachi Vantara. All rights reserved. + */ + +package org.pentaho.mantle.client.ui; + +import com.google.gwt.dom.client.Element; +import com.google.gwt.dom.client.EventTarget; +import com.google.gwt.dom.client.NativeEvent; +import com.google.gwt.event.dom.client.KeyCodes; +import com.google.gwt.user.client.Event; +import com.google.gwt.user.client.ui.DecoratedPopupPanel; +import com.google.gwt.user.client.ui.Focusable; +import com.google.gwt.user.client.ui.Widget; + +public class BurgerMenuPopup extends DecoratedPopupPanel { + private Widget menuButton; + + public BurgerMenuPopup( Widget menuButton, BurgerMenuBar menuBar ) { + super( true ); + + // Imitate BurgerMenuBar's Popup Panel classes + setStyleName( "gwt-MenuBarPopup" ); + addStyleName( "pen-BurgerMenuBarPopup" ); + + this.menuButton = menuButton; + + setWidget( menuBar ); + + // Avoid inheriting CSS styling for .mainMenubar. + menuBar.getElement().setId( "burgerMenubar" ); + + menuButton.getElement().setAttribute( "aria-controls", menuBar.getElement().getId() ); + menuButton.getElement().setAttribute( "aria-expanded", "true" ); + + // Mouse-down'ing on the button should not trigger the default autoHide behavior, of hiding the PopupPanel. + // This would hide the popup, however, the click event on the button would then immediately re-open the menu popup. + // Instead, the dialog is not closed when clicking on the button and then it is hidden instead in the + // click preview event, in which the event is also canceled, to prevent the default action of opening the popup... + addAutoHidePartner( menuButton.getElement() ); + + addCloseHandler( ev -> { + menuButton.getElement().removeAttribute( "aria-controls" ); + menuButton.getElement().removeAttribute( "aria-expanded" ); + + if ( menuButton instanceof Focusable ) { + ( (Focusable) menuButton ).setFocus( true ); + } + } ); + } + + @Override + protected void onPreviewNativeEvent( Event.NativePreviewEvent event ) { + switch ( event.getTypeInt() ) { + case Event.ONKEYDOWN: { + switch ( event.getNativeEvent().getKeyCode() ) { + // Must handle ESCAPE for the top-level menu. + case KeyCodes.KEY_ESCAPE: + case KeyCodes.KEY_TAB: { + hide(); + event.cancel(); + return; + } + default: + } + break; + } + + case Event.ONCLICK: { + // See comment above on constructor, near addAutoHidePartner. + if ( !eventTargetsPopupLocal( event.getNativeEvent() ) ) { + hide(); + event.cancel(); + } + break; + } + default: + } + + super.onPreviewNativeEvent( event ); + } + + public void showMenu() { + setPopupPositionAndShow( ( offsetWidth, offsetHeight ) -> + // Place below the button. + setPopupPosition( + menuButton.getAbsoluteLeft(), + menuButton.getAbsoluteTop() + menuButton.getOffsetHeight() ) + ); + + ( (BurgerMenuBar) this.getWidget() ).focus(); + } + + // Local version of private super.eventTargetsPopup( NativeEvent ). + protected boolean eventTargetsPopupLocal( NativeEvent event ) { + EventTarget target = event.getEventTarget(); + if ( Element.is( target ) ) { + return getElement().isOrHasChild( Element.as( target ) ); + } + + return false; + } +} diff --git a/user-console/src/main/java/org/pentaho/mantle/client/ui/CustomDropDown.java b/user-console/src/main/java/org/pentaho/mantle/client/ui/CustomDropDown.java index 18ceac1adf9..613019bd8e0 100644 --- a/user-console/src/main/java/org/pentaho/mantle/client/ui/CustomDropDown.java +++ b/user-console/src/main/java/org/pentaho/mantle/client/ui/CustomDropDown.java @@ -91,6 +91,10 @@ public void onClick( ClickEvent event ) { } public void hide( boolean autoClosed ) { + if ( !isShowing() ) { + return; + } + super.hide( autoClosed ); pageBackground.setVisible( false ); GlassPane.getInstance().hide(); @@ -183,13 +187,16 @@ public void onBrowserEvent( Event event ) { addStyleDependentName( "pressed" ); removeStyleDependentName( "hover" ); popup.setWidget( menuBar ); + + int popupWidth = getOffsetWidth() - 2; + popup.setWidth( popupWidth + "px" ); + popup.setPopupPositionAndShow( new PositionCallback() { public void setPosition( int offsetWidth, int offsetHeight ) { popup.setPopupPosition( getAbsoluteLeft(), getAbsoluteTop() + getOffsetHeight() - 1 ); } } ); menuBar.focus(); - popup.setWidth( ( getOffsetWidth() - 2 ) + "px" ); } } else if ( ( event.getTypeInt() & Event.ONMOUSEOVER ) == Event.ONMOUSEOVER ) { if ( enabled ) { @@ -222,7 +229,7 @@ public void setText( String text ) { label.setText( text ); } - protected MenuBar getMenuBar() { + public MenuBar getMenuBar() { return menuBar; } @@ -231,7 +238,9 @@ protected void setMenuBar( MenuBar menuBar ) { } public void hidePopup() { - popup.hide(); + if ( popup.isShowing() ) { + popup.hide(); + } } public boolean isEnabled() { diff --git a/user-console/src/main/java/org/pentaho/mantle/client/ui/PerspectiveManager.java b/user-console/src/main/java/org/pentaho/mantle/client/ui/PerspectiveManager.java index b4d1677af3d..58ba876e263 100644 --- a/user-console/src/main/java/org/pentaho/mantle/client/ui/PerspectiveManager.java +++ b/user-console/src/main/java/org/pentaho/mantle/client/ui/PerspectiveManager.java @@ -14,7 +14,7 @@ * See the GNU Lesser General Public License for more details. * * - * Copyright (c) 2002-2018 Hitachi Vantara. All rights reserved. + * Copyright (c) 2002-2023 Hitachi Vantara. All rights reserved. * */ @@ -25,6 +25,7 @@ import com.google.gwt.core.client.JsArrayString; import com.google.gwt.core.client.JsonUtils; import com.google.gwt.core.client.RunAsyncCallback; +import com.google.gwt.core.client.Scheduler; import com.google.gwt.core.client.Scheduler.ScheduledCommand; import com.google.gwt.http.client.Request; import com.google.gwt.http.client.RequestBuilder; @@ -54,6 +55,7 @@ import org.pentaho.mantle.client.ui.xul.JsPerspective; import org.pentaho.mantle.client.ui.xul.JsXulOverlay; import org.pentaho.mantle.client.ui.xul.MantleXul; +import org.pentaho.gwt.widgets.client.menuitem.MenuCloner; import org.pentaho.mantle.client.workspace.SchedulesPerspectivePanel; import org.pentaho.platform.api.engine.perspective.pojo.IPluginPerspective; import org.pentaho.platform.plugin.services.pluginmgr.perspective.pojo.DefaultPluginPerspective; @@ -61,6 +63,7 @@ import org.pentaho.ui.xul.gwt.util.ResourceBundleTranslator; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; @@ -107,6 +110,10 @@ private PerspectiveManager() { init(); } + private Collection getMenuItems(){ + return perspectiveMenuItemMap.values(); + } + private void init() { final String url = GWT.getHostPageBaseURL() + "api/scheduler/canSchedule/?ts=" + System.currentTimeMillis(); //$NON-NLS-1$ RequestBuilder builder = new RequestBuilder( RequestBuilder.GET, url ); @@ -563,4 +570,21 @@ public boolean isLoaded() { public void setLoaded( boolean loaded ) { this.loaded = loaded; } + + public MenuItem getBurgerBarPerspectiveMenuItem() { + BurgerMenuBar perspectivesMenuBar = new BurgerMenuBar(); + + MenuCloner menuCloner = new MenuCloner<>( m -> new BurgerMenuBar() ); + getMenuItems().forEach( m -> perspectivesMenuBar.addItem( menuCloner.clone( m ) ) ); + + MenuItem burgerBarPerspectiveMenuItem = new MenuItem( getActivePerspective().getTitle(), (Scheduler.ScheduledCommand) null ); + burgerBarPerspectiveMenuItem.setSubMenu( perspectivesMenuBar ); + return burgerBarPerspectiveMenuItem; + } + + public void hidePopup() { + if ( perspectiveDropDown != null ) { + perspectiveDropDown.hidePopup(); + } + } } diff --git a/user-console/src/main/java/org/pentaho/mantle/client/ui/UserDropDown.java b/user-console/src/main/java/org/pentaho/mantle/client/ui/UserDropDown.java index 27327387879..a2e7f2e4731 100644 --- a/user-console/src/main/java/org/pentaho/mantle/client/ui/UserDropDown.java +++ b/user-console/src/main/java/org/pentaho/mantle/client/ui/UserDropDown.java @@ -85,11 +85,8 @@ private static native void setupNativeHooks( CustomDropDown userDropDown ) } }-*/; - private static native String getUsername() + public static native String getUsername() /*-{ return window.parent.SESSION_NAME; }-*/; - - - } diff --git a/user-console/src/main/java/org/pentaho/mantle/client/ui/xul/MantleController.java b/user-console/src/main/java/org/pentaho/mantle/client/ui/xul/MantleController.java index 1ac066a7f94..d6da1f6e8e3 100644 --- a/user-console/src/main/java/org/pentaho/mantle/client/ui/xul/MantleController.java +++ b/user-console/src/main/java/org/pentaho/mantle/client/ui/xul/MantleController.java @@ -14,7 +14,7 @@ * See the GNU Lesser General Public License for more details. * * - * Copyright (c) 2002-2020 Hitachi Vantara. All rights reserved. + * Copyright (c) 2002-2023 Hitachi Vantara. All rights reserved. * */ @@ -25,6 +25,9 @@ import com.google.gwt.core.client.JsArray; import com.google.gwt.core.client.JsonUtils; import com.google.gwt.core.client.RunAsyncCallback; +import com.google.gwt.core.client.Scheduler; +import com.google.gwt.dom.client.Document; +import com.google.gwt.dom.client.Element; import com.google.gwt.http.client.Request; import com.google.gwt.http.client.RequestBuilder; import com.google.gwt.http.client.RequestCallback; @@ -33,18 +36,23 @@ import com.google.gwt.json.client.JSONArray; import com.google.gwt.json.client.JSONParser; import com.google.gwt.user.client.Command; -import com.google.gwt.user.client.Element; import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; +import com.google.gwt.user.client.ui.Focusable; import com.google.gwt.user.client.ui.MenuBar; import com.google.gwt.user.client.ui.MenuItem; import com.google.gwt.user.client.ui.Widget; import org.pentaho.gwt.widgets.client.dialogs.MessageDialogBox; import org.pentaho.gwt.widgets.client.menuitem.CheckBoxMenuItem; +import org.pentaho.gwt.widgets.client.menuitem.MenuCloner; import org.pentaho.gwt.widgets.client.menuitem.PentahoMenuItem; +import org.pentaho.gwt.widgets.client.toolbar.ToolbarButton; +import org.pentaho.gwt.widgets.client.utils.ElementUtils; +import org.pentaho.gwt.widgets.client.utils.MenuBarUtils; import org.pentaho.gwt.widgets.client.utils.i18n.ResourceBundle; import org.pentaho.gwt.widgets.client.utils.string.StringTokenizer; +import org.pentaho.mantle.client.MantleApplication; import org.pentaho.mantle.client.admin.ContentCleanerPanel; import org.pentaho.mantle.client.admin.EmailAdminPanelController; import org.pentaho.mantle.client.admin.ISysAdminPanel; @@ -71,7 +79,10 @@ import org.pentaho.mantle.client.solutionbrowser.filepicklist.IFilePickListListener; import org.pentaho.mantle.client.solutionbrowser.filepicklist.RecentPickItem; import org.pentaho.mantle.client.solutionbrowser.filepicklist.RecentPickList; +import org.pentaho.mantle.client.ui.BurgerMenuBar; +import org.pentaho.mantle.client.ui.BurgerMenuPopup; import org.pentaho.mantle.client.ui.PerspectiveManager; +import org.pentaho.mantle.client.ui.UserDropDown; import org.pentaho.mantle.client.usersettings.IMantleUserSettingsConstants; import org.pentaho.mantle.client.usersettings.JsSetting; import org.pentaho.mantle.client.usersettings.UserSettingsManager; @@ -100,8 +111,14 @@ public class MantleController extends AbstractXulEventHandler { private static final String HTTP_REQUEST_ACCEPT_HEADER = "accept"; private static final String JSON_REQUEST_HEADER = "application/json"; + private static final String BURGER_MODE_MEDIA_QUERY = "(max-height: 500px), (max-width: 650px)"; + private MantleModel model; + private XulMenubar mainMenubar; + + private XulToolbarbutton burgerBtn; + private XulToolbarbutton openBtn; private XulToolbarbutton newBtn; @@ -140,6 +157,8 @@ public class MantleController extends AbstractXulEventHandler { private String overrideContentUrl; + private BurgerMenuPopup burgerMenuPopup; + HashMap sysAdminPanelsMap = new HashMap(); RecentPickList recentPickList = RecentPickList.getInstance(); @@ -172,7 +191,9 @@ public MantleController( MantleModel model ) { */ @Bindable public void init() { + mainMenubar = (XulMenubar) document.getElementById( "mainMenubar" ); + burgerBtn = (XulToolbarbutton) document.getElementById( "burgerButton" ); openBtn = (XulToolbarbutton) document.getElementById( "openButton" ); //$NON-NLS-1$ newBtn = (XulToolbarbutton) document.getElementById( "newButton" ); //$NON-NLS-1$ saveBtn = (XulToolbarbutton) document.getElementById( "saveButton" ); //$NON-NLS-1$ @@ -198,6 +219,8 @@ public void init() { recentMenu = (XulMenubar) document.getElementById( "recentmenu" ); //$NON-NLS-1$ favoriteMenu = (XulMenubar) document.getElementById( "favoritesmenu" ); //$NON-NLS-1$ + initializeBurgerMenu(); + if ( PerspectiveManager.getInstance().isLoaded() ) { PerspectiveManager.getInstance().enablePerspective( PerspectiveManager.OPENED_PERSPECTIVE, false ); } else { @@ -704,12 +727,143 @@ public void setEditContentSelected( boolean selected ) { public void openClicked() { model.executeOpenFileCommand(); } - @Bindable public void newClicked() { model.launchNewDropdownCommand( newBtn ); } + // region Burger Menu + private Widget getBurgerButtonWidget() { + return ( (ToolbarButton) burgerBtn.getManagedObject() ).getPushButton(); + } + + public MenuBar getMainMenubarWidget() { + return (MenuBar) mainMenubar.getManagedObject(); + } + + private Element getPUCWrapperElement() { + return Document.get().getElementById( "pucWrapper" ); + } + + private void initializeBurgerMenu() { + // Listen to Media Query that controls Burger Mode and set the mantle model's initial value. + boolean matchesMediaQuery = setupNativeBurgerModeMediaQueryListener( this, BURGER_MODE_MEDIA_QUERY ); + model.setBurgerMode( matchesMediaQuery ); + + // Update DOM to match initial model values. + onBurgerModeChanged(); + + // Start listening for model changes. + model.addPropertyChangeListener( "burgerMode", evt -> onBurgerModeChanged() ); + + getBurgerButtonWidget().getElement().setAttribute( "aria-haspopup", "menu" ); + } + + private native boolean setupNativeBurgerModeMediaQueryListener( MantleController controller, String mediaQuery ) /*-{ + var x = $wnd.matchMedia(mediaQuery); + + x.addEventListener("change", function(x) { + controller.@org.pentaho.mantle.client.ui.xul.MantleController::onBurgerModeMediaQueryChange(Z)(x.matches); + }); + + return x.matches; + }-*/; + + private void onBurgerModeMediaQueryChange( boolean matches ) { + model.setBurgerMode( matches ); + } + + private void onBurgerModeChanged() { + boolean isBurgerMode = model.isBurgerMode(); + + MenuBar mainMenubarWidget = getMainMenubarWidget(); + + boolean hadFocus; + + // Close menu popups, if open. + // Detect if focus should be set to the other "menu" after the (CSS) mode transition. + if ( isBurgerMode ) { + // Entering burger mode. + hadFocus = MenuBarUtils.getPopup( mainMenubarWidget ) != null + || ElementUtils.isActiveElement( mainMenubarWidget.getElement() ); + + // Close any open menus. + mainMenubarWidget.closeAllChildren( false ); + PerspectiveManager.getInstance().hidePopup(); + + // May be null during initialization. + UserDropDown userDropDown = MantleApplication.getUserDropDown(); + if ( userDropDown != null ) { + userDropDown.hidePopup(); + } + } else { + // Exiting burger mode. + hadFocus = closeBurgerMenuPopup(); + } + + Element pucWrapperElem = getPUCWrapperElement(); + if ( pucWrapperElem != null ) { + if ( isBurgerMode ) { + pucWrapperElem.addClassName( "burger-mode" ); + } else { + pucWrapperElem.removeClassName( "burger-mode" ); + } + } + + if ( hadFocus ) { + if ( isBurgerMode ) { + ( (Focusable) getBurgerButtonWidget() ).setFocus( true ); + } else { + mainMenubarWidget.focus(); + } + } + } + + private boolean closeBurgerMenuPopup() { + if ( burgerMenuPopup != null ) { + burgerMenuPopup.hide(); + burgerMenuPopup = null; + return true; + } + + return false; + } + + private void toggleBurgerMenuExpanded() { + Widget burgerButton = getBurgerButtonWidget(); + if ( !burgerButton.getElement().hasAttribute( "aria-expanded" ) ) { + closeBurgerMenuPopup(); + + burgerMenuPopup = new BurgerMenuPopup( burgerButton, createBurgerMenuBar( getMainMenubarWidget() ) ); + burgerMenuPopup.showMenu(); + } + } + + private BurgerMenuBar createBurgerMenuBar( MenuBar mainMenuBar ) { + MenuCloner menuCloner = new MenuCloner<>( m -> new BurgerMenuBar() ); + BurgerMenuBar burgerMenuBar = menuCloner.clone( mainMenuBar ); + + // add perspectives menu + burgerMenuBar.addItem( PerspectiveManager.getInstance().getBurgerBarPerspectiveMenuItem() ); + + // add admin/UserDropDown menu + MenuItem burgerUserDropDown = new MenuItem( UserDropDown.getUsername(), (Scheduler.ScheduledCommand) null ); + burgerUserDropDown.setSubMenu( menuCloner.clone( MantleApplication.getUserDropDown().getMenuBar() ) ); + burgerMenuBar.addItem( burgerUserDropDown ); + + // Lastly, add back menu items. + burgerMenuBar.addBackItemToDescendantMenus(); + + return burgerMenuBar; + } + + @Bindable + public void burgerMenuButtonClicked() { + toggleBurgerMenuExpanded(); + } + + // endregion + @Bindable public void saveClicked() { model.executeSaveCommand(); diff --git a/user-console/src/main/java/org/pentaho/mantle/client/ui/xul/MantleModel.java b/user-console/src/main/java/org/pentaho/mantle/client/ui/xul/MantleModel.java index c53bd05d4cc..e5360451c37 100644 --- a/user-console/src/main/java/org/pentaho/mantle/client/ui/xul/MantleModel.java +++ b/user-console/src/main/java/org/pentaho/mantle/client/ui/xul/MantleModel.java @@ -71,6 +71,8 @@ public class MantleModel extends XulEventSourceAdapter implements SolutionBrowse private MantleXul main; + private boolean isBurgerMode; + private boolean saveEnabled; private boolean saveAsEnabled; @@ -102,6 +104,18 @@ public MantleModel( MantleXul main ) { this.main = main; } + @Bindable + public boolean isBurgerMode() { + return isBurgerMode; + } + + @Bindable + public void setBurgerMode( boolean isBurgerMode ) { + boolean prevVal = this.isBurgerMode; + this.isBurgerMode = isBurgerMode; + this.firePropertyChange( "burgerMode", prevVal, isBurgerMode ); + } + @Bindable public boolean isPropertiesEnabled() { return this.propertiesEnabled; diff --git a/user-console/src/main/java/org/pentaho/mantle/client/ui/xul/MantleXul.java b/user-console/src/main/java/org/pentaho/mantle/client/ui/xul/MantleXul.java index 5bd5f0abc80..6dcbe91975d 100644 --- a/user-console/src/main/java/org/pentaho/mantle/client/ui/xul/MantleXul.java +++ b/user-console/src/main/java/org/pentaho/mantle/client/ui/xul/MantleXul.java @@ -1,5 +1,4 @@ /*! - * * This program is free software; you can redistribute it and/or modify it under the * terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software * Foundation. @@ -13,9 +12,7 @@ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU Lesser General Public License for more details. * - * - * Copyright (c) 2002-2018 Hitachi Vantara. All rights reserved. - * + * Copyright (c) 2002-2023 Hitachi Vantara. All rights reserved. */ package org.pentaho.mantle.client.ui.xul; @@ -39,6 +36,7 @@ import com.google.gwt.user.client.ui.Widget; import com.google.gwt.xml.client.Document; import com.google.gwt.xml.client.XMLParser; +import org.pentaho.gwt.widgets.client.toolbar.Toolbar; import org.pentaho.gwt.widgets.client.utils.i18n.IResourceBundleLoadCallback; import org.pentaho.gwt.widgets.client.utils.i18n.ResourceBundle; import org.pentaho.mantle.client.commands.AbstractCommand; @@ -84,6 +82,9 @@ public class MantleXul implements IXulLoaderCallback, SolutionBrowserOpenEventHa private SimplePanel toolbar = new SimplePanel(); private SimplePanel menubar = new SimplePanel(); + + private SimplePanel burgerToolbarWrapper = new SimplePanel(); + private SimplePanel adminPerspective = new SimplePanel(); private DeckPanel adminContentDeck = new DeckPanel(); @@ -148,6 +149,11 @@ public void xulLoaded( GwtXulRunner runner ) { toolbar.setStylePrimaryName( "mainToolbar-Wrapper" ); toolbar.setWidget( bar ); + Toolbar burgerToolbar = (Toolbar) container.getDocumentRoot().getElementById( "burgerToolbar" ).getManagedObject(); + burgerToolbar.getElement().removeClassName( "toolbar" ); + burgerToolbarWrapper.setStylePrimaryName( "burgerToolbar-Wrapper" ); + burgerToolbarWrapper.setWidget( burgerToolbar ); + // Get the menubar from the XUL doc Widget menu = (Widget) container.getDocumentRoot().getElementById( "mainMenubar" ).getManagedObject(); //$NON-NLS-1$ menubar.setWidget( menu ); @@ -202,7 +208,6 @@ public void onResponseReceived( Request request, Response response ) { // showError(e); } - // get the admin perspective from the XUL doc Widget admin = (Widget) container.getDocumentRoot().getElementById( "adminPerspective" ).getManagedObject(); //$NON-NLS-1$ admin.setStyleName( "admin-perspective" ); @@ -314,6 +319,10 @@ public Widget getToolbar() { return toolbar; } + public Widget getBurgerToolbarWrapper() { + return burgerToolbarWrapper; + } + public Widget getMenubar() { return menubar; } diff --git a/user-console/src/main/resources/org/pentaho/mantle/public/Mantle.jsp b/user-console/src/main/resources/org/pentaho/mantle/public/Mantle.jsp index 3c17035ea82..121a0cdef10 100644 --- a/user-console/src/main/resources/org/pentaho/mantle/public/Mantle.jsp +++ b/user-console/src/main/resources/org/pentaho/mantle/public/Mantle.jsp @@ -206,6 +206,7 @@
+
diff --git a/user-console/src/main/resources/org/pentaho/mantle/public/themes/ruby/images/burgerButton.png b/user-console/src/main/resources/org/pentaho/mantle/public/themes/ruby/images/burgerButton.png new file mode 100644 index 0000000000000000000000000000000000000000..5000c16b3bab25bcb2a6b409a9ffbbe5400a390b GIT binary patch literal 1533 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzmUKs7M+SzC{oH>NSs54@H)J|H z2Y5O=D+Cnfr)B1(GB9XNtes@*5gjOUyuPz*q05rcg9jh-hKcKj$y#N#bS)4FV%;wg zAGfdNNo8ec#{-QLQ7w<%TV73A=v}x$R#c`$fQvQPF*bIN2&-V_yxGfDw7wmB_~*y| z&-Qbw-!cE!4_;YPDV_3Wj_^xf$-~Nv-JWtjHTlrBeUHi7HLv*Ee@`r)FF)^eZH?9c z%&U8A+;_jeAAI)x_D{~j;ic9mmw)B=3)Pvo^*}mDdE}{+oc>(x>BU~3`5#8Pw+Y?5 zHs{Na_0LuuU*0`3`4T<1o#jjRx-jqkV(1{ztYPdkQO$jIO7s*R!Jl$f$L>dd_-@df#OH3~8T82P zg_x`7@*M^9OEy(FcNbXa3d#P;m3zNug>QXxxp=^~h%1XufB39?<-c}TZ~Ve4Mzd{G zU(R4%>2qkl$AQSWc_}Peb%(n*<}6x#ceb5GQ&;kJ+j`!q^B<&LEL|TS^F1x}O#6n+ z>gs*3kKSVBIp_ReuI3+;?6I`{z0%imoD97L!?Cj|Yq@9aW6H8K46v{J8G8EiBeFGS>9*V92 zN^ll4nJ=qZCRW5rVYG6n{wJDDL7B@w}FfdWk9dNvV1jxdkBe7;Gx6fXv*~ zl0=1y+?>2(s|s5sunH?68zii+qySb@l5MLL;TxdfoL`ixV5VoFXP{)qrJ$f-QfoKE!3u2uO$S|vb%!<^U2$#&<)VyM#)9j3mY{0f)NFdw^(HL5sTI8Ic z3)EL)hY@8^GmzDw>jzsLiOXUn2_%gme^>>j7U$=bg2FL0FSEoB=w58X=(-{i+U$%C z44|5jMbULcVAX*vimt=IC=(bOi6E!h8A5G97K5s{(FespQhIK!WJ;bL|XcnZoY Mp00i_>zopr02)^XfdBvi literal 0 HcmV?d00001 diff --git a/user-console/src/main/resources/org/pentaho/mantle/public/themes/ruby/images/dropdown_left_arrow_blue.png b/user-console/src/main/resources/org/pentaho/mantle/public/themes/ruby/images/dropdown_left_arrow_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..de2342834c9f7383f6e25f045a3cc4a18b26db7d GIT binary patch literal 704 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3HGrh2HJ~QjEnx?oJHr&dIz4aspB#JkxxA z8MJ_G4hAMhAqHlU5+Gz~&tzZ$vl$rFfHVUG^8!YM>;fjZtk42xIGYEgFnr0@6+lBG zGeaUuB7A+UlJj%*5>xV%QuQiw3qT4OY$~jP%-qzHM1_jnoV;SI3R@+x3M(KRB&@Hb z09I0xZL1XF8=&BvUzDm~re~mMpk&9TprBw=l#*r@P?Wt5Z@Sn2DRmzV36 z8|&p4rRy77T3YHG80i}s=>k>g7FXt#Bv$C=6)QswftllyTAW;zSx}OhpQivaH!&%{ zw8U0P31kr*K-^i9nTD__uNdkrpa=CqGWv#k2KsQbfm&@qqE`MznW;dVLFU^T+JIG} zh(YbK(Fa+Mnvllw$uVaR!*WLjS%@(=fNWxUd#+VH75HMTFeiD(u1d~pUXO@geCyMl-*qb literal 0 HcmV?d00001 diff --git a/user-console/src/main/resources/org/pentaho/mantle/public/themes/ruby/images/dropdown_left_arrow_white.png b/user-console/src/main/resources/org/pentaho/mantle/public/themes/ruby/images/dropdown_left_arrow_white.png new file mode 100644 index 0000000000000000000000000000000000000000..651fff811f664e9bc09945e8eb6d01eb0f531a20 GIT binary patch literal 1406 zcma)6&rj1(9DmzTVFCvN5fx)Cil|w;Zfs-CHus|grxurGk(sE_ZN)XxzNRf~+!zON z@#0lO;;wq&Ot`5;RbV_BeYbOM{D57=}Q^Z^S6 ztVlkOe%G1+It)Dkx6uqDd6?y~WC3bWEkGHI#W0tX@(>>039cUbVkdtH|ZP{2~PJwltfuK0D%&XM3L7xtR&7$DqRZVh6Rme zT}|ScVWK?@;u$uH#h}7tUcyN@@sJ(Euz-@Eqf^X84USepyr5|^O_If8ktn(es5~Gk zzu!+fU8Kw9Ko$;lNz%BILsEzLNe*}zUd<_jtO-!UbY3nC7qlRb>yGN97N;n)Y~7Wl z*78Cbk|jVl?%x5l0%^ir8|V6t z5qG^NDCGch!m>02a|A^n~+qElX85GRxoLOhtW1bn`jwc5f=IUgaSq57-ddTdA+1T{Gg_dIqGQ| zhe8W&0L47SMYba|6_5u2F-q&}lPru18t=I1#$&RespIlhB7tj6J$=TRS_;V$DHCc8f z%hoNtKa~9F>9@=eRq-p>#;cJv{Ajv=1rJa6?k<;}-~w&cob t_RY-b^ONj)fY^ table { - border: 0 none; - border-spacing: 0; -} - -#mainMenubar .gwt-MenuItem { - color: #414141; - font-size: 13px; - font-family: OpenSansLight; - line-height: 20px; - padding: 5px 15px; -} - -#mainMenubar .gwt-MenuItem-selected { - background: #cc0000; - border: 0 none; - color: #FFF; -} -/* endregion Main Menubar */ - /* region Perspectives Dropdown */ #pucPerspectives .custom-dropdown { width: auto; @@ -1087,11 +1080,14 @@ div#customDropdownPopupMajor .gwt-MenuBar-vertical .gwt-MenuItem:hover:not(.gwt- } .gwt-MenuBar-vertical .gwt-MenuItem { - color: #333; padding: 8px 12px 8px 25px; font-style: 13px; } +.gwt-MenuBar-vertical .gwt-MenuItem:where(:not(.gwt-MenuItem-disabled, .disabledMenuItem)) { + color: #333; +} + .gwt-MenuBar-vertical .gwt-MenuItem-checkbox-unchecked, .gwt-MenuBar-vertical .gwt-MenuItem-checkbox-checked { padding: 8px 12px 8px 24px; @@ -1176,19 +1172,51 @@ div#customDropdownPopupMajor .gwt-MenuBar-vertical .gwt-MenuItem:hover:not(.gwt- } /* endregion gwt-MenuBar-vertical */ -/* region Main Toolbar */ +/* region Main Menubar */ +#mainMenubar { + padding: 0; + background: #f8f8f6; +} + +#mainMenubar > table { + border: 0 none; + border-spacing: 0; +} + +#mainMenubar .gwt-MenuItem { + color: #414141; + font-size: 13px; + font-family: OpenSansLight; + line-height: 20px; + padding: 5px 15px; +} + +#mainMenubar .gwt-MenuItem-selected { + background: #cc0000; + border: 0 none; + color: #FFF; +} +/* endregion Main Menubar */ + +/* region Main and Burger Toolbars */ .mainToolbar-Wrapper, +.burgerToolbar-Wrapper, #mainToolbarWrapper, #mainToolbarWrapper > tbody, #mainToolbarWrapper > tbody > tr, #mainToolbarWrapper > tbody > tr > td, #mainToolbarWrapper > tbody > tr > td > div, #mainToolbar, -#mainToolbar > tbody > tr > td > table { +#burgerToolbar, +:is(#mainToolbar, #burgerToolbar) > tbody > tr > td > table { display: contents; } -#mainToolbar .spacer { +:where(#pucWrapper:not(.burger-mode)) #burgerToolbar { + display: none; +} + +:is(#mainToolbar, #burgerToolbar) .spacer { /* This flex scheme allows the space to shrink before wrapping kicks in. */ flex: 1 1 0; min-width: 0; @@ -1198,14 +1226,32 @@ div#customDropdownPopupMajor .gwt-MenuBar-vertical .gwt-MenuItem:hover:not(.gwt- max-width: var(--flex-max-width, 10px); } -#mainToolbar :is( +:is(#mainToolbar, #burgerToolbar) :is(.toolbar-button, .toolbar-toggle-button) { + border-width: var(--puc-toolbar-button-border-width); +} + +:is(#mainToolbar, #burgerToolbar) .toolbar-button-focus-panel td { + /* Needed to prevent the td from taking up a bigger height than that of the contained img, 32px, + for unknown reasons. */ + line-height: 0; +} + +:is(#mainToolbar, #burgerToolbar) :is( .toolbar-button, .toolbar-button-disabled, .toolbar-toggle-button, .toolbar-toggle-button-disabled) img { - height: calc(1em * 32/14); - width: calc(1em * 32/14); + height: var(--puc-toolbar-button-inner-height); + width: var(--puc-toolbar-button-inner-width); background-size: contain; } +#burgerToolbar #burgerButton { + margin-right: auto; +} + +#burgerToolbar #burgerButton .toolbar-button img { + background-image: url('images/burgerButton.png'); +} + #mainToolbar #openButton .toolbar-button img { background-image: url('images/open_32.png'); } @@ -1281,6 +1327,7 @@ div#customDropdownPopupMajor .gwt-MenuBar-vertical .gwt-MenuItem:hover:not(.gwt- padding: 8px 10px 10px 10px; font-weight: normal; } +/* endregion Main and Burger Toolbars */ /*****************************************/ /*** Overrides for the schedules table ***/ @@ -1532,3 +1579,185 @@ hr { font-weight: normal; font-size: 14px; } + +/* region Burger Menu Mode */ +#burgerBarPerspectiveMenu { + display: none; +} + +/* puc header */ +:where(.burger-mode) #pucContent { + /* top: var(--puc-header-burger-mode-height); */ +} + +:where(.burger-mode) :is(#pucMenuBar, #pucPerspectives, #pucUserDropDown) { + display: none; +} + +:where(.burger-mode) #burgerBarPerspectiveMenu { + display: block; +} + +:where(.burger-mode) #pucHeader { + z-index: 10; + /*height: 34px;*/ +} + +/* burger button and menu */ +.pen-BurgerMenuBar { + border: 0; + /* Let the popup panel bg color shine-through, also covering content behind which would otherwise show through + the menubar popupContent margins, if bg color was not set there. + */ + background-color: unset; + display: flex; + flex-direction: column; +} + +.pen-BurgerMenuBar > table, +.pen-BurgerMenuBar > table > tbody { + display: contents; +} + +.pen-BurgerMenuBar tr { + flex: none; + display: flex; + flex-direction: row; +} + +.pen-BurgerMenuBar tr td:last-child { + flex: none; +} + +/* Order of rule relative to last-child rule, above, is important, + for when there is a single child (colspan 2), for separators. + */ +.pen-BurgerMenuBar tr td:first-child { + flex: auto; +} + +.pen-BurgerMenuBar tr td:first-child:not(.gwt-MenuItemSeparator) { + margin-left: 18px; +} + +.pen-BurgerMenuBar tr td:last-child:not(.gwt-MenuItemSeparator) { + margin-right: 12px; +} + +.pen-BurgerMenuBar :is( + .gwt-MenuItem, + .gwt-MenuItem-selected, + .gwt-MenuItem-checkbox-unchecked, + .gwt-MenuItem-checkbox-checked, + .disabledMenuItem) { + font-size: 14px; + font-family: OpenSansLight; + line-height: 32px; + padding: 8px 16px 8px calc(1em * 32/14); + + /* Last resort: show ellipsis if it would break word in the middle. */ + overflow: hidden; + text-overflow: ellipsis; +} + +.pen-BurgerMenuBar tr:first-child { + margin-top: 26px; +} + +.pen-BurgerMenuBar tr:last-child { + margin-bottom: 20px; +} + +.pen-BurgerMenuBar .subMenuIcon { + box-sizing: content-box; + width: calc(1em * 32/14); + height: calc(1em * 32/14); + padding: 8px 16px 8px 0; + background-origin: content-box; + background-repeat: no-repeat; + background-size: calc(1em * 18/14) calc(1em * 12/14); +} + +.pen-BurgerMenuBar .gwt-MenuItem-checkbox-checked, +.pen-BurgerMenuBar .gwt-MenuItem-checkbox-checked-selected, +.pen-BurgerMenuBar .gwt-MenuItem-checkbox-checked-selected:hover { + background-position: center left calc(1em * 8/14); + background-size: calc(1em * 9/14) calc(1em * 7/14); +} + +.pen-BurgerMenuBar .gwt-MenuItemSeparator { + /* Make sure separator is vertically centered between menu items. */ + box-sizing: border-box; + border-color: transparent; +} + +.pen-BurgerMenuBar .gwt-MenuItemSeparator .menuSeparatorInner { + border-color: #ededed; +} + +.pen-BurgerMenuBar .pen-BurgerBackMenuItem { + background-image: url(images/dropdown_left_arrow_blue.png); + background-position: center left calc(1em * 7/14); + background-repeat: no-repeat; + background-size: calc(1em * 18/14) calc(1em * 12/14); +} + +.pen-BurgerMenuBar .pen-BurgerBackMenuItem.gwt-MenuItem-selected { + background-image: url(images/dropdown_left_arrow_white.png); +} + +.pen-BurgerMenuBarPopup { + left: 0 !important; + top: var(--puc-header-burger-mode-height) !important; + right: 0; + bottom: 0; + overflow-x: hidden !important; + overflow-y: auto !important; + background-color: #FBFCFC; + display: flex; + flex-direction: column; +} + +.pen-BurgerMenuBarPopup + .pen-BurgerMenuBarPopup { + margin-top: unset; +} + + +.pen-BurgerMenuBarPopup :is( + .menuPopupTop, + .popupTop, + .menuPopupMiddleLeft, + .popupMiddleLeft, + .menuPopupMiddleRight, + .popupMiddleRight, + .menuPopupBottom, + .popupBottom) { + display: none; +} + +.pen-BurgerMenuBarPopup > div, +.pen-BurgerMenuBarPopup > div > table, +.pen-BurgerMenuBarPopup > div > table > tbody, +.pen-BurgerMenuBarPopup :is( + .menuPopupMiddle, + .popupMiddle, + .menuPopupContent, + .popupContent, + .menuPopupMiddleCenter, + .popupMiddleCenter + ) { + display: contents; +} + +/* buttons */ +:where(.burger-mode) div.newToolbarDropdown { + top: var(--puc-header-burger-mode-height) !important; + left: calc(100vw - 210px) !important; +} + +:where(.burger-mode) +.toolbar-button-focus-panel:where(#openButton, #newButton, #dummyPluginContentButton, #printButton) { + display: none; +} + +/* endregion Burger Menu Mode */ diff --git a/user-console/src/main/resources/org/pentaho/mantle/public/xul/mantle.xul b/user-console/src/main/resources/org/pentaho/mantle/public/xul/mantle.xul index a28182f1b4f..2d9ed26c3e7 100644 --- a/user-console/src/main/resources/org/pentaho/mantle/public/xul/mantle.xul +++ b/user-console/src/main/resources/org/pentaho/mantle/public/xul/mantle.xul @@ -65,6 +65,11 @@ + + + + From b128740b89a895ca5a0874efd8c3373aab1b171c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Duarte=20Cunha=20Lea=CC=83o?= Date: Fri, 12 May 2023 17:01:42 +0100 Subject: [PATCH 06/31] [BACKLOG-37059] Fixed bug occurring when clicking a menu item --- .../main/java/org/pentaho/mantle/client/ui/BurgerMenuBar.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/user-console/src/main/java/org/pentaho/mantle/client/ui/BurgerMenuBar.java b/user-console/src/main/java/org/pentaho/mantle/client/ui/BurgerMenuBar.java index cc264b54413..b5ce5f2bf09 100644 --- a/user-console/src/main/java/org/pentaho/mantle/client/ui/BurgerMenuBar.java +++ b/user-console/src/main/java/org/pentaho/mantle/client/ui/BurgerMenuBar.java @@ -306,7 +306,7 @@ protected void doItemActionLocal( MenuItem item, boolean fireCommand, boolean fo Scheduler.ScheduledCommand cmd = item.getScheduledCommand(); Scheduler.get().scheduleFinally( cmd::execute ); } else { - MenuBarUtils.doItemAction( item, fireCommand, focus ); + MenuBarUtils.doItemAction( this, item, fireCommand, focus ); } if ( item.getScheduledCommand() == null && item.getSubMenu() != null ) { From 972e62c6d7ae0fcd142f5ec26b3f1bf41d42a8a4 Mon Sep 17 00:00:00 2001 From: hv-vamsi Date: Wed, 17 May 2023 19:17:40 +0530 Subject: [PATCH 07/31] [BACKLOG-37694] Fixing focus ring giving bounce effect on schedules grid --- .../org/pentaho/mantle/public/themes/ruby/mantleRuby.css | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/user-console/src/main/resources/org/pentaho/mantle/public/themes/ruby/mantleRuby.css b/user-console/src/main/resources/org/pentaho/mantle/public/themes/ruby/mantleRuby.css index c11495de6c4..5655b35703e 100644 --- a/user-console/src/main/resources/org/pentaho/mantle/public/themes/ruby/mantleRuby.css +++ b/user-console/src/main/resources/org/pentaho/mantle/public/themes/ruby/mantleRuby.css @@ -1461,7 +1461,8 @@ div#customDropdownPopupMajor .gwt-MenuBar-vertical .gwt-MenuItem:hover:not(.gwt- * The keyboard selected cell is visible over selection. */ .pentaho-table .cellTableKeyboardSelectedCell { - border: var(--focus-ring); + outline: var(--focus-ring); + --focus-ring-offset: -2px; } .pentaho-table .cellTableLoading { From 6136712b0762f22f48d8bd902ba88b2946be0338 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Duarte=20Cunha=20Lea=CC=83o?= Date: Mon, 22 May 2023 16:54:27 +0100 Subject: [PATCH 08/31] [BACKLOG-37059] Fixed current theme not being checked on the burger menu and burger menu visible in other themes --- .../org/pentaho/mantle/client/ui/xul/MantleController.java | 1 + .../main/resources/org/pentaho/mantle/public/MantleStyle.css | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/user-console/src/main/java/org/pentaho/mantle/client/ui/xul/MantleController.java b/user-console/src/main/java/org/pentaho/mantle/client/ui/xul/MantleController.java index d6da1f6e8e3..2e134cc6433 100644 --- a/user-console/src/main/java/org/pentaho/mantle/client/ui/xul/MantleController.java +++ b/user-console/src/main/java/org/pentaho/mantle/client/ui/xul/MantleController.java @@ -317,6 +317,7 @@ public void onResponseReceived( Request request, Response response ) { PentahoMenuItem themeMenuItem = new PentahoMenuItem( theme.getName(), new SwitchThemeCommand( theme.getId() ) ); themeMenuItem.getElement().setId( theme.getId() + "_menu_item" ); //$NON-NLS-1$ + themeMenuItem.setUseCheckUI( true ); themeMenuItem.setChecked( theme.getId().equals( activeTheme ) ); ( (MenuBar) themesMenu.getManagedObject() ).addItem( themeMenuItem ); } diff --git a/user-console/src/main/resources/org/pentaho/mantle/public/MantleStyle.css b/user-console/src/main/resources/org/pentaho/mantle/public/MantleStyle.css index 31795efcbbc..1816028130d 100644 --- a/user-console/src/main/resources/org/pentaho/mantle/public/MantleStyle.css +++ b/user-console/src/main/resources/org/pentaho/mantle/public/MantleStyle.css @@ -377,6 +377,10 @@ code { bottom: 0; } +#burgerToolbar { + display: none; +} + .pucContentDeck { height: 100%; width: 100%; From a98e2d2988756dc1de46e566d85f2c7368e09928 Mon Sep 17 00:00:00 2001 From: varuntangirala Date: Fri, 21 Jul 2023 07:53:51 -0400 Subject: [PATCH 09/31] [BACKLOG-37741] Page Zoom (AA) - Data Source Wizard Dialog-CSV file type & Sql File type Subsequent Dialogs --- .../resources/org/pentaho/mantle/public/MantleStyle.css | 6 ------ 1 file changed, 6 deletions(-) diff --git a/user-console/src/main/resources/org/pentaho/mantle/public/MantleStyle.css b/user-console/src/main/resources/org/pentaho/mantle/public/MantleStyle.css index 1816028130d..9190b5a6e41 100644 --- a/user-console/src/main/resources/org/pentaho/mantle/public/MantleStyle.css +++ b/user-console/src/main/resources/org/pentaho/mantle/public/MantleStyle.css @@ -644,12 +644,6 @@ code { /* end fix BISERVER-6181 */ -/* BISERVER-6442 */ -#previewResultsTable { - overflow: hidden; - width: 525px; -} - .adminContentPanel > tbody > tr > td > div { height: 100%; } From 413feec83bc86adea6a586dc819001b1768b0d9c Mon Sep 17 00:00:00 2001 From: singletonc Date: Thu, 21 Sep 2023 10:50:15 -0400 Subject: [PATCH 10/31] [BACKLOG-38043] Implement TabMenu To Replace PentahoTabs When In BurgerMode --- .../mantle/client/MantleApplication.java | 2 + .../mantle/client/commands/SaveCommand.java | 5 +- .../mantle/client/ui/tabs/MantleTab.java | 73 +++++++++----- .../client/ui/tabs/MantleTabMenuItem.java | 20 ++++ .../mantle/client/ui/tabs/MantleTabPanel.java | 98 +++++++++++++++++++ .../client/ui/tabs/TabContextMenuBar.java | 62 ++++++++++++ .../mantle/client/ui/xul/MantleXul.java | 13 +++ .../org/pentaho/mantle/public/Mantle.jsp | 1 + .../mantle/public/themes/ruby/mantleRuby.css | 57 +++++++++-- .../org/pentaho/mantle/public/xul/mantle.xul | 4 + 10 files changed, 306 insertions(+), 29 deletions(-) create mode 100644 user-console/src/main/java/org/pentaho/mantle/client/ui/tabs/MantleTabMenuItem.java create mode 100644 user-console/src/main/java/org/pentaho/mantle/client/ui/tabs/TabContextMenuBar.java diff --git a/user-console/src/main/java/org/pentaho/mantle/client/MantleApplication.java b/user-console/src/main/java/org/pentaho/mantle/client/MantleApplication.java index debb92e3975..44f193c1279 100644 --- a/user-console/src/main/java/org/pentaho/mantle/client/MantleApplication.java +++ b/user-console/src/main/java/org/pentaho/mantle/client/MantleApplication.java @@ -344,6 +344,7 @@ public void onMantleSettingsLoaded( MantleSettingsLoadedEvent event ) { RootPanel.get( "pucMenuBar" ).add( MantleXul.getInstance().getMenubar() ); RootPanel.get( "pucBurgerToolbar" ).add( MantleXul.getInstance().getBurgerToolbarWrapper() ); + RootPanel.get( "pucTabsMenuBar" ).add( MantleXul.getInstance().getTabsMenuBarWrapper() ); RootPanel.get( "pucPerspectives" ).add( PerspectiveManager.getInstance() ); RootPanel.get( "pucToolBar" ).add( MantleXul.getInstance().getToolbar() ); RootPanel.get( "pucUserDropDown" ).add( getUserDropDown() ); @@ -360,6 +361,7 @@ public void onMantleSettingsLoaded( MantleSettingsLoadedEvent event ) { contentDeck.add( new Label() ); contentDeck.showWidget( 0 ); contentDeck.add( SolutionBrowserPanel.getInstance() ); + if ( showOnlyPerspective && !StringUtils.isEmpty( startupPerspective ) ) { SolutionBrowserPanel.getInstance().setVisible( false ); } diff --git a/user-console/src/main/java/org/pentaho/mantle/client/commands/SaveCommand.java b/user-console/src/main/java/org/pentaho/mantle/client/commands/SaveCommand.java index d2ee277f740..eb15bcc93be 100644 --- a/user-console/src/main/java/org/pentaho/mantle/client/commands/SaveCommand.java +++ b/user-console/src/main/java/org/pentaho/mantle/client/commands/SaveCommand.java @@ -37,6 +37,7 @@ import com.google.gwt.core.client.JsArrayString; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.Label; +import org.pentaho.mantle.client.ui.tabs.MantleTabPanel; public class SaveCommand extends AbstractCommand { @@ -442,9 +443,11 @@ private native void doSaveAsNativeWrapper( String elementId, String filename, St // used via JSNI private void doTabRename() { if ( tabName != null ) { // Save-As does not modify the name of the tab. - PentahoTab tab = SolutionBrowserPanel.getInstance().getContentTabPanel().getSelectedTab(); + MantleTabPanel tabPanel = SolutionBrowserPanel.getInstance().getContentTabPanel(); + PentahoTab tab = tabPanel.getSelectedTab(); tab.setLabelText( tabName ); tab.setLabelTooltip( tabName ); + tabPanel.renameMenuTab( tab ); } } diff --git a/user-console/src/main/java/org/pentaho/mantle/client/ui/tabs/MantleTab.java b/user-console/src/main/java/org/pentaho/mantle/client/ui/tabs/MantleTab.java index df94c33dce6..c82f9eff802 100644 --- a/user-console/src/main/java/org/pentaho/mantle/client/ui/tabs/MantleTab.java +++ b/user-console/src/main/java/org/pentaho/mantle/client/ui/tabs/MantleTab.java @@ -47,11 +47,13 @@ import org.pentaho.gwt.widgets.client.dialogs.IDialogCallback; import org.pentaho.gwt.widgets.client.dialogs.PromptDialogBox; import org.pentaho.gwt.widgets.client.tabs.PentahoTab; +import org.pentaho.gwt.widgets.client.tabs.PentahoTabPanel; import org.pentaho.gwt.widgets.client.utils.FrameUtils; import org.pentaho.gwt.widgets.client.utils.string.StringUtils; import org.pentaho.mantle.client.messages.Messages; import org.pentaho.mantle.client.solutionbrowser.MantlePopupPanel; import org.pentaho.mantle.client.solutionbrowser.tabs.IFrameTabPanel; +import org.pentaho.mantle.client.ui.PerspectiveManager; public class MantleTab extends org.pentaho.gwt.widgets.client.tabs.PentahoTab { @@ -234,19 +236,23 @@ public void hidePopUpMenu() { popupMenu.hide(); } - public void onRightClick( Event event ) { - FrameUtils.setEmbedVisibility( ( (IFrameTabPanel) getTabPanel().getSelectedTab().getContent() ).getFrame(), false ); - int left; - int top; - if ( event.getTypeInt() == Event.ONKEYDOWN ) { - PentahoTab tab = getTabPanel().getTab( getTabPanel().getSelectedTabIndex() ); - left = tab.getAbsoluteLeft() + ( tab.getOffsetWidth() / 2 ); - top = tab.getAbsoluteTop() + tab.getOffsetHeight(); - } else { - left = Window.getScrollLeft() + DOM.eventGetClientX( event ); - top = Window.getScrollTop() + DOM.eventGetClientY( event ); + /** + * Select this tab. If the "Opened" perspective is not show, show it. + */ + protected void selectTabMenuItem() { + PerspectiveManager perspectiveManager = PerspectiveManager.getInstance(); + if ( !perspectiveManager.getActivePerspective().equals( PerspectiveManager.OPENED_PERSPECTIVE ) ) { + perspectiveManager.setPerspective( PerspectiveManager.OPENED_PERSPECTIVE ); } - popupMenu.setPopupPosition( adjustLeftIfNecessary( left ), top ); + fireTabSelected(); + ( (MantleTabPanel) this.getTabPanel() ).updateTabMenuText( this ); + } + + protected MenuBar getContextMenuBar(){ + return getContextMenuBar( false ); + } + + protected MenuBar getContextMenuBar( boolean addSelectItem ){ MenuBar menuBar = new MenuBar( true ) { public void onBrowserEvent( Event event ) { int type = event.getTypeInt(); @@ -263,20 +269,26 @@ public void onBrowserEvent( Event event ) { }; menuBar.setAutoOpen( true ); menuBar.setFocusOnHoverEnabled( true ); + + if ( addSelectItem ) { + MenuItem selectTabMenuItem = new MenuItem( Messages.getString( "select" ), () -> selectTabMenuItem() ); + menuBar.addItem( selectTabMenuItem ); + } + if ( getContent() instanceof IFrameTabPanel ) { MenuItem backMenuItem = - new MenuItem( Messages.getString( "back" ), new TabCommand( TABCOMMANDTYPE.BACK, popupMenu ) ); //$NON-NLS-1$ + new MenuItem( Messages.getString( "back" ), new TabCommand( TABCOMMANDTYPE.BACK, popupMenu ) ); //$NON-NLS-1$ menuBar.addItem( backMenuItem ); backMenuItem.getElement().setId( "back" ); //$NON-NLS-1$ menuBar.addSeparator(); MenuItem reloadTabMenuItem = - new MenuItem( Messages.getString( "reloadTab" ), new TabCommand( TABCOMMANDTYPE.RELOAD, popupMenu ) ); //$NON-NLS-1$ + new MenuItem( Messages.getString( "reloadTab" ), new TabCommand( TABCOMMANDTYPE.RELOAD, popupMenu ) ); //$NON-NLS-1$ menuBar.addItem( reloadTabMenuItem ); reloadTabMenuItem.getElement().setId( "reloadTab" ); //$NON-NLS-1$ } if ( getTabPanel().getTabCount() > 1 ) { MenuItem reloadAllTabsMenuItem = - new MenuItem( Messages.getString( "reloadAllTabs" ), new TabCommand( TABCOMMANDTYPE.RELOAD_ALL, popupMenu ) ); //$NON-NLS-1$ + new MenuItem( Messages.getString( "reloadAllTabs" ), new TabCommand( TABCOMMANDTYPE.RELOAD_ALL, popupMenu ) ); //$NON-NLS-1$ menuBar.addItem( reloadAllTabsMenuItem ); reloadAllTabsMenuItem.getElement().setId( "reloadAllTabs" ); //$NON-NLS-1$ } else { @@ -288,26 +300,26 @@ public void onBrowserEvent( Event event ) { menuBar.addSeparator(); if ( getContent() instanceof IFrameTabPanel ) { MenuItem openTabInNewWindowMenuItem = - new MenuItem( - Messages.getString( "openTabInNewWindow" ), new TabCommand( TABCOMMANDTYPE.NEW_WINDOW, popupMenu ) ); //$NON-NLS-1$ + new MenuItem( + Messages.getString( "openTabInNewWindow" ), new TabCommand( TABCOMMANDTYPE.NEW_WINDOW, popupMenu ) ); //$NON-NLS-1$ menuBar.addItem( openTabInNewWindowMenuItem ); openTabInNewWindowMenuItem.getElement().setId( "openTabInNewWindow" ); //$NON-NLS-1$ MenuItem createDeepLinkMenuItem = - new MenuItem( - Messages.getString( "createDeepLink" ), new TabCommand( TABCOMMANDTYPE.CREATE_DEEP_LINK, popupMenu ) ); //$NON-NLS-1$ + new MenuItem( + Messages.getString( "createDeepLink" ), new TabCommand( TABCOMMANDTYPE.CREATE_DEEP_LINK, popupMenu ) ); //$NON-NLS-1$ menuBar.addItem( createDeepLinkMenuItem ); createDeepLinkMenuItem.getElement().setId( "deepLink" ); //$NON-NLS-1$ menuBar.addSeparator(); } menuBar - .addItem( new MenuItem( Messages.getString( "closeTab" ), new TabCommand( TABCOMMANDTYPE.CLOSE, popupMenu ) ) ); //$NON-NLS-1$ + .addItem( new MenuItem( Messages.getString( "closeTab" ), new TabCommand( TABCOMMANDTYPE.CLOSE, popupMenu ) ) ); //$NON-NLS-1$ if ( getTabPanel().getTabCount() > 1 ) { MenuItem closeOtherTabsMenuItem = - new MenuItem( Messages.getString( "closeOtherTabs" ), new TabCommand( TABCOMMANDTYPE.CLOSE_OTHERS, popupMenu ) ); //$NON-NLS-1$ + new MenuItem( Messages.getString( "closeOtherTabs" ), new TabCommand( TABCOMMANDTYPE.CLOSE_OTHERS, popupMenu ) ); //$NON-NLS-1$ menuBar.addItem( closeOtherTabsMenuItem ); closeOtherTabsMenuItem.getElement().setId( "closeOtherTabs" ); //$NON-NLS-1$ MenuItem closeAllTabsMenuItem = - new MenuItem( Messages.getString( "closeAllTabs" ), new TabCommand( TABCOMMANDTYPE.CLOSE_ALL, popupMenu ) ); //$NON-NLS-1$ + new MenuItem( Messages.getString( "closeAllTabs" ), new TabCommand( TABCOMMANDTYPE.CLOSE_ALL, popupMenu ) ); //$NON-NLS-1$ menuBar.addItem( closeAllTabsMenuItem ); closeAllTabsMenuItem.getElement().setId( "closeAllTabs" ); //$NON-NLS-1$ } else { @@ -320,6 +332,23 @@ public void onBrowserEvent( Event event ) { closeOtherTabsMenuItem.getElement().setId( "closeOtherTabs" ); //$NON-NLS-1$ closeAllTabsMenuItem.getElement().setId( "closeAllTabs" ); //$NON-NLS-1$ } + return menuBar; + } + + public void onRightClick( Event event ) { + FrameUtils.setEmbedVisibility( ( (IFrameTabPanel) getTabPanel().getSelectedTab().getContent() ).getFrame(), false ); + int left; + int top; + if ( event.getTypeInt() == Event.ONKEYDOWN ) { + PentahoTab tab = getTabPanel().getTab( getTabPanel().getSelectedTabIndex() ); + left = tab.getAbsoluteLeft() + ( tab.getOffsetWidth() / 2 ); + top = tab.getAbsoluteTop() + tab.getOffsetHeight(); + } else { + left = Window.getScrollLeft() + DOM.eventGetClientX( event ); + top = Window.getScrollTop() + DOM.eventGetClientY( event ); + } + popupMenu.setPopupPosition( adjustLeftIfNecessary( left ), top ); + MenuBar menuBar = getContextMenuBar(); popupMenu.setWidget( menuBar ); if ( isIEBrowser() ) { diff --git a/user-console/src/main/java/org/pentaho/mantle/client/ui/tabs/MantleTabMenuItem.java b/user-console/src/main/java/org/pentaho/mantle/client/ui/tabs/MantleTabMenuItem.java new file mode 100644 index 00000000000..cdce938be23 --- /dev/null +++ b/user-console/src/main/java/org/pentaho/mantle/client/ui/tabs/MantleTabMenuItem.java @@ -0,0 +1,20 @@ +package org.pentaho.mantle.client.ui.tabs; + +import com.google.gwt.core.client.Scheduler; +import com.google.gwt.user.client.ui.MenuBar; + +public class MantleTabMenuItem extends com.google.gwt.user.client.ui.MenuItem { + private MantleTab mantleTab; + + public MantleTabMenuItem( MantleTab tab ) { + super( tab.getLabelText(), (Scheduler.ScheduledCommand) null ); + mantleTab = tab; + refreshContextMenu(); + } + + public void refreshContextMenu() { + MenuBar contextMenuBar = mantleTab.getContextMenuBar( true ); + contextMenuBar.addStyleName( "tabsMenuContextSubMenu" ); + setSubMenu( contextMenuBar ); + } +} diff --git a/user-console/src/main/java/org/pentaho/mantle/client/ui/tabs/MantleTabPanel.java b/user-console/src/main/java/org/pentaho/mantle/client/ui/tabs/MantleTabPanel.java index 408d36bec37..b691a0cb9d7 100644 --- a/user-console/src/main/java/org/pentaho/mantle/client/ui/tabs/MantleTabPanel.java +++ b/user-console/src/main/java/org/pentaho/mantle/client/ui/tabs/MantleTabPanel.java @@ -21,18 +21,25 @@ package org.pentaho.mantle.client.ui.tabs; import com.google.gwt.core.client.GWT; +import com.google.gwt.core.client.Scheduler; import com.google.gwt.dom.client.NodeList; +import com.google.gwt.user.client.DOM; import com.google.gwt.user.client.Element; +import com.google.gwt.user.client.Event; import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.Window.ClosingEvent; import com.google.gwt.user.client.Window.ClosingHandler; +import com.google.gwt.user.client.ui.DecoratedPopupPanel; +import com.google.gwt.user.client.ui.MenuBar; +import com.google.gwt.user.client.ui.MenuItem; import com.google.gwt.user.client.ui.PopupPanel; import com.google.gwt.user.client.ui.Widget; import org.pentaho.gwt.widgets.client.dialogs.IDialogCallback; import org.pentaho.gwt.widgets.client.dialogs.MessageDialogBox; import org.pentaho.gwt.widgets.client.tabs.PentahoTab; import org.pentaho.gwt.widgets.client.utils.FrameUtils; +import org.pentaho.gwt.widgets.client.utils.MenuBarUtils; import org.pentaho.gwt.widgets.client.utils.string.StringUtils; import org.pentaho.mantle.client.dialogs.WaitPopup; import org.pentaho.mantle.client.events.EventBusUtil; @@ -50,6 +57,7 @@ import java.util.ArrayList; import java.util.Collections; +import java.util.HashMap; import java.util.List; public class MantleTabPanel extends org.pentaho.gwt.widgets.client.tabs.PentahoTabPanel { @@ -58,12 +66,23 @@ public class MantleTabPanel extends org.pentaho.gwt.widgets.client.tabs.PentahoT private static final String FRAME_ID_PRE = "frame_"; //$NON-NLS-1$ private static int frameIdCount = 0; + private static MenuBar tabsMenuBar; + private static MenuItem tabsMenuItem; + private static TabContextMenuBar tabsSubMenuBar; + + private static final String CLASS_EMPTY_TABS_MENU = "empty-tabs-menu"; + private static final String CLASS_FLEX_ROW = "flex-row"; + + private HashMap menuItemHashMap; + public MantleTabPanel() { this( false ); } public MantleTabPanel( boolean setupNativeHooks ) { super(); + menuItemHashMap = new HashMap<>(); + if ( setupNativeHooks ) { setupNativeHooks( this ); } @@ -85,6 +104,16 @@ public void onWindowClosing( ClosingEvent event ) { } ); } + public void setTabsMenu( MenuBar menuBar, MenuItem menuItem ) { + tabsMenuBar = menuBar; + tabsMenuItem = menuItem; + tabsSubMenuBar = new TabContextMenuBar( true ); + tabsSubMenuBar.addStyleName( "tabsSubMenuBar" ); + tabsMenuItem.setSubMenu( tabsSubMenuBar ); + tabsMenuBar.addStyleName( CLASS_FLEX_ROW ); + tabsMenuBar.addStyleName( CLASS_EMPTY_TABS_MENU ); + } + public void addTab( String text, String tooltip, boolean closeable, Widget content ) { // make sure the perspective is enabled PerspectiveManager.getInstance().enablePerspective( PerspectiveManager.OPENED_PERSPECTIVE, true ); @@ -94,6 +123,69 @@ public void addTab( String text, String tooltip, boolean closeable, Widget conte if ( getSelectedTab() == null ) { selectTab( tab ); } + MantleTabMenuItem menuItem = createTabMenuItem( tab ); + linkTabToMenuItem( tab, menuItem ); + tabsSubMenuBar.addItem( menuItem ); + contextMenuRefreshThreshold( true ); + updateTabMenuText( tab ); + } + + public void linkTabToMenuItem( PentahoTab pentahoTab, MantleTabMenuItem mantleTabMenuItem ) { + menuItemHashMap.put( pentahoTab, mantleTabMenuItem ); + } + + public MantleTabMenuItem getLinkedTabMenuItem( PentahoTab pentahoTab ) { + return menuItemHashMap.get( pentahoTab ); + } + + public void deleteTabMenuItemLinkage( PentahoTab pentahoTab ) { + menuItemHashMap.remove( pentahoTab ); + } + + public void renameMenuTab( PentahoTab tab ){ + getLinkedTabMenuItem( tab ).setText( tab.getLabelText() ); + updateTabMenuText( tab ); + } + + /** + * Update the tabsMenuBar text to reflect the currently selected tab. + * If no tab is selected, the text is empty, and the menuBar is hidden. + * @param selectedTab + */ + public void updateTabMenuText( PentahoTab selectedTab ) { + if ( selectedTab == null ) { + tabsMenuBar.addStyleName( CLASS_EMPTY_TABS_MENU ); + tabsMenuItem.setText( "" ); + } else { + tabsMenuBar.removeStyleName( CLASS_EMPTY_TABS_MENU ); + String tabMenuText; + int tabCount = getTabCount(); + if ( tabCount > 1 ) { + int tabIndex = tabsSubMenuBar.getItemIndex( getLinkedTabMenuItem( selectedTab ) ) + 1; + tabMenuText = "Tab (" + tabIndex + "/" + tabCount + ") " + selectedTab.getLabelText(); + } else { + tabMenuText = selectedTab.getLabelText(); + } + tabsMenuItem.setText( tabMenuText ); + } + } + + private MantleTabMenuItem createTabMenuItem( MantleTab tab ) { + MantleTabMenuItem tabMenuItem = new MantleTabMenuItem( tab ); + return tabMenuItem; + } + + /** + * Refresh the context menu when it changes from one to many. + * Disables/Enables "All Tabs" and "Other Tabs" menu items: + * - If a tab is added and there are now 2 tabs + * - If a tab is removed and there is now only 1 tab + * @param added + */ + private void contextMenuRefreshThreshold( boolean added ) { + if ( ( added && menuItemHashMap.size() == 2 ) || ( !added && menuItemHashMap.size() == 1 ) ) { + menuItemHashMap.values().forEach( m -> m.refreshContextMenu() ); + } } public void showNewURLTab( String tabName, String tabTooltip, String url, boolean setFileInfoInFrame, @@ -595,6 +687,9 @@ public void okPressed() { } super.closeTab( closeTab, invokePreTabCloseHook ); + tabsSubMenuBar.removeItem( getLinkedTabMenuItem( closeTab ) ); + deleteTabMenuItemLinkage( closeTab ); + contextMenuRefreshThreshold(false); if ( getTabCount() == 0 ) { allTabsClosed(); @@ -605,6 +700,9 @@ public void okPressed() { List selectedItems = SolutionBrowserPanel.getInstance().getFilesListPanel().getSelectedFileItems(); EventBusUtil.EVENT_BUS.fireEvent( new SolutionBrowserCloseEvent( selectTabContent, selectedItems ) ); } + + // now that we have closed the target tab, update the tabsMenu text to what tab is currently selected (if there is one) + updateTabMenuText( getSelectedTab() ); } public static native void clearClosingFrame( Element frame ) diff --git a/user-console/src/main/java/org/pentaho/mantle/client/ui/tabs/TabContextMenuBar.java b/user-console/src/main/java/org/pentaho/mantle/client/ui/tabs/TabContextMenuBar.java new file mode 100644 index 00000000000..bfb0b4c4f7c --- /dev/null +++ b/user-console/src/main/java/org/pentaho/mantle/client/ui/tabs/TabContextMenuBar.java @@ -0,0 +1,62 @@ +package org.pentaho.mantle.client.ui.tabs; + +import com.google.gwt.user.client.DOM; +import com.google.gwt.user.client.Event; +import com.google.gwt.user.client.Window; +import com.google.gwt.user.client.ui.DecoratedPopupPanel; +import com.google.gwt.user.client.ui.MenuItem; +import org.pentaho.gwt.widgets.client.utils.MenuBarUtils; + +public class TabContextMenuBar extends com.google.gwt.user.client.ui.MenuBar { + + String heightPx; + String maxHeightPx; + + int height; + int top; + int menuBarTop; + + public TabContextMenuBar( boolean vertical ) { + super( vertical ); + } + + @Override + public void onBrowserEvent( Event event ) { + super.onBrowserEvent( event ); + + MenuItem item = MenuBarUtils.findItem( this, DOM.eventGetTarget( event ) ); + int type = event.getTypeInt(); + switch ( type ) { + case Event.ONMOUSEOVER: { + if ( item != null ) { + DecoratedPopupPanel popup = MenuBarUtils.getPopup( this ); + + // Set the menuBar height to be the sum of it's menuItem's heights + height = MenuBarUtils.calculatePopupHeight( item.getSubMenu() ); + + top = item.getAbsoluteTop(); + menuBarTop = this.getAbsoluteTop(); + + // if this menu is at the bottom of the screen, try to give it more space + if( Window.getClientHeight() - top < height ){ + top = Window.getClientHeight() - height; + } + + // if popup top is above the menuBar, bring it just beneath the menuBar + if ( top < menuBarTop ) { + top = menuBarTop + 1; + } + + heightPx = height + "px"; + maxHeightPx = "calc( 100vh - " + top + "px )"; + popup.getWidget().getElement().getStyle().setProperty( "height", heightPx ); + popup.getWidget().getElement().getStyle().setProperty( "maxHeight", maxHeightPx ); + + //Set popup's left to be next to the parent menuBar + popup.setPopupPosition( this.getOffsetWidth(), top ); + } + break; + } + } + } +} diff --git a/user-console/src/main/java/org/pentaho/mantle/client/ui/xul/MantleXul.java b/user-console/src/main/java/org/pentaho/mantle/client/ui/xul/MantleXul.java index 6dcbe91975d..90ef6840349 100644 --- a/user-console/src/main/java/org/pentaho/mantle/client/ui/xul/MantleXul.java +++ b/user-console/src/main/java/org/pentaho/mantle/client/ui/xul/MantleXul.java @@ -29,6 +29,8 @@ import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.DeckPanel; +import com.google.gwt.user.client.ui.MenuBar; +import com.google.gwt.user.client.ui.MenuItem; import com.google.gwt.user.client.ui.Panel; import com.google.gwt.user.client.ui.SimplePanel; import com.google.gwt.user.client.ui.Tree; @@ -51,6 +53,7 @@ import org.pentaho.mantle.client.events.SolutionBrowserSelectEventHandler; import org.pentaho.mantle.client.messages.Messages; import org.pentaho.mantle.client.objects.MantleXulOverlay; +import org.pentaho.mantle.client.solutionbrowser.SolutionBrowserPanel; import org.pentaho.mantle.client.solutionbrowser.tabs.IFrameTabPanel; import org.pentaho.ui.xul.XulException; import org.pentaho.ui.xul.XulOverlay; @@ -84,6 +87,7 @@ public class MantleXul implements IXulLoaderCallback, SolutionBrowserOpenEventHa private SimplePanel menubar = new SimplePanel(); private SimplePanel burgerToolbarWrapper = new SimplePanel(); + private SimplePanel tabsMenuBarWrapper = new SimplePanel(); private SimplePanel adminPerspective = new SimplePanel(); private DeckPanel adminContentDeck = new DeckPanel(); @@ -154,6 +158,11 @@ public void xulLoaded( GwtXulRunner runner ) { burgerToolbarWrapper.setStylePrimaryName( "burgerToolbar-Wrapper" ); burgerToolbarWrapper.setWidget( burgerToolbar ); + MenuBar tabsMenuBar = ( MenuBar ) container.getDocumentRoot().getElementById( "tabsMenuBar" ).getManagedObject(); + MenuItem tabsMenuItem = ( MenuItem ) container.getDocumentRoot().getElementById( "tabsMenu" ).getManagedObject(); + SolutionBrowserPanel.getInstance().getContentTabPanel().setTabsMenu( tabsMenuBar, tabsMenuItem ); + tabsMenuBarWrapper.setWidget( tabsMenuBar ); + // Get the menubar from the XUL doc Widget menu = (Widget) container.getDocumentRoot().getElementById( "mainMenubar" ).getManagedObject(); //$NON-NLS-1$ menubar.setWidget( menu ); @@ -323,6 +332,10 @@ public Widget getBurgerToolbarWrapper() { return burgerToolbarWrapper; } + public SimplePanel getTabsMenuBarWrapper(){ + return tabsMenuBarWrapper; + } + public Widget getMenubar() { return menubar; } diff --git a/user-console/src/main/resources/org/pentaho/mantle/public/Mantle.jsp b/user-console/src/main/resources/org/pentaho/mantle/public/Mantle.jsp index 121a0cdef10..de777f2f8f8 100644 --- a/user-console/src/main/resources/org/pentaho/mantle/public/Mantle.jsp +++ b/user-console/src/main/resources/org/pentaho/mantle/public/Mantle.jsp @@ -207,6 +207,7 @@
+
diff --git a/user-console/src/main/resources/org/pentaho/mantle/public/themes/ruby/mantleRuby.css b/user-console/src/main/resources/org/pentaho/mantle/public/themes/ruby/mantleRuby.css index 5655b35703e..63b223f5971 100644 --- a/user-console/src/main/resources/org/pentaho/mantle/public/themes/ruby/mantleRuby.css +++ b/user-console/src/main/resources/org/pentaho/mantle/public/themes/ruby/mantleRuby.css @@ -1183,7 +1183,7 @@ div#customDropdownPopupMajor .gwt-MenuBar-vertical .gwt-MenuItem:hover:not(.gwt- border-spacing: 0; } -#mainMenubar .gwt-MenuItem { +#mainMenubar .gwt-MenuItem, #pucTabsMenuBar .gwt-MenuItem{ color: #414141; font-size: 13px; font-family: OpenSansLight; @@ -1191,7 +1191,7 @@ div#customDropdownPopupMajor .gwt-MenuBar-vertical .gwt-MenuItem:hover:not(.gwt- padding: 5px 15px; } -#mainMenubar .gwt-MenuItem-selected { +#mainMenubar .gwt-MenuItem-selected, #pucTabsMenuBar .gwt-MenuItem-selected{ background: #cc0000; border: 0 none; color: #FFF; @@ -1582,7 +1582,7 @@ hr { } /* region Burger Menu Mode */ -#burgerBarPerspectiveMenu { +#burgerBarPerspectiveMenu, #pucTabsMenuBar { display: none; } @@ -1595,7 +1595,7 @@ hr { display: none; } -:where(.burger-mode) #burgerBarPerspectiveMenu { +:where(.burger-mode) :is(#burgerBarPerspectiveMenu, #pucTabsMenuBar) { display: block; } @@ -1756,9 +1756,54 @@ hr { left: calc(100vw - 210px) !important; } -:where(.burger-mode) -.toolbar-button-focus-panel:where(#openButton, #newButton, #dummyPluginContentButton, #printButton) { +:where(.burger-mode) .toolbar-button-focus-panel:where(#openButton, #newButton, #dummyPluginContentButton, #printButton) { + display: none; +} + +.pentaho-tab-bar { + display: flex; + width: 100vw; + overflow-x: auto; + scrollbar-width: thin; + overflow-y: hidden; +} + +:where(.burger-mode) .pentaho-tab-bar { + display: none; +} + +.empty-tabs-menu { display: none; } /* endregion Burger Menu Mode */ + +#pucTabsMenuBar table td, .tabsSubMenuBar table td.gwt-MenuItem { + width: 130px; + display: inline-block; +} + +#pucTabsMenuBar table td { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.tabsSubMenuBar table td.gwt-MenuItem { + word-wrap:break-word; +} + +.tabsSubMenuBar { + position: relative; +} + +.tabsMenuContextSubMenu, .tabsSubMenuBar { + overflow-y: auto; +} + +/* when the viewport width is 400px or less, preserve the tabsMenuBar width and shrink the context subMenu*/ +@media (max-width: 400px) { + .tabsMenuContextSubMenu table td.gwt-MenuItem { + width: calc(100vw - 235px); + } +} diff --git a/user-console/src/main/resources/org/pentaho/mantle/public/xul/mantle.xul b/user-console/src/main/resources/org/pentaho/mantle/public/xul/mantle.xul index 2d9ed26c3e7..51d8307a76a 100644 --- a/user-console/src/main/resources/org/pentaho/mantle/public/xul/mantle.xul +++ b/user-console/src/main/resources/org/pentaho/mantle/public/xul/mantle.xul @@ -70,6 +70,10 @@ tooltiptext="${burgerMenu}"/> + + + + From ace122eb066e162be0fd4354458bcba55e82ced1 Mon Sep 17 00:00:00 2001 From: AAravind27 Date: Fri, 29 Sep 2023 07:05:59 +0100 Subject: [PATCH 11/31] [BACKLOG-37966] Toolbar improvements in PUC --- .../org/pentaho/mantle/public/Mantle.jsp | 6 ++-- .../mantle/public/themes/ruby/mantleRuby.css | 33 +++++++++++++++---- 2 files changed, 30 insertions(+), 9 deletions(-) diff --git a/user-console/src/main/resources/org/pentaho/mantle/public/Mantle.jsp b/user-console/src/main/resources/org/pentaho/mantle/public/Mantle.jsp index de777f2f8f8..16899b14694 100644 --- a/user-console/src/main/resources/org/pentaho/mantle/public/Mantle.jsp +++ b/user-console/src/main/resources/org/pentaho/mantle/public/Mantle.jsp @@ -12,7 +12,7 @@ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU Lesser General Public License for more details. * -* Copyright (c) 2002-2021 Hitachi Vantara. All rights reserved. +* Copyright (c) 2002-2023 Hitachi Vantara. All rights reserved. --%> @@ -203,11 +203,11 @@
- +
-
+
diff --git a/user-console/src/main/resources/org/pentaho/mantle/public/themes/ruby/mantleRuby.css b/user-console/src/main/resources/org/pentaho/mantle/public/themes/ruby/mantleRuby.css index 63b223f5971..045d0238fd9 100644 --- a/user-console/src/main/resources/org/pentaho/mantle/public/themes/ruby/mantleRuby.css +++ b/user-console/src/main/resources/org/pentaho/mantle/public/themes/ruby/mantleRuby.css @@ -1206,12 +1206,18 @@ div#customDropdownPopupMajor .gwt-MenuBar-vertical .gwt-MenuItem:hover:not(.gwt- #mainToolbarWrapper > tbody > tr, #mainToolbarWrapper > tbody > tr > td, #mainToolbarWrapper > tbody > tr > td > div, -#mainToolbar, -#burgerToolbar, :is(#mainToolbar, #burgerToolbar) > tbody > tr > td > table { display: contents; } +#mainToolbar, #burgerToolbar, #tabsMenuBar { + display: flex; + flex: 0 1 auto; + width: auto !important; + flex-wrap: wrap; + gap: 0; +} + :where(#pucWrapper:not(.burger-mode)) #burgerToolbar { display: none; } @@ -1226,6 +1232,16 @@ div#customDropdownPopupMajor .gwt-MenuBar-vertical .gwt-MenuItem:hover:not(.gwt- max-width: var(--flex-max-width, 10px); } +:where(#pucWrapper.burger-mode) #mainToolbar .spacer { + /* Nuke the spacer widths because these would only flex after the whole toolbar + would wrap to a new row. This ensures less rows from the start. */ + width: auto !important; +} + +:where(#pucWrapper.burger-mode) #mainToolbar { + margin-left: auto; +} + :is(#mainToolbar, #burgerToolbar) :is(.toolbar-button, .toolbar-toggle-button) { border-width: var(--puc-toolbar-button-border-width); } @@ -1582,10 +1598,14 @@ hr { } /* region Burger Menu Mode */ -#burgerBarPerspectiveMenu, #pucTabsMenuBar { +#pucTabsMenuBar { display: none; } +#pucTabsMenuBar > * { + display: contents; +} + /* puc header */ :where(.burger-mode) #pucContent { /* top: var(--puc-header-burger-mode-height); */ @@ -1595,8 +1615,9 @@ hr { display: none; } -:where(.burger-mode) :is(#burgerBarPerspectiveMenu, #pucTabsMenuBar) { - display: block; +:where(.burger-mode) #pucTabsMenuBar { + /* Show children when burger mode */ + display: contents; } :where(.burger-mode) #pucHeader { @@ -1772,7 +1793,7 @@ hr { display: none; } -.empty-tabs-menu { +#tabsMenuBar.empty-tabs-menu { display: none; } From fb3ca9c93670cdb53a114589925aa7fa712089f4 Mon Sep 17 00:00:00 2001 From: amitkumar3 Date: Thu, 9 Nov 2023 21:29:17 +0530 Subject: [PATCH 12/31] [BACKLOG-38977] PUC scheduler perspective - modify column headers to be consistent with PDI-backend --- .../mantle/client/workspace/SchedulesPanel.java | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/user-console/src/main/java/org/pentaho/mantle/client/workspace/SchedulesPanel.java b/user-console/src/main/java/org/pentaho/mantle/client/workspace/SchedulesPanel.java index b113c547364..492352bd1a0 100644 --- a/user-console/src/main/java/org/pentaho/mantle/client/workspace/SchedulesPanel.java +++ b/user-console/src/main/java/org/pentaho/mantle/client/workspace/SchedulesPanel.java @@ -381,6 +381,14 @@ public String getValue( JsJob job ) { }; nameColumn.setSortable( true ); + + TextColumn executableType = new TextColumn() { + public String getValue(JsJob job) { + return job.getScheduledExtn(); + } + }; + executableType.setSortable( true ); + HtmlColumn resourceColumn = new HtmlColumn() { @Override public String getStringValue( JsJob job ) { @@ -509,6 +517,7 @@ public String getValue( JsJob job ) { // table.addColumn(idColumn, "ID"); table.addColumn( nameColumn, Messages.getString( "scheduleName" ) ); table.addColumn( scheduleColumn, Messages.getString( "recurrence" ) ); + table.addColumn(executableType, Messages.getString( "executableType" ) ); table.addColumn( resourceColumn, Messages.getString( "sourceFile" ) ); table.addColumn( outputPathColumn, Messages.getString( "outputPath" ) ); @@ -525,10 +534,11 @@ public String getValue( JsJob job ) { table.addColumnStyleName( 3, "backgroundContentHeaderTableCell" ); table.addColumnStyleName( 4, "backgroundContentHeaderTableCell" ); table.addColumnStyleName( 5, "backgroundContentHeaderTableCell" ); + table.addColumnStyleName( 6, "backgroundContentHeaderTableCell" ); if ( isAdmin ) { - table.addColumnStyleName( 6, "backgroundContentHeaderTableCell" ); + table.addColumnStyleName( 7, "backgroundContentHeaderTableCell" ); } - table.addColumnStyleName( isAdmin ? 7 : 6, "backgroundContentHeaderTableCell" ); + table.addColumnStyleName( isAdmin ? 8 : 7, "backgroundContentHeaderTableCell" ); table.setColumnWidth( nameColumn, 160, Unit.PX ); table.setColumnWidth( resourceColumn, 200, Unit.PX ); @@ -536,6 +546,7 @@ public String getValue( JsJob job ) { table.setColumnWidth( scheduleColumn, 170, Unit.PX ); table.setColumnWidth( lastFireColumn, 120, Unit.PX ); table.setColumnWidth( nextFireColumn, 120, Unit.PX ); + table.setColumnWidth( executableType, 120, Unit.PX ); if ( isAdmin ) { table.setColumnWidth( userNameColumn, 100, Unit.PX ); } From 730be6617a23c47b8fac9808e0676b44709a0d9c Mon Sep 17 00:00:00 2001 From: "noor.mohsildar" Date: Mon, 13 Nov 2023 17:14:56 +0530 Subject: [PATCH 13/31] [BACKLOG-39091] - Added missing 'msg-box-info' job step to server --- assemblies/pentaho-solutions/pom.xml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/assemblies/pentaho-solutions/pom.xml b/assemblies/pentaho-solutions/pom.xml index 4deac65a772..8254befb409 100644 --- a/assemblies/pentaho-solutions/pom.xml +++ b/assemblies/pentaho-solutions/pom.xml @@ -560,6 +560,13 @@ zip ${prepared.kettle.plugins.directory} + + org.pentaho.di.plugins + msg-box-info-plugins + ${project.version} + zip + ${prepared.kettle.plugins.directory} + false true From 22736cc58c59482ad881ba328dbbf2f77108c369 Mon Sep 17 00:00:00 2001 From: devuser Date: Wed, 15 Nov 2023 08:23:35 +0000 Subject: [PATCH 14/31] [BACKLOG-39091] Added missing 'sftpput' step to server --- assemblies/pentaho-solutions/pom.xml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/assemblies/pentaho-solutions/pom.xml b/assemblies/pentaho-solutions/pom.xml index 8254befb409..11143aa1ec2 100644 --- a/assemblies/pentaho-solutions/pom.xml +++ b/assemblies/pentaho-solutions/pom.xml @@ -546,6 +546,13 @@ zip ${prepared.kettle.plugins.directory} + + org.pentaho.di.plugins + sftpput-plugin + ${project.version} + zip + ${prepared.kettle.plugins.directory} + org.pentaho.di.plugins put-file-sftp-plugins From 3be4ee54abc36b8eec15ffdb3018c55bd3481191 Mon Sep 17 00:00:00 2001 From: singletonc Date: Thu, 16 Nov 2023 13:28:18 -0500 Subject: [PATCH 15/31] [BACKLOG-39186] Implement more specific selector for .pentaho-tab-bar in mantleRuby.css --- .../org/pentaho/mantle/public/themes/ruby/mantleRuby.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user-console/src/main/resources/org/pentaho/mantle/public/themes/ruby/mantleRuby.css b/user-console/src/main/resources/org/pentaho/mantle/public/themes/ruby/mantleRuby.css index 045d0238fd9..2de51881cec 100644 --- a/user-console/src/main/resources/org/pentaho/mantle/public/themes/ruby/mantleRuby.css +++ b/user-console/src/main/resources/org/pentaho/mantle/public/themes/ruby/mantleRuby.css @@ -1781,7 +1781,7 @@ hr { display: none; } -.pentaho-tab-bar { +.panelWithTitledToolbar .pentaho-tab-bar { display: flex; width: 100vw; overflow-x: auto; @@ -1789,7 +1789,7 @@ hr { overflow-y: hidden; } -:where(.burger-mode) .pentaho-tab-bar { +:where(.burger-mode) .panelWithTitledToolbar .pentaho-tab-bar { display: none; } From edafd40368676562aee33e2c7edc1abcf8b00c66 Mon Sep 17 00:00:00 2001 From: singletonc Date: Thu, 16 Nov 2023 13:55:28 -0500 Subject: [PATCH 16/31] [BACKLOG-39182] Ensure TabsMenu does not show up in themes other than Ruby - Move display:none on #pucTabsMenuBar to MantleStyle.css, so that it is hidden for all themes by default instead of just ruby --- .../main/resources/org/pentaho/mantle/public/MantleStyle.css | 4 ++++ .../org/pentaho/mantle/public/themes/ruby/mantleRuby.css | 3 --- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/user-console/src/main/resources/org/pentaho/mantle/public/MantleStyle.css b/user-console/src/main/resources/org/pentaho/mantle/public/MantleStyle.css index 9190b5a6e41..61c8aa5fb3e 100644 --- a/user-console/src/main/resources/org/pentaho/mantle/public/MantleStyle.css +++ b/user-console/src/main/resources/org/pentaho/mantle/public/MantleStyle.css @@ -888,3 +888,7 @@ code { padding-bottom: 10px; padding-top: 10px; } + +#pucTabsMenuBar{ + display: none; +} diff --git a/user-console/src/main/resources/org/pentaho/mantle/public/themes/ruby/mantleRuby.css b/user-console/src/main/resources/org/pentaho/mantle/public/themes/ruby/mantleRuby.css index 045d0238fd9..d0ca5ef8755 100644 --- a/user-console/src/main/resources/org/pentaho/mantle/public/themes/ruby/mantleRuby.css +++ b/user-console/src/main/resources/org/pentaho/mantle/public/themes/ruby/mantleRuby.css @@ -1598,9 +1598,6 @@ hr { } /* region Burger Menu Mode */ -#pucTabsMenuBar { - display: none; -} #pucTabsMenuBar > * { display: contents; From 5175c8d703759161d250e315d684cb22b096b711 Mon Sep 17 00:00:00 2001 From: Srinivas Rallapalli Date: Mon, 20 Nov 2023 11:43:59 -0600 Subject: [PATCH 17/31] [BISERVER-14992] not showing the repeats with every day and setting the value to 0 in edit mode --- .../pentaho/platform/scheduler2/quartz/QuartzScheduler.java | 4 ++++ .../platform/scheduler2/quartz/test/ComplexTriggerTest.java | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/scheduler/src/main/java/org/pentaho/platform/scheduler2/quartz/QuartzScheduler.java b/scheduler/src/main/java/org/pentaho/platform/scheduler2/quartz/QuartzScheduler.java index 79c2b97974c..775563a0841 100644 --- a/scheduler/src/main/java/org/pentaho/platform/scheduler2/quartz/QuartzScheduler.java +++ b/scheduler/src/main/java/org/pentaho/platform/scheduler2/quartz/QuartzScheduler.java @@ -816,6 +816,10 @@ private static List parseRecurrence( String cronExpression, int String[] tokens = cronExpression.split( delims ); if ( tokens.length > tokenIndex ) { String timeTokens = tokens[tokenIndex]; + //Adding this block in case if it's for every 1 day case, where it's considering the token as * instead of */1 + if( tokenIndex == 3 && timeTokens.equals( "*" ) ) { + timeTokens = timeTokens + "/1"; + } tokens = timeTokens.split( "," ); //$NON-NLS-1$ if ( ( tokens.length > 1 ) || !( tokens[0].equals( "*" ) || tokens[0].equals( "?" ) ) ) { //$NON-NLS-1$ //$NON-NLS-2$ RecurrenceList timeList = null; diff --git a/scheduler/src/test/java/org/pentaho/platform/scheduler2/quartz/test/ComplexTriggerTest.java b/scheduler/src/test/java/org/pentaho/platform/scheduler2/quartz/test/ComplexTriggerTest.java index 805c08149bc..a5f4fb530b9 100644 --- a/scheduler/src/test/java/org/pentaho/platform/scheduler2/quartz/test/ComplexTriggerTest.java +++ b/scheduler/src/test/java/org/pentaho/platform/scheduler2/quartz/test/ComplexTriggerTest.java @@ -126,7 +126,7 @@ public void timeSliceTest() { trigger = QuartzScheduler.createComplexTrigger( "* * * * * ? *" ); Assert.assertEquals( trigger.getYearlyRecurrences().size(), 0 ); Assert.assertEquals( trigger.getMonthlyRecurrences().size(), 0 ); - Assert.assertEquals( trigger.getDayOfMonthRecurrences().size(), 0 ); + Assert.assertEquals( trigger.getDayOfMonthRecurrences().size(), 1 ); Assert.assertEquals( trigger.getDayOfWeekRecurrences().size(), 0 ); Assert.assertEquals( trigger.getHourlyRecurrences().size(), 0 ); Assert.assertEquals( trigger.getMinuteRecurrences().size(), 0 ); From b87e202e03310afb218e896d037fa2f117857d05 Mon Sep 17 00:00:00 2001 From: lsaikrishna Date: Tue, 10 Oct 2023 21:22:00 +0530 Subject: [PATCH 18/31] renamed the artifact name from pentaho-streaming-kafka-plugin-zip to pentaho-streaming-kafka-plugin --- assemblies/pentaho-solutions/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assemblies/pentaho-solutions/pom.xml b/assemblies/pentaho-solutions/pom.xml index 11143aa1ec2..199d4da70ad 100644 --- a/assemblies/pentaho-solutions/pom.xml +++ b/assemblies/pentaho-solutions/pom.xml @@ -310,7 +310,7 @@ pentaho - pentaho-streaming-kafka-plugin-zip + pentaho-streaming-kafka-plugin ${project.version} zip ${prepared.kettle.plugins.directory} From e284afd27817f4deb7067154763e5d5913ca27d9 Mon Sep 17 00:00:00 2001 From: Andre Ramos <95410731+andreramos89@users.noreply.github.com> Date: Mon, 4 Dec 2023 17:53:22 +0000 Subject: [PATCH 19/31] [BAD-1930] - When Cloudera HIVE driver is used, a side effect in the LOGs with error messages start to show (#5462) * [BAD-1930] - When Cloudera HIVE driver is used, a side effect in the LOGs with error messages start to show * Update PentahoSystemDriver.java --------- Co-authored-by: Sergio Ribeiro --- .../connections/PentahoSystemDriver.java | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/extensions/src/main/java/org/pentaho/platform/plugin/services/connections/PentahoSystemDriver.java b/extensions/src/main/java/org/pentaho/platform/plugin/services/connections/PentahoSystemDriver.java index 03a7822887e..ecded2baa43 100644 --- a/extensions/src/main/java/org/pentaho/platform/plugin/services/connections/PentahoSystemDriver.java +++ b/extensions/src/main/java/org/pentaho/platform/plugin/services/connections/PentahoSystemDriver.java @@ -30,6 +30,7 @@ import java.sql.DriverPropertyInfo; import java.sql.SQLException; import java.sql.SQLFeatureNotSupportedException; +import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; @@ -83,14 +84,23 @@ private String translate( String url ) { @Override public Connection connect( final String url, final Properties info ) throws SQLException { String translatedUrl = translate( url ); + List listOfExceptions = new ArrayList<>(); + for ( Driver driver : getAllDrivers() ) { if ( driver.acceptsURL( translatedUrl ) ) { - Connection conn = driver.connect( translatedUrl, info ); - if ( conn != null ) { - return conn; + try { + Connection conn = driver.connect( translatedUrl, info ); + if ( conn != null ) { + return conn; + } + } catch ( Exception e ) { + listOfExceptions.add( e ); } } } + if ( !listOfExceptions.isEmpty() ) { + throw new SQLException( listOfExceptions.get( 0 ) ); + } return null; } From 26ef60f712e9da32fc7fadb6cbe73261ee985c5d Mon Sep 17 00:00:00 2001 From: Srinivas Rallapalli Date: Tue, 5 Dec 2023 13:20:08 -0600 Subject: [PATCH 20/31] [BACKLOG-39140] unify icons between PDI and PUC --- .../client/workspace/SchedulesPanel.java | 56 +++++++++---------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/user-console/src/main/java/org/pentaho/mantle/client/workspace/SchedulesPanel.java b/user-console/src/main/java/org/pentaho/mantle/client/workspace/SchedulesPanel.java index 9afa5e9bc0e..e45ae8999bf 100644 --- a/user-console/src/main/java/org/pentaho/mantle/client/workspace/SchedulesPanel.java +++ b/user-console/src/main/java/org/pentaho/mantle/client/workspace/SchedulesPanel.java @@ -487,7 +487,7 @@ public String getValue( JsJob job ) { return BLANK_VALUE; } - DateTimeFormat format = DateTimeFormat.getFormat( "EEE MMM dd HH:mm:ss zzz yyyy" ); + DateTimeFormat format = DateTimeFormat.getFormat( PredefinedFormat.DATE_TIME_MEDIUM ); return format.format( date ); } catch ( Throwable t ) { @@ -792,20 +792,6 @@ public void setPageStart( int index ) { bar.add( Toolbar.GLUE ); // Add control scheduler button - if ( isAdmin ) { - final ToolbarButton controlSchedulerButton = new ToolbarButton( ImageUtil.getThemeableImage( - ICON_SMALL_STYLE, "icon-start-scheduler" ) ); - - controlSchedulerButton.setCommand( new Command() { - public void execute() { - toggleSchedulerOnOff( controlSchedulerButton, isScheduler ); - } - } ); - updateControlSchedulerButtonState( controlSchedulerButton, isScheduler ); - - bar.add( controlSchedulerButton ); - bar.addSpacer( 20 ); - } // Add filter button filterButton.setCommand( new Command() { @@ -841,18 +827,6 @@ public void execute() { bar.add( filterRemoveButton ); } - // Add refresh button - ToolbarButton refresh = new ToolbarButton( ImageUtil.getThemeableImage( ICON_SMALL_STYLE, "icon-refresh" ) ); - refresh.setToolTip( Messages.getString( "refreshTooltip" ) ); - refresh.setCommand( new Command() { - public void execute() { - RefreshSchedulesCommand cmd = new RefreshSchedulesCommand(); - cmd.execute(); - } - } ); - bar.add( refresh ); - - bar.addSpacer( 20 ); // Add execute now button triggerNowButton.setToolTip( Messages.getString( "executeNow" ) ); @@ -867,6 +841,19 @@ public void execute() { triggerNowButton.setEnabled( false ); bar.add( triggerNowButton ); + bar.addSpacer( 20 ); + + // Add refresh button + ToolbarButton refresh = new ToolbarButton( ImageUtil.getThemeableImage( ICON_SMALL_STYLE, "icon-refresh" ) ); + refresh.setToolTip( Messages.getString( "refreshTooltip" ) ); + refresh.setCommand( new Command() { + public void execute() { + RefreshSchedulesCommand cmd = new RefreshSchedulesCommand(); + cmd.execute(); + } + } ); + bar.add( refresh ); + // Add control schedule button controlScheduleButton.setCommand( new Command() { public void execute() { @@ -885,7 +872,20 @@ public void execute() { controlScheduleButton.setEnabled( false ); bar.add( controlScheduleButton ); - bar.addSpacer( 20 ); + + if ( isAdmin ) { + final ToolbarButton controlSchedulerButton = new ToolbarButton( ImageUtil.getThemeableImage( + ICON_SMALL_STYLE, "icon-start-scheduler" ) ); + + controlSchedulerButton.setCommand( new Command() { + public void execute() { + toggleSchedulerOnOff( controlSchedulerButton, isScheduler ); + } + } ); + updateControlSchedulerButtonState( controlSchedulerButton, isScheduler ); + + bar.add( controlSchedulerButton ); + } // Add edit button editButton.setCommand( new Command() { From fd6b9e6a1963f12f24195cd8c16104a636659bd1 Mon Sep 17 00:00:00 2001 From: Peter Rinehart Date: Tue, 5 Dec 2023 16:21:19 -0500 Subject: [PATCH 21/31] [BISERVER-14241] Source name logic assumed only one . would ever be in a file name; updated to only strip off a file extension, if any. --- .../pentaho/mantle/client/workspace/SchedulesPanel.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/user-console/src/main/java/org/pentaho/mantle/client/workspace/SchedulesPanel.java b/user-console/src/main/java/org/pentaho/mantle/client/workspace/SchedulesPanel.java index 9afa5e9bc0e..afa0bc416cf 100644 --- a/user-console/src/main/java/org/pentaho/mantle/client/workspace/SchedulesPanel.java +++ b/user-console/src/main/java/org/pentaho/mantle/client/workspace/SchedulesPanel.java @@ -46,7 +46,6 @@ import com.google.gwt.user.cellview.client.SimplePager.TextLocation; import com.google.gwt.user.cellview.client.TextColumn; import com.google.gwt.user.client.Command; -import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.HasHorizontalAlignment; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.SimplePanel; @@ -61,7 +60,6 @@ import org.apache.http.protocol.HTTP; import org.pentaho.gwt.widgets.client.dialogs.IDialogCallback; import org.pentaho.gwt.widgets.client.dialogs.MessageDialogBox; -import org.pentaho.gwt.widgets.client.dialogs.PromptDialogBox; import org.pentaho.gwt.widgets.client.toolbar.Toolbar; import org.pentaho.gwt.widgets.client.toolbar.ToolbarButton; import org.pentaho.gwt.widgets.client.utils.string.StringUtils; @@ -392,7 +390,12 @@ public String getValue(JsJob job) { HtmlColumn resourceColumn = new HtmlColumn() { @Override public String getStringValue( JsJob job ) { - String name = job.getFullResourceName().split( "\\." )[ 0 ]; + String fullName = job.getFullResourceName(); + if ( null == fullName || fullName.length() == 0 ) { + return ""; + } + int lastDotIndex = fullName.lastIndexOf( "." ); + String name = ( lastDotIndex > 0 ) ? fullName.substring( 0, lastDotIndex ) : fullName; return name.replaceAll( "/", "/" ); } }; From 2b3431b1916cde713be4586567b9070d0c8e90ed Mon Sep 17 00:00:00 2001 From: Tim Kafalas tkafalas Date: Wed, 6 Dec 2023 09:21:32 -0500 Subject: [PATCH 22/31] [PPP-4826] Upgrade Vulnerable Hibernate to 5.4.24 --- .../pentaho-solutions/system/pentaho.xml | 2 +- .../system/hibernate/h2.hibernate.cfg.xml | 2 +- .../system/hibernate/hsql.hibernate.cfg.xml | 3 +- .../system/hibernate/mysql5.hibernate.cfg.xml | 5 +- .../hibernate/oracle10g.hibernate.cfg.xml | 5 +- .../hibernate/postgresql.hibernate.cfg.xml | 3 +- .../hibernate/sqlserver.hibernate.cfg.xml | 5 +- assemblies/pentaho-war/pom.xml | 2 +- core/pom.xml | 6 +- extensions/pom.xml | 59 ++++ .../plugin/services/cache/CacheManager.java | 257 ++++++++--------- .../plugin/services/cache/HvCache.java | 54 ++++ .../services/cache/HvCacheRegionFactory.java | 34 +++ .../services/cache/HvTimestampsRegion.java | 37 +++ .../services/cache/LastModifiedCache.java | 258 +++++++++++++----- .../hibernate/postgresql.hibernate.cfg.xml | 2 +- .../resources/web-solution/system/pentaho.xml | 2 +- pom.xml | 16 +- repository/pom.xml | 48 ++++ .../hibernate/HibernateLoadEventListener.java | 8 +- .../repository/hibernate/HibernateUtil.java | 25 +- .../hibernate/usertypes/BlobUserType.java | 22 +- .../usertypes/BlobtoByteArrayUserType.java | 15 +- .../usertypes/EmptyStringUserType.java | 26 +- .../usertypes/LongStringUserType.java | 17 +- 25 files changed, 672 insertions(+), 241 deletions(-) create mode 100644 extensions/src/main/java/org/pentaho/platform/plugin/services/cache/HvCache.java create mode 100644 extensions/src/main/java/org/pentaho/platform/plugin/services/cache/HvCacheRegionFactory.java create mode 100644 extensions/src/main/java/org/pentaho/platform/plugin/services/cache/HvTimestampsRegion.java diff --git a/assemblies/pentaho-solutions/src/main/resources-filtered/pentaho-solutions/system/pentaho.xml b/assemblies/pentaho-solutions/src/main/resources-filtered/pentaho-solutions/system/pentaho.xml index 13b5002593c..6623321c078 100644 --- a/assemblies/pentaho-solutions/src/main/resources-filtered/pentaho-solutions/system/pentaho.xml +++ b/assemblies/pentaho-solutions/src/main/resources-filtered/pentaho-solutions/system/pentaho.xml @@ -64,7 +64,7 @@ --> - net.sf.ehcache.hibernate.SingletonEhCacheProvider + org.pentaho.platform.plugin.services.cache.HvCacheRegionFactory pentahoCache - - net.sf.ehcache.hibernate.SingletonEhCacheProvider + + org.hibernate.cache.EhCacheProvider + org.pentaho.platform.plugin.services.cache.HvCacheRegionFactory true true diff --git a/assemblies/pentaho-war/pom.xml b/assemblies/pentaho-war/pom.xml index 1d6c83891c5..3b9300bb917 100644 --- a/assemblies/pentaho-war/pom.xml +++ b/assemblies/pentaho-war/pom.xml @@ -18,7 +18,7 @@ ${prepared.war.directory}/WEB-INF/lib 1.3.3 ${basedir}/src/main/resources/datasources - 3.6.9.Final + 5.4.24.Final 3.0.1 0.9.1.2 1.0.12 diff --git a/core/pom.xml b/core/pom.xml index c48a913edb4..dfef11e89f3 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -370,7 +370,7 @@ - org.hibernate + org.hibernate.common hibernate-commons-annotations ${hibernate-commons-annotations.version} compile @@ -383,8 +383,8 @@ org.hibernate.javax.persistence - hibernate-jpa-2.0-api - ${hibernate-jpa-2.0-api.version} + hibernate-jpa-2.1-api + ${hibernate-jpa-2.1-api.version} compile diff --git a/extensions/pom.xml b/extensions/pom.xml index d1a7af10296..94b1771993e 100644 --- a/extensions/pom.xml +++ b/extensions/pom.xml @@ -487,6 +487,17 @@ + + org.hibernate + hibernate-ehcache + ${hibernate-ehcache.version} + + + * + * + + + org.antlr antlr-complete @@ -2754,6 +2765,54 @@ 4.10.0 test + + org.jboss.logging + jboss-logging + ${jboss-logging.version} + compile + + + * + * + + + + + com.fasterxml + classmate + ${classmate.version} + compile + + + * + * + + + + + javax.persistence + javax.persistence-api + ${javax.persistence-api.version} + compile + + + * + * + + + + + net.bytebuddy + byte-buddy + ${byte-buddy.version} + compile + + + * + * + + + diff --git a/extensions/src/main/java/org/pentaho/platform/plugin/services/cache/CacheManager.java b/extensions/src/main/java/org/pentaho/platform/plugin/services/cache/CacheManager.java index 23d7d380350..98ba6e06f8f 100644 --- a/extensions/src/main/java/org/pentaho/platform/plugin/services/cache/CacheManager.java +++ b/extensions/src/main/java/org/pentaho/platform/plugin/services/cache/CacheManager.java @@ -14,24 +14,32 @@ * See the GNU Lesser General Public License for more details. * * - * Copyright (c) 2002-2018 Hitachi Vantara. All rights reserved. + * Copyright (c) 2002-2023 Hitachi Vantara. All rights reserved. * */ package org.pentaho.platform.plugin.services.cache; +import net.sf.ehcache.Ehcache; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.dom4j.Element; -import org.hibernate.cache.Cache; +import org.hibernate.Cache; +import org.hibernate.SessionFactory; import org.hibernate.cache.CacheException; -import org.hibernate.cache.CacheProvider; +import org.hibernate.cache.spi.RegionFactory; +import org.hibernate.engine.spi.SessionFactoryImplementor; +import org.hibernate.event.service.spi.EventListenerRegistry; +import org.hibernate.event.spi.EventType; +import org.hibernate.internal.SessionImpl; import org.pentaho.platform.api.cache.ICacheExpirationRegistry; import org.pentaho.platform.api.engine.ICacheManager; import org.pentaho.platform.api.engine.IPentahoSession; import org.pentaho.platform.api.engine.ISystemSettings; import org.pentaho.platform.engine.core.system.PentahoSystem; import org.pentaho.platform.engine.services.messages.Messages; +import org.pentaho.platform.repository.hibernate.HibernateLoadEventListener; +import org.pentaho.platform.repository.hibernate.HibernateUtil; import org.pentaho.platform.util.xml.dom4j.XmlDom4JHelper; import java.util.ArrayList; @@ -41,17 +49,18 @@ import java.util.Map; import java.util.Properties; import java.util.Set; +import java.util.stream.Collectors; /** * This class provides an access point for pluggable caching mechanisms. Right now, it only supports the caching - * mechanisms implemented in org.hibernate.cache. + * mechanisms implemented in org.hibernate.cache for Timestamp Regions. *

* To use the cache manager, you need to include the following information in your pentaho.xml. * *

  * 
  *  <cache-provider>
- *    <class>org.hibernate.cache.xxxxxxxx</class>
+ *    <class>org.pentaho.platform.plugin.services.cache.HvCacheRegionFactory</class>
  *    <region>pentahoCache</region>
  *    <properties>
  *      <property name="someProperty">someValue</property>
@@ -60,12 +69,13 @@
  * 
* *

- * The specified class must implement the org.hibernate.cache.CacheProvider interface. + * The specified class must extend org.hibernate.cache.spi.AbstractRegionFactory and/or implement + * org.hibernate.cache.spi.RegionFactory. *

- * Each implementation of the org.hibernate.cache.CacheProvider has slightly different requirements with - * respect to the required input parameters - so, please see the classes in that package for more information (available - * from the Sourceforge Hibernate project). Also, some cache providers (notably the - * org.hibernate.cache.EhCacheProvider) completely ignore the passed in properties, and only configure + * Each implementation of the org.hibernate.cache.spi.RegionFactory has slightly + * different requirements with respect to the required input parameters - so, please see the classes in that package + * for more information (available from the Sourceforge Hibernate project). Also, some region factories (notably the + * org.hibernate.cache.EhCacheRegionFactory) completely ignore the passed in properties, and only configure * themselves by locating a configuration file (e.g. ehcache.xml) on the classpath. * *

@@ -105,8 +115,8 @@ * *

* - * @see org.hibernate.cache.CacheProvider - * @see org.hibernate.cache.Cache + * @see org.hibernate.cache.RegionFactory + * @see org.hibernate.Cache * * @author mbatchel * @@ -115,11 +125,11 @@ public class CacheManager implements ICacheManager { protected static final Log logger = LogFactory.getLog( CacheManager.class ); // ~ Instance Fields ====================================================== - private CacheProvider cacheProvider; + private RegionFactory regionFactory; private Map regionCache; - private String cacheProviderClassName; + private String regionFactoryClassname; private boolean cacheEnabled; @@ -152,10 +162,10 @@ public CacheManager() { System.setProperty( "java.io.tmpdir", s + "/" ); //$NON-NLS-1$//$NON-NLS-2$ } if ( settings != null ) { - cacheProviderClassName = settings.getSystemSetting( "cache-provider/class", null ); //$NON-NLS-1$ - if ( cacheProviderClassName != null ) { + regionFactoryClassname = settings.getSystemSetting( "cache-provider/class", null ); //$NON-NLS-1$ + if ( regionFactoryClassname != null ) { Properties cacheProperties = getCacheProperties( settings ); - setupCacheProvider( cacheProperties ); + setupRegionProvider( cacheProperties ); this.cacheEnabled = true; } } @@ -163,23 +173,26 @@ public CacheManager() { PentahoSystem.addLogoutListener( this ); } - protected void setupCacheProvider( Properties cacheProperties ) { - Object obj = PentahoSystem.createObject( cacheProviderClassName ); + protected void setupRegionProvider( Properties cacheProperties ) { + Object obj = PentahoSystem.createObject( regionFactoryClassname ); //Should be an HvCacheRegionFactory cacheExpirationRegistry = PentahoSystem.get( ICacheExpirationRegistry.class, null ); if ( null != obj ) { - if ( obj instanceof CacheProvider ) { - this.cacheProvider = (CacheProvider) obj; - cacheProvider.start( cacheProperties ); + if ( obj instanceof RegionFactory ) { + this.regionFactory = (RegionFactory) obj; //cacheProvider changed to regionFactory for hibernate 5.3 + regionFactory.start( HibernateUtil.getSessionFactory().getSessionFactoryOptions(), cacheProperties ); regionCache = new HashMap(); - Cache cache = buildCache( SESSION, cacheProperties ); + ( (SessionFactoryImplementor) HibernateUtil.getSessionFactory() ).getServiceRegistry() + .getService( EventListenerRegistry.class ).prependListeners( + EventType.LOAD, new HibernateLoadEventListener() ); + Cache cache = buildCache( SESSION, HibernateUtil.getSessionFactory(), cacheProperties ); if ( cache == null ) { CacheManager.logger .error( Messages.getInstance().getString( "CacheManager.ERROR_0005_UNABLE_TO_BUILD_CACHE" ) ); //$NON-NLS-1$ } else { regionCache.put( SESSION, cache ); } - cache = buildCache( GLOBAL, cacheProperties ); + cache = buildCache( GLOBAL, HibernateUtil.getSessionFactory(), cacheProperties ); if ( cache == null ) { CacheManager.logger .error( Messages.getInstance().getString( "CacheManager.ERROR_0005_UNABLE_TO_BUILD_CACHE" ) ); //$NON-NLS-1$ @@ -196,17 +209,17 @@ protected void setupCacheProvider( Properties cacheProperties ) { public void cacheStop() { if ( cacheEnabled ) { regionCache.clear(); - cacheProvider.stop(); + regionFactory.stop(); } } /** - * Returns the underlying cache provider (implements org.hibernate.cache.CacheProvider + * Returns the underlying regionFactory (implements org.hibernate.cache.RegionFactory) * - * @return cacheProvider. + * @return regionFactory. */ - protected CacheProvider getCacheProvider() { - return cacheProvider; + protected RegionFactory getRegionFactory() { + return regionFactory; } /** @@ -246,9 +259,9 @@ public void onLogout( final IPentahoSession session ) { public boolean addCacheRegion( String region, Properties cacheProperties ) { boolean returnValue = false; - if ( cacheEnabled ) { + if ( checkCacheEnabled() ) { if ( !cacheEnabled( region ) ) { - Cache cache = buildCache( region, cacheProperties ); + Cache cache = (Cache) buildCache( region, HibernateUtil.getSessionFactory(), cacheProperties ); if ( cache == null ) { CacheManager.logger .error( Messages.getInstance().getString( "CacheManager.ERROR_0005_UNABLE_TO_BUILD_CACHE" ) ); //$NON-NLS-1$ @@ -260,17 +273,15 @@ public boolean addCacheRegion( String region, Properties cacheProperties ) { CacheManager.logger.warn( Messages.getInstance().getString( "CacheManager.WARN_0002_REGION_ALREADY_EXIST", region ) ); //$NON-NLS-1$ } - } else { - CacheManager.logger.warn( Messages.getInstance().getString( "CacheManager.WARN_0001_CACHE_NOT_ENABLED" ) ); //$NON-NLS-1$ } return returnValue; } public boolean addCacheRegion( String region ) { boolean returnValue = false; - if ( cacheEnabled ) { + if ( checkCacheEnabled() ) { if ( !cacheEnabled( region ) ) { - Cache cache = buildCache( region, null ); + Cache cache = (Cache) buildCache( region, HibernateUtil.getSessionFactory(), null ); if ( cache == null ) { CacheManager.logger .error( Messages.getInstance().getString( "CacheManager.ERROR_0005_UNABLE_TO_BUILD_CACHE" ) ); //$NON-NLS-1$ @@ -283,14 +294,12 @@ public boolean addCacheRegion( String region ) { "CacheManager.WARN_0002_REGION_ALREADY_EXIST", region ) ); //$NON-NLS-1$ returnValue = true; } - } else { - CacheManager.logger.warn( Messages.getInstance().getString( "CacheManager.WARN_0001_CACHE_NOT_ENABLED" ) ); //$NON-NLS-1$ } return returnValue; } public boolean addCacheRegion( String region, Cache cache ) { - if ( cacheEnabled ) { + if ( checkCacheEnabled() ) { if ( !cacheEnabled( region ) ) { regionCache.put( region, cache ); } else { @@ -298,18 +307,17 @@ public boolean addCacheRegion( String region, Cache cache ) { "CacheManager.WARN_0002_REGION_ALREADY_EXIST", region ) ); } } else { - CacheManager.logger.warn( Messages.getInstance().getString( "CacheManager.WARN_0001_CACHE_NOT_ENABLED" ) ); return false; } return true; } public void clearRegionCache( String region ) { - if ( cacheEnabled ) { + if ( checkCacheEnabled() ) { Cache cache = regionCache.get( region ); if ( cache != null ) { try { - cache.clear(); + cache.evictAll(); } catch ( CacheException e ) { CacheManager.logger.error( Messages.getInstance().getString( "CacheManager.ERROR_0006_CACHE_EXCEPTION", e.getLocalizedMessage() ) ); //$NON-NLS-1$ @@ -318,61 +326,43 @@ public void clearRegionCache( String region ) { CacheManager.logger.info( Messages.getInstance().getString( "CacheManager.INFO_0001_CACHE_DOES_NOT_EXIST", region ) ); //$NON-NLS-1$ } - } else { - CacheManager.logger.warn( Messages.getInstance().getString( "CacheManager.WARN_0001_CACHE_NOT_ENABLED" ) ); //$NON-NLS-1$ } } public void removeRegionCache( String region ) { - if ( cacheEnabled ) { - if ( cacheEnabled( region ) ) { - clearRegionCache( region ); - } else { - CacheManager.logger.info( Messages.getInstance().getString( - "CacheManager.INFO_0001_CACHE_DOES_NOT_EXIST", region ) ); //$NON-NLS-1$ - } - } else { - CacheManager.logger.warn( Messages.getInstance().getString( "CacheManager.WARN_0001_CACHE_NOT_ENABLED" ) ); //$NON-NLS-1$ + if ( checkRegionEnabled( region ) ) { + clearRegionCache( region ); } } public void putInRegionCache( String region, Object key, Object value ) { - if ( cacheEnabled ) { - if ( cacheEnabled( region ) ) { - Cache cache = regionCache.get( region ); - cache.put( key, value ); - } else { - CacheManager.logger.warn( Messages.getInstance().getString( - "CacheManager.WARN_0003_REGION_DOES_NOT_EXIST", region ) ); //$NON-NLS-1$ + if ( checkRegionEnabled( region ) ) { + HvCache hvcache = (HvCache) regionCache.get( region ); //This is our LastModifiedCache or CarteStatusCache + try ( SessionImpl session = (SessionImpl) hvcache.getSessionFactory().openSession() ) { + hvcache.getDirectAccessRegion().putIntoCache( key, value, session ); } - } else { - CacheManager.logger.warn( Messages.getInstance().getString( "CacheManager.WARN_0001_CACHE_NOT_ENABLED" ) ); //$NON-NLS-1$ } } public Object getFromRegionCache( String region, Object key ) { Object returnValue = null; - if ( cacheEnabled ) { - Cache cache = regionCache.get( region ); - if ( cacheEnabled( region ) ) { - returnValue = cache.get( key ); - } else { - CacheManager.logger.warn( Messages.getInstance().getString( - "CacheManager.WARN_0003_REGION_DOES_NOT_EXIST", region ) ); //$NON-NLS-1$ + if ( checkRegionEnabled( region ) ) { + HvCache hvcache = (HvCache) regionCache.get( region ); //This is our LastModifiedCache or CarteStatusCache + try ( SessionImpl session = (SessionImpl) hvcache.getSessionFactory().openSession() ) { + + return ( (HvCache) hvcache ).getDirectAccessRegion().getFromCache( key, session ); } - } else { - CacheManager.logger.warn( Messages.getInstance().getString( "CacheManager.WARN_0001_CACHE_NOT_ENABLED" ) ); //$NON-NLS-1$ } - return returnValue; } public List getAllValuesFromRegionCache( String region ) { List list = new ArrayList(); - if ( cacheEnabled ) { - Cache cache = regionCache.get( region ); - if ( cacheEnabled( region ) ) { - Map cacheMap = cache.toMap(); + if ( checkRegionEnabled( region ) ) { + HvCache hvcache = (HvCache) regionCache.get( region ); //This is our LastModifiedCache or CarteStatusCache + try ( SessionImpl session = (SessionImpl) hvcache.getSessionFactory().openSession() ) { + Ehcache ehcache = hvcache.getStorageAccess().getCache(); + Map cacheMap = ehcache.getAll( ehcache.getKeys() ); if ( cacheMap != null ) { Iterator it = cacheMap.entrySet().iterator(); while ( it.hasNext() ) { @@ -381,55 +371,38 @@ public List getAllValuesFromRegionCache( String region ) { } } } - } else { - CacheManager.logger.warn( Messages.getInstance().getString( "CacheManager.WARN_0001_CACHE_NOT_ENABLED" ) ); //$NON-NLS-1$ } return list; } public Set getAllKeysFromRegionCache( String region ) { - Set set = null; - if ( cacheEnabled ) { - Cache cache = regionCache.get( region ); - if ( cacheEnabled( region ) ) { - Map cacheMap = cache.toMap(); - if ( cacheMap != null ) { - set = cacheMap.keySet(); - } + if ( checkRegionEnabled( region ) ) { + HvCache hvcache = (HvCache) regionCache.get( region ); //This is our LastModifiedCache or CarteStatusCache + try ( SessionImpl session = (SessionImpl) hvcache.getSessionFactory().openSession() ) { + return hvcache.getAllKeys(); } - } else { - CacheManager.logger.warn( Messages.getInstance().getString( "CacheManager.WARN_0001_CACHE_NOT_ENABLED" ) ); //$NON-NLS-1$ } - return set; + return null; } public Set getAllEntriesFromRegionCache( String region ) { - Set set = null; - if ( cacheEnabled ) { - Cache cache = regionCache.get( region ); - if ( cacheEnabled( region ) ) { - Map cacheMap = cache.toMap(); - if ( cacheMap != null ) { - set = cacheMap.entrySet(); - } + if ( checkRegionEnabled( region ) ) { + HvCache hvcache = (HvCache) regionCache.get( region ); //This is our LastModifiedCache or CarteStatusCache + try ( SessionImpl session = (SessionImpl) hvcache.getSessionFactory().openSession() ) { + Ehcache ehcache = hvcache.getStorageAccess().getCache(); + return ehcache.getAll( ehcache.getKeys() ).values().stream().collect( Collectors.toSet() ); } - } else { - CacheManager.logger.warn( Messages.getInstance().getString( "CacheManager.WARN_0001_CACHE_NOT_ENABLED" ) ); //$NON-NLS-1$ } - return set; + return null; } public void removeFromRegionCache( String region, Object key ) { - if ( cacheEnabled ) { - Cache cache = regionCache.get( region ); - if ( cacheEnabled( region ) ) { - cache.remove( key ); - } else { - CacheManager.logger.warn( Messages.getInstance().getString( - "CacheManager.WARN_0003_REGION_DOES_NOT_EXIST", region ) ); //$NON-NLS-1$ - } + if ( checkRegionEnabled( region ) ) { + HvCache hvcache = (HvCache) regionCache.get( region ); + hvcache.evictEntityData( (String) key ); } else { - CacheManager.logger.warn( Messages.getInstance().getString( "CacheManager.WARN_0001_CACHE_NOT_ENABLED" ) ); //$NON-NLS-1$ + CacheManager.logger.warn( Messages.getInstance().getString( + "CacheManager.WARN_0003_REGION_DOES_NOT_EXIST", region ) ); //$NON-NLS-1$ } } @@ -445,7 +418,7 @@ public void clearCache() { String key = ( entry.getKey() != null ) ? entry.getKey().toString() : ""; //$NON-NLS-1$ if ( key != null ) { Cache cache = regionCache.get( key ); - cache.clear(); + cache.evictAll(); } } } @@ -461,16 +434,16 @@ public Object getFromSessionCache( IPentahoSession session, String key ) { public void killSessionCache( IPentahoSession session ) { if ( cacheEnabled ) { - Cache cache = regionCache.get( SESSION ); - if ( cache != null ) { - Map cacheMap = cache.toMap(); + HvCache hvcache = (HvCache) regionCache.get( SESSION ); + if ( hvcache != null ) { + Ehcache ehcache = hvcache.getStorageAccess().getCache(); + Map cacheMap = ehcache.getAll( ehcache.getKeys() ); if ( cacheMap != null ) { - Set set = cacheMap.keySet(); - Iterator it = set.iterator(); + Iterator it = cacheMap.keySet().iterator(); while ( it.hasNext() ) { String key = (String) it.next(); if ( key.indexOf( session.getId() ) >= 0 ) { - cache.remove( key ); + hvcache.evictEntityData( key ); } } } @@ -508,10 +481,11 @@ private String getCorrectedKey( final IPentahoSession session, final String key } } - private LastModifiedCache buildCache( String key, Properties cacheProperties ) { - if ( getCacheProvider() != null ) { - Cache cache = getCacheProvider().buildCache( key, cacheProperties ); - LastModifiedCache lmCache = new LastModifiedCache( cache ); + private LastModifiedCache buildCache( String key, SessionFactory sessionFactory, Properties cacheProperties ) { + if ( getRegionFactory() != null ) { + HvTimestampsRegion timestampsRegion = (HvTimestampsRegion ) + getRegionFactory().buildTimestampsRegion( key, (SessionFactoryImplementor) sessionFactory ); + LastModifiedCache lmCache = new LastModifiedCache( timestampsRegion, sessionFactory ); if ( cacheExpirationRegistry != null ) { cacheExpirationRegistry.register( lmCache ); } else { @@ -526,12 +500,13 @@ private LastModifiedCache buildCache( String key, Properties cacheProperties ) { @Override public long getElementCountInRegionCache( String region ) { - if ( cacheEnabled ) { - Cache cache = regionCache.get( region ); - if ( cache != null ) { + if ( checkRegionEnabled( region ) ) { + HvCache hvcache = (HvCache) regionCache.get( region ); + Ehcache ehcache = hvcache.getStorageAccess().getCache(); + if ( hvcache != null ) { try { - long memCnt = cache.getElementCountInMemory(); - long discCnt = cache.getElementCountOnDisk(); + long memCnt = ehcache.getStatistics().getMemoryStoreObjectCount(); + long discCnt = ehcache.getStatistics().getDiskStoreObjectCount(); return memCnt + discCnt; } catch ( Exception ignored ) { return -1; @@ -553,4 +528,38 @@ public long getElementCountInSessionCache() { public long getElementCountInGlobalCache() { return getElementCountInRegionCache( GLOBAL ); } + + private boolean checkRegionEnabled( String region ) { + if ( checkCacheEnabled() ) { + if ( cacheEnabled( region ) ) { + return true; + } else { + CacheManager.logger.warn( Messages.getInstance().getString( + "CacheManager.WARN_0003_REGION_DOES_NOT_EXIST", region ) ); + } + } + return false; + } + + private boolean checkCacheEnabled() { + if ( cacheEnabled ) { + return true; + } else { + CacheManager.logger.warn( + Messages.getInstance().getString( "CacheManager.WARN_0001_CACHE_NOT_ENABLED" ) ); //$NON-NLS-1$ + } + return false; + } + + private boolean checkRegionNonExistent( String region ) { + if ( checkCacheEnabled() ) { + if ( cacheEnabled( region ) ) { + CacheManager.logger.warn( Messages.getInstance().getString( + "CacheManager.WARN_0002_REGION_ALREADY_EXIST", region ) ); //$NON-NLS-1$ + } else { + return true; + } + } + return false; + } } diff --git a/extensions/src/main/java/org/pentaho/platform/plugin/services/cache/HvCache.java b/extensions/src/main/java/org/pentaho/platform/plugin/services/cache/HvCache.java new file mode 100644 index 00000000000..4cb7eca7a47 --- /dev/null +++ b/extensions/src/main/java/org/pentaho/platform/plugin/services/cache/HvCache.java @@ -0,0 +1,54 @@ +/*! + * + * This program is free software; you can redistribute it and/or modify it under the + * terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software + * Foundation. + * + * You should have received a copy of the GNU Lesser General Public License along with this + * program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html + * or from the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU Lesser General Public License for more details. + * + * + * Copyright (c) 2002-2023 Hitachi Vantara. All rights reserved. + * + */ +package org.pentaho.platform.plugin.services.cache; + +import net.sf.ehcache.Ehcache; +import org.hibernate.Cache; +import org.hibernate.cache.ehcache.internal.StorageAccessImpl; +import org.hibernate.cache.spi.DirectAccessRegion; + +import java.util.Set; + +public interface HvCache extends Cache { + /** + * Return all keys for the region + * @return + */ + Set getAllKeys( ); + + /** + * Return built in cache access + * @return + */ + DirectAccessRegion getDirectAccessRegion(); + + /** + * Return the object that allows direct storage access + * @return + */ + StorageAccessImpl getStorageAccess(); + + /** + * Exposes the underlaying EhCache associated with this HvCache + * @return The EhCache + */ + Ehcache getCache(); + +} diff --git a/extensions/src/main/java/org/pentaho/platform/plugin/services/cache/HvCacheRegionFactory.java b/extensions/src/main/java/org/pentaho/platform/plugin/services/cache/HvCacheRegionFactory.java new file mode 100644 index 00000000000..c77781773f7 --- /dev/null +++ b/extensions/src/main/java/org/pentaho/platform/plugin/services/cache/HvCacheRegionFactory.java @@ -0,0 +1,34 @@ +/*! + * + * This program is free software; you can redistribute it and/or modify it under the + * terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software + * Foundation. + * + * You should have received a copy of the GNU Lesser General Public License along with this + * program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html + * or from the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU Lesser General Public License for more details. + * + * + * Copyright (c) 2002-2023 Hitachi Vantara. All rights reserved. + * + */ +package org.pentaho.platform.plugin.services.cache; + +import org.hibernate.cache.ehcache.internal.SingletonEhcacheRegionFactory; +import org.hibernate.cache.spi.TimestampsRegion; +import org.hibernate.engine.spi.SessionFactoryImplementor; + +public class HvCacheRegionFactory extends SingletonEhcacheRegionFactory { + @Override + public TimestampsRegion buildTimestampsRegion( + String regionName, SessionFactoryImplementor sessionFactory) { + verifyStarted(); + return new HvTimestampsRegion( + regionName, this, createTimestampsRegionStorageAccess( regionName, sessionFactory ) ); + } +} diff --git a/extensions/src/main/java/org/pentaho/platform/plugin/services/cache/HvTimestampsRegion.java b/extensions/src/main/java/org/pentaho/platform/plugin/services/cache/HvTimestampsRegion.java new file mode 100644 index 00000000000..00307d58f30 --- /dev/null +++ b/extensions/src/main/java/org/pentaho/platform/plugin/services/cache/HvTimestampsRegion.java @@ -0,0 +1,37 @@ +/*! + * + * This program is free software; you can redistribute it and/or modify it under the + * terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software + * Foundation. + * + * You should have received a copy of the GNU Lesser General Public License along with this + * program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html + * or from the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU Lesser General Public License for more details. + * + * + * Copyright (c) 2002-2023 Hitachi Vantara. All rights reserved. + * + */ +package org.pentaho.platform.plugin.services.cache; + +import org.hibernate.cache.ehcache.internal.StorageAccessImpl; +import org.hibernate.cache.spi.RegionFactory; +import org.hibernate.cache.spi.support.StorageAccess; +import org.hibernate.cache.spi.support.TimestampsRegionTemplate; + +public class HvTimestampsRegion extends TimestampsRegionTemplate { + StorageAccess storageAccess; + + public HvTimestampsRegion( String name, RegionFactory regionFactory, StorageAccess storageAccess) { + super( name, regionFactory, storageAccess ); + } + + public StorageAccessImpl getStorageAccess() { + return (StorageAccessImpl) super.getStorageAccess(); + } +} diff --git a/extensions/src/main/java/org/pentaho/platform/plugin/services/cache/LastModifiedCache.java b/extensions/src/main/java/org/pentaho/platform/plugin/services/cache/LastModifiedCache.java index c68e8a1437b..ecbb121b913 100644 --- a/extensions/src/main/java/org/pentaho/platform/plugin/services/cache/LastModifiedCache.java +++ b/extensions/src/main/java/org/pentaho/platform/plugin/services/cache/LastModifiedCache.java @@ -14,41 +14,73 @@ * See the GNU Lesser General Public License for more details. * * - * Copyright (c) 2002-2018 Hitachi Vantara. All rights reserved. + * Copyright (c) 2002-2023 Hitachi Vantara. All rights reserved. * */ - package org.pentaho.platform.plugin.services.cache; -import org.hibernate.cache.Cache; -import org.hibernate.cache.CacheException; +import net.sf.ehcache.Ehcache; +import org.apache.commons.lang3.NotImplementedException; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.hibernate.MappingException; +import org.hibernate.SessionFactory; +import org.hibernate.cache.ehcache.internal.StorageAccessImpl; +import org.hibernate.cache.spi.DirectAccessRegion; +import org.hibernate.cache.spi.RegionFactory; +import org.hibernate.cache.spi.access.EntityDataAccess; +import org.hibernate.cache.spi.access.NaturalIdDataAccess; +import org.hibernate.engine.spi.SessionFactoryImplementor; +import org.hibernate.metamodel.model.domain.NavigableRole; +import org.hibernate.metamodel.spi.MetamodelImplementor; +import org.hibernate.persister.collection.CollectionPersister; +import org.hibernate.persister.entity.EntityPersister; +import org.hibernate.pretty.MessageHelper; import org.pentaho.platform.api.cache.ILastModifiedCacheItem; +import javax.persistence.PersistenceException; +import java.io.Serializable; import java.util.Date; -import java.util.Map; +import java.util.HashSet; +import java.util.Set; /** * User: rfellows Date: 10/25/11 Time: 3:53 PM */ -public class LastModifiedCache implements ILastModifiedCacheItem, Cache { - private Cache cache; +public class LastModifiedCache implements ILastModifiedCacheItem, HvCache { + private DirectAccessRegion directAccessRegion; //Should be an instanceof HvTimestampsRegion + private SessionFactoryImplementor sessionFactory; + private RegionFactory regionFactory; + private long lastModified; + protected static final Log LOGGER = LogFactory.getLog( LastModifiedCache.class ); - public LastModifiedCache( Cache cache ) { - this.cache = cache; + public LastModifiedCache( DirectAccessRegion directAccessRegion, SessionFactory sessionFactory ) { + setInstanceVariables( directAccessRegion, sessionFactory ); setLastModified(); } - public LastModifiedCache( Cache cache, long lastModified ) { - this.cache = cache; + public LastModifiedCache( DirectAccessRegion directAccessRegion, SessionFactory sessionFactory, long lastModified ) { + setInstanceVariables( directAccessRegion, sessionFactory ); this.lastModified = lastModified; } + private void setInstanceVariables( DirectAccessRegion directAccessRegion, SessionFactory sessionFactory ) { + this.directAccessRegion = directAccessRegion; + this.sessionFactory = (SessionFactoryImplementor) sessionFactory; + this.regionFactory = + getSessionFactory().getSessionFactoryOptions().getServiceRegistry().getService( RegionFactory.class ); + } + @Override public long getLastModified() { return lastModified; } + @Override public String getCacheKey() { + return directAccessRegion.getName(); + } + public void setLastModified( long lastModified ) { this.lastModified = lastModified; } @@ -57,97 +89,197 @@ protected void setLastModified() { this.lastModified = new Date().getTime(); } - @Override - public String getCacheKey() { - return cache.getRegionName(); + @Override public SessionFactoryImplementor getSessionFactory() { + return sessionFactory; } - @Override - public Object read( Object o ) throws CacheException { - return cache.read( o ); + @Override public boolean containsEntity( Class entityClass, Serializable identifier ) { + return this.containsEntity(entityClass.getName(), identifier); } - @Override - public Object get( Object o ) throws CacheException { - return cache.get( o ); + @Override public boolean containsEntity( String entityName, Serializable identifier ) { + EntityPersister entityDescriptor = this.sessionFactory.getMetamodel().entityPersister(entityName); + EntityDataAccess cacheAccess = entityDescriptor.getCacheAccessStrategy(); + if (cacheAccess == null) { + return false; + } else { + Object key = cacheAccess.generateCacheKey(identifier, entityDescriptor, this.sessionFactory, (String) null); + return cacheAccess.contains(key); + } } - @Override - public void put( Object o, Object o1 ) throws CacheException { - cache.put( o, o1 ); - setLastModified(); + @Override public void evictEntityData( Class entityClass, Serializable identifier ) { + evictEntityData( entityClass.getName(), identifier ); } - @Override - public void update( Object o, Object o1 ) throws CacheException { - cache.update( o, o1 ); - setLastModified(); + @Override public void evictEntityData( String entityName, Serializable identifier ) { + final EntityPersister entityDescriptor = sessionFactory.getMetamodel().entityPersister( entityName ); + final EntityDataAccess cacheAccess = entityDescriptor.getCacheAccessStrategy(); + if ( cacheAccess == null ) { + return; + } + + if ( LOGGER.isDebugEnabled() ) { + LOGGER.debug( String.format( "Evicting second-level cache: %s", + MessageHelper.infoString( entityDescriptor, identifier, sessionFactory ) ) ); + } + + final Object key = cacheAccess.generateCacheKey( identifier, entityDescriptor, sessionFactory, null ); + cacheAccess.evict( key ); } - @Override - public void remove( Object o ) throws CacheException { - cache.remove( o ); - setLastModified(); + @Override public void evictEntityData( Class entityClass ) { + evictEntityData( entityClass.getName() ); } - @Override - public void clear() throws CacheException { - cache.clear(); - setLastModified(); + @Override public void evictEntityData( String entityName ) { + try { + evictEntityData( getSessionFactory().getMetamodel().entityPersister( entityName ) ); + } catch ( MappingException e) { + //Nothing to do if the entry is not there. + } } - @Override - public void destroy() throws CacheException { - cache.destroy(); - setLastModified(); + @Override public void evictEntityData() { + sessionFactory.getMetamodel().entityPersisters().values().forEach( this::evictEntityData ); } @Override - public void lock( Object o ) throws CacheException { - cache.lock( o ); + public void evictNaturalIdData( Class entityClass ) { + throwNotImplemented(); } @Override - public void unlock( Object o ) throws CacheException { - cache.unlock( o ); + public void evictNaturalIdData( String entityName ) { + throwNotImplemented(); } @Override - public long nextTimestamp() { - return cache.nextTimestamp(); + public void evictNaturalIdData() { + throwNotImplemented(); } - @Override - public int getTimeout() { - return cache.getTimeout(); + private void evictNaturalIdData(NavigableRole rootEntityRole, NaturalIdDataAccess cacheAccess) { + throwNotImplemented(); } @Override - public String getRegionName() { - return cache.getRegionName(); + public boolean containsCollection(String role, Serializable ownerIdentifier) { + throwNotImplemented(); + return false; } @Override - public long getSizeInMemory() { - return cache.getSizeInMemory(); - } + public void evictCollectionData(String role, Serializable ownerIdentifier) { + throwNotImplemented(); + } @Override - public long getElementCountInMemory() { - return cache.getElementCountInMemory(); + public void evictCollectionData(String role) { + throwNotImplemented(); + } + + private void evictCollectionData( CollectionPersister collectionDescriptor) { + throwNotImplemented(); + } + + @Override public void evictCollectionData() { + throwNotImplemented(); + } + + @Override public boolean containsQuery( String regionName ) { + throwNotImplemented(); + return false; + } + + @Override public void evictDefaultQueryRegion() { + throwNotImplemented(); + } + + @Override public void evictQueryRegion( String regionName ) { + throwNotImplemented(); + } + + @Override public void evictQueryRegions() { + throwNotImplemented(); + } + + @Override public void evictRegion( String regionName ) { + throwNotImplemented(); } @Override - public long getElementCountOnDisk() { - return cache.getElementCountOnDisk(); + public boolean contains(Class cls, Object primaryKey) { + // JPA + return containsEntity( cls, (Serializable) primaryKey ); } @Override - public Map toMap() { - try { - return cache.toMap(); - } catch ( Exception e ) { - return null; + public void evict(Class cls, Object primaryKey) { + // JPA call + evictEntityData( cls, (Serializable) primaryKey ); + } + + @Override public void evict( Class aClass ) { + // JPA + evictEntityData( aClass ); + } + + @SuppressWarnings("unchecked") + public T unwrap(Class cls) { + if ( org.hibernate.Cache.class.isAssignableFrom( cls ) ) { + return (T) this; + } + + if ( RegionFactory.class.isAssignableFrom( cls ) ) { + return (T) regionFactory; + } + + throw new PersistenceException( "Hibernate cannot unwrap Cache as " + cls.getName() ); + } + + @Override public Set getAllKeys() { + Ehcache ehcache = getStorageAccess().getCache(); + return new HashSet( ehcache.getKeys() ); + } + + @Override public DirectAccessRegion getDirectAccessRegion() { + return directAccessRegion; + } + + private void evictEntityData( EntityPersister entityDescriptor ) { + EntityPersister rootEntityDescriptor = entityDescriptor; + if ( entityDescriptor.isInherited() + && !entityDescriptor.getEntityName().equals( entityDescriptor.getRootEntityName() ) ) { + rootEntityDescriptor = ( (MetamodelImplementor) getSessionFactory().getMetamodel() ).locateEntityPersister( + entityDescriptor.getRootEntityName() ); + } + + evictEntityData( rootEntityDescriptor.getNavigableRole(), rootEntityDescriptor.getCacheAccessStrategy() ); + + } + + private void evictEntityData( NavigableRole navigableRole, EntityDataAccess cacheAccess) { + if ( cacheAccess == null ) { + return; } + + if ( LOGGER.isDebugEnabled() ) { + LOGGER.debug( String.format( "Evicting entity cache: %s", navigableRole.getFullPath() ) ); + } + + cacheAccess.evictAll(); + } + + @Override public StorageAccessImpl getStorageAccess(){ + return ( (HvTimestampsRegion) directAccessRegion ).getStorageAccess(); + } + + @Override public Ehcache getCache() { + return getStorageAccess().getCache(); + } + + private void throwNotImplemented(){ + throw new NotImplementedException( "Method not Implemented with upgrade to hibernate 5.4.24"); } } diff --git a/extensions/src/test/resources/cache-solution/system/hibernate/postgresql.hibernate.cfg.xml b/extensions/src/test/resources/cache-solution/system/hibernate/postgresql.hibernate.cfg.xml index fcdc9d00821..edc99106119 100644 --- a/extensions/src/test/resources/cache-solution/system/hibernate/postgresql.hibernate.cfg.xml +++ b/extensions/src/test/resources/cache-solution/system/hibernate/postgresql.hibernate.cfg.xml @@ -5,7 +5,7 @@ - net.sf.ehcache.hibernate.SingletonEhCacheProvider + net.sf.ehcache.hibernate.SingletonEhcacheProvider true true diff --git a/extensions/src/test/resources/web-solution/system/pentaho.xml b/extensions/src/test/resources/web-solution/system/pentaho.xml index ebe96bf28eb..d3ef20e6bbd 100644 --- a/extensions/src/test/resources/web-solution/system/pentaho.xml +++ b/extensions/src/test/resources/web-solution/system/pentaho.xml @@ -28,7 +28,7 @@ --> - net.sf.ehcache.hibernate.SingletonEhCacheProvider + org.hibernate.cache.EhCacheProvider pentahoCache 4.2.3 + 3.5.3.Final + 1.6.0 + 2.2 + 1.12.16 diff --git a/repository/pom.xml b/repository/pom.xml index baba4417700..867c202d72a 100644 --- a/repository/pom.xml +++ b/repository/pom.xml @@ -941,6 +941,54 @@ tests test + + org.jboss.logging + jboss-logging + ${jboss-logging.version} + compile + + + * + * + + + + + com.fasterxml + classmate + ${classmate.version} + compile + + + * + * + + + + + javax.persistence + javax.persistence-api + ${javax.persistence-api.version} + compile + + + * + * + + + + + net.bytebuddy + byte-buddy + ${byte-buddy.version} + compile + + + * + * + + + ${project.artifactId}-${project.version} diff --git a/repository/src/main/java/org/pentaho/platform/repository/hibernate/HibernateLoadEventListener.java b/repository/src/main/java/org/pentaho/platform/repository/hibernate/HibernateLoadEventListener.java index f6b920e284d..962388f07d9 100644 --- a/repository/src/main/java/org/pentaho/platform/repository/hibernate/HibernateLoadEventListener.java +++ b/repository/src/main/java/org/pentaho/platform/repository/hibernate/HibernateLoadEventListener.java @@ -14,16 +14,16 @@ * See the GNU General Public License for more details. * * - * Copyright (c) 2002-2018 Hitachi Vantara. All rights reserved. + * Copyright (c) 2002-2023 Hitachi Vantara. All rights reserved. * */ package org.pentaho.platform.repository.hibernate; import org.hibernate.HibernateException; -import org.hibernate.event.LoadEvent; -import org.hibernate.event.LoadEventListener; -import org.hibernate.event.def.DefaultLoadEventListener; +import org.hibernate.event.spi.LoadEvent; +import org.hibernate.event.internal.DefaultLoadEventListener; +import org.hibernate.event.spi.LoadEventListener; import org.pentaho.platform.api.repository.IRuntimeElement; public class HibernateLoadEventListener extends DefaultLoadEventListener { diff --git a/repository/src/main/java/org/pentaho/platform/repository/hibernate/HibernateUtil.java b/repository/src/main/java/org/pentaho/platform/repository/hibernate/HibernateUtil.java index ca84c82bf0d..692f65a656f 100644 --- a/repository/src/main/java/org/pentaho/platform/repository/hibernate/HibernateUtil.java +++ b/repository/src/main/java/org/pentaho/platform/repository/hibernate/HibernateUtil.java @@ -14,7 +14,7 @@ * See the GNU General Public License for more details. * * - * Copyright (c) 2002-2018 Hitachi Vantara. All rights reserved. + * Copyright (c) 2002-2023 Hitachi Vantara. All rights reserved. * */ @@ -42,7 +42,6 @@ import org.pentaho.platform.api.repository.RepositoryException; import org.pentaho.platform.engine.core.system.PentahoSystem; import org.pentaho.platform.engine.services.connection.datasource.dbcp.JndiDatasourceService; -import org.pentaho.platform.engine.services.solution.PentahoEntityResolver; import org.pentaho.platform.repository.messages.Messages; import org.pentaho.platform.util.StringUtil; import org.pentaho.platform.util.messages.MessageUtil; @@ -56,6 +55,9 @@ import java.util.Properties; import java.util.StringTokenizer; +import static org.hibernate.resource.transaction.spi.TransactionStatus.COMMITTED; +import static org.hibernate.resource.transaction.spi.TransactionStatus.ROLLED_BACK; + public class HibernateUtil implements IPentahoSystemEntryPoint, IPentahoSystemExitPoint { private static final Log log = LogFactory.getLog( HibernateUtil.class ); @@ -130,8 +132,9 @@ protected static boolean initialize() { try { HibernateUtil.configuration = new Configuration(); - HibernateUtil.configuration.setEntityResolver( new PentahoEntityResolver() ); - HibernateUtil.configuration.setListener( "load", new HibernateLoadEventListener() ); //$NON-NLS-1$ + // Used to have "HibernateUtil.configuration.setEntityResolver( new PentahoEntityResolver() );" here. + // There was no replacement for it during upgrade to 5.4.24. + // See jaxb.internal.stax.LocalXmlResourceResolver#resolveEntity if ( hibernateConfigurationFile != null ) { String configPath = applicationContext.getSolutionPath( hibernateConfigurationFile ); @@ -152,7 +155,6 @@ protected static boolean initialize() { } String dsName = HibernateUtil.configuration.getProperty( "connection.datasource" ); //$NON-NLS-1$ if ( ( dsName != null ) && dsName.toUpperCase().endsWith( "HIBERNATE" ) ) { //$NON-NLS-1$ - // IDBDatasourceService datasourceService = (IDBDatasourceService) PentahoSystem.getObjectFactory().getObject("IDBDatasourceService",null); //$NON-NLS-1$ IDBDatasourceService datasourceService = getDatasourceService(); String actualDSName = datasourceService.getDSBoundName( "Hibernate" ); //$NON-NLS-1$ HibernateUtil.configuration.setProperty( "hibernate.connection.datasource", actualDSName ); //$NON-NLS-1$ @@ -370,7 +372,7 @@ public static Session getSession() throws RepositoryException { HibernateUtil.log .debug( Messages.getInstance().getString( "HIBUTIL.DEBUG_USING_INTERCEPTOR" ) + HibernateUtil.getInterceptor().getClass() ); //$NON-NLS-1$ } - s = HibernateUtil.getSessionFactory().openSession( HibernateUtil.getInterceptor() ); + s = HibernateUtil.getSessionFactory().openSession(); } else { s = HibernateUtil.getSessionFactory().openSession(); } @@ -438,11 +440,9 @@ public static void beginTransaction() throws RepositoryException { * Commit the database transaction. */ public static void commitTransaction() throws RepositoryException { - // Boolean needed = (Boolean)commitNeeded.get(); - // if (needed.booleanValue()){ Transaction tx = (Transaction) HibernateUtil.threadTransaction.get(); try { - if ( ( tx != null ) && !tx.wasCommitted() && !tx.wasRolledBack() ) { + if ( ( tx != null ) && !tx.getStatus().isOneOf( COMMITTED ) && !tx.getStatus().isOneOf( ROLLED_BACK) ) { if ( HibernateUtil.debug ) { HibernateUtil.log.debug( Messages.getInstance().getString( "HIBUTIL.DEBUG_COMMIT_TRANS" ) ); //$NON-NLS-1$ } @@ -458,14 +458,9 @@ public static void commitTransaction() throws RepositoryException { if ( ex instanceof ConstraintViolationException ) { throw new RepositoryException( Messages.getInstance().getErrorString( "HIBUTIL.ERROR_0008_COMMIT_TRANS" ), ex ); //$NON-NLS-1$ } - // throw new - // RepositoryException(Messages.getInstance().getErrorString("HIBUTIL.ERROR_0008_COMMIT_TRANS"), - // ex); //$NON-NLS-1$ } finally { HibernateUtil.threadTransaction.set( null ); } - // } - // commitNeeded.set(Boolean.FALSE); } /** @@ -475,7 +470,7 @@ public static void rollbackTransaction() throws RepositoryException { Transaction tx = (Transaction) HibernateUtil.threadTransaction.get(); try { HibernateUtil.threadTransaction.set( null ); - if ( ( tx != null ) && !tx.wasCommitted() && !tx.wasRolledBack() ) { + if ( ( tx != null ) && !tx.getStatus().isOneOf( COMMITTED ) && !tx.getStatus().isOneOf( ROLLED_BACK) ) { if ( HibernateUtil.debug ) { HibernateUtil.log.debug( Messages.getInstance().getString( "HIBUTIL.DEBUG_ROLLBACK" ) ); //$NON-NLS-1$ } diff --git a/repository/src/main/java/org/pentaho/platform/repository/hibernate/usertypes/BlobUserType.java b/repository/src/main/java/org/pentaho/platform/repository/hibernate/usertypes/BlobUserType.java index 90612bab57f..3dd7f6cca9e 100644 --- a/repository/src/main/java/org/pentaho/platform/repository/hibernate/usertypes/BlobUserType.java +++ b/repository/src/main/java/org/pentaho/platform/repository/hibernate/usertypes/BlobUserType.java @@ -14,7 +14,7 @@ * See the GNU General Public License for more details. * * - * Copyright (c) 2002-2018 Hitachi Vantara. All rights reserved. + * Copyright (c) 2002-2023 Hitachi Vantara. All rights reserved. * */ @@ -29,10 +29,10 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.hibernate.HibernateException; +import org.hibernate.engine.spi.SharedSessionContractImplementor; import org.hibernate.type.SerializationException; import org.hibernate.usertype.UserType; -import org.hibernate.util.EqualsHelper; -import org.hibernate.util.SerializationHelper; +import org.hibernate.internal.util.SerializationHelper; import org.pentaho.platform.engine.core.system.PentahoSystem; import org.pentaho.platform.repository.messages.Messages; @@ -74,7 +74,9 @@ public Class returnedClass() { * @see org.hibernate.usertype.UserType#equals(java.lang.Object, java.lang.Object) */ public boolean equals( final Object arg0, final Object arg1 ) throws HibernateException { - return EqualsHelper.equals( arg0, arg1 ); + //EqualsHelper removed after hibernate-core-5.3.1.Final.jar maybe just return equals( arg0, arg1 ); + //return EqualsHelper.equals( arg0, arg1 ); + return equals( arg0, arg1 ); } /* @@ -86,6 +88,18 @@ public int hashCode( final Object arg0 ) throws HibernateException { return arg0.hashCode(); } + @Override + public Object nullSafeGet( ResultSet rs, String[] names, SharedSessionContractImplementor session, Object owner ) + throws HibernateException, SQLException { + return null; + } + + @Override + public void nullSafeSet( PreparedStatement st, Object value, int index, SharedSessionContractImplementor session ) + throws HibernateException, SQLException { + + } + /* * (non-Javadoc) * diff --git a/repository/src/main/java/org/pentaho/platform/repository/hibernate/usertypes/BlobtoByteArrayUserType.java b/repository/src/main/java/org/pentaho/platform/repository/hibernate/usertypes/BlobtoByteArrayUserType.java index 56f9f376436..11f6b7c4060 100644 --- a/repository/src/main/java/org/pentaho/platform/repository/hibernate/usertypes/BlobtoByteArrayUserType.java +++ b/repository/src/main/java/org/pentaho/platform/repository/hibernate/usertypes/BlobtoByteArrayUserType.java @@ -14,7 +14,7 @@ * See the GNU General Public License for more details. * * - * Copyright (c) 2002-2018 Hitachi Vantara. All rights reserved. + * Copyright (c) 2002-2023 Hitachi Vantara. All rights reserved. * */ @@ -29,6 +29,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.hibernate.HibernateException; +import org.hibernate.engine.spi.SharedSessionContractImplementor; import org.hibernate.type.SerializationException; import org.hibernate.usertype.UserType; import org.pentaho.platform.repository.messages.Messages; @@ -81,6 +82,18 @@ public int hashCode( final Object arg0 ) throws HibernateException { return arg0.hashCode(); } + @Override + public Object nullSafeGet( ResultSet rs, String[] names, SharedSessionContractImplementor session, Object owner ) + throws HibernateException, SQLException { + return null; + } + + @Override + public void nullSafeSet( PreparedStatement st, Object value, int index, SharedSessionContractImplementor session ) + throws HibernateException, SQLException { + + } + /* * (non-Javadoc) * diff --git a/repository/src/main/java/org/pentaho/platform/repository/hibernate/usertypes/EmptyStringUserType.java b/repository/src/main/java/org/pentaho/platform/repository/hibernate/usertypes/EmptyStringUserType.java index ae7e9880809..d6270a94547 100644 --- a/repository/src/main/java/org/pentaho/platform/repository/hibernate/usertypes/EmptyStringUserType.java +++ b/repository/src/main/java/org/pentaho/platform/repository/hibernate/usertypes/EmptyStringUserType.java @@ -14,7 +14,7 @@ * See the GNU General Public License for more details. * * - * Copyright (c) 2002-2018 Hitachi Vantara. All rights reserved. + * Copyright (c) 2002-2023 Hitachi Vantara. All rights reserved. * */ @@ -22,10 +22,10 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.hibernate.Hibernate; import org.hibernate.HibernateException; +import org.hibernate.engine.spi.SharedSessionContractImplementor; +import org.hibernate.type.StandardBasicTypes; import org.hibernate.usertype.UserType; -import org.hibernate.util.EqualsHelper; import org.pentaho.platform.engine.core.system.PentahoSystem; import org.pentaho.platform.repository.messages.Messages; @@ -69,7 +69,7 @@ public Class returnedClass() { * @see org.hibernate.usertype.UserType#equals(java.lang.Object, java.lang.Object) */ public boolean equals( final Object arg0, final Object arg1 ) throws HibernateException { - return EqualsHelper.equals( arg0, arg1 ); + return equals( arg0, arg1 ); } /* @@ -81,6 +81,18 @@ public int hashCode( final Object arg0 ) throws HibernateException { return arg0.hashCode(); } + @Override + public Object nullSafeGet( ResultSet rs, String[] names, SharedSessionContractImplementor session, Object owner ) + throws HibernateException, SQLException { + return null; + } + + @Override + public void nullSafeSet( PreparedStatement st, Object value, int index, SharedSessionContractImplementor session ) + throws HibernateException, SQLException { + + } + /* * (non-Javadoc) * @@ -91,7 +103,8 @@ public Object nullSafeGet( final ResultSet arg0, final String[] arg1, final Obje if ( EmptyStringUserType.debug ) { EmptyStringUserType.log.debug( Messages.getInstance().getString( "EMPTYSTRTYPE.DEBUG_NULL_SAFE_GET" ) ); //$NON-NLS-1$ } - String colValue = (String) Hibernate.STRING.nullSafeGet( arg0, arg1[0] ); + + String colValue = (String) StandardBasicTypes.STRING.nullSafeGet( arg0, arg1[0] , null); // _PENTAHOEMPTY_ shouldn't appear in the wild. So, check the string in // the DB for this flag, // and if it's there, then this must be an empty string. @@ -109,7 +122,8 @@ public void nullSafeSet( final PreparedStatement arg0, final Object arg1, final if ( EmptyStringUserType.debug ) { EmptyStringUserType.log.debug( Messages.getInstance().getString( "EMPTYSTRTYPE.DEBUG_NULL_SAFE_SET" ) ); //$NON-NLS-1$ } - Hibernate.STRING.nullSafeSet( arg0, ( arg1 != null ) ? ( ( ( (String) arg1 ).length() > 0 ) ? arg1 + + StandardBasicTypes.STRING.nullSafeSet( arg0, ( arg1 != null ) ? ( ( ( (String) arg1 ).length() > 0 ) ? arg1 : EmptyStringUserType.PENTAHOEMPTY ) : arg1, arg2, null ); } diff --git a/repository/src/main/java/org/pentaho/platform/repository/hibernate/usertypes/LongStringUserType.java b/repository/src/main/java/org/pentaho/platform/repository/hibernate/usertypes/LongStringUserType.java index af60ef13292..63123e91758 100644 --- a/repository/src/main/java/org/pentaho/platform/repository/hibernate/usertypes/LongStringUserType.java +++ b/repository/src/main/java/org/pentaho/platform/repository/hibernate/usertypes/LongStringUserType.java @@ -14,7 +14,7 @@ * See the GNU General Public License for more details. * * - * Copyright (c) 2002-2018 Hitachi Vantara. All rights reserved. + * Copyright (c) 2002-2023 Hitachi Vantara. All rights reserved. * */ @@ -32,6 +32,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.hibernate.HibernateException; +import org.hibernate.engine.spi.SharedSessionContractImplementor; import org.hibernate.usertype.UserType; import org.pentaho.platform.engine.core.system.PentahoSystem; import org.pentaho.platform.repository.messages.Messages; @@ -43,6 +44,8 @@ import java.sql.SQLException; import java.sql.Types; +// UserType nullSafeGet() and nullSafeSet() different signature number of arguments we would have to implement the new methods +// nullSafeGet() and nullSafeSet() public class LongStringUserType implements UserType { private static final Log log = LogFactory.getLog( LongStringUserType.class ); @@ -92,6 +95,18 @@ public int hashCode( final Object x ) throws HibernateException { return x.hashCode(); } + @Override + public Object nullSafeGet( ResultSet rs, String[] names, SharedSessionContractImplementor session, Object owner ) + throws HibernateException, SQLException { + return null; + } + + @Override + public void nullSafeSet( PreparedStatement st, Object value, int index, SharedSessionContractImplementor session ) + throws HibernateException, SQLException { + + } + /* * (non-Javadoc) * From 742f091f409392f4059d0f2013522f994c866704 Mon Sep 17 00:00:00 2001 From: Dean DiRoma Date: Thu, 7 Dec 2023 10:32:18 -0500 Subject: [PATCH 23/31] Revert "[PPP-4826] Upgrade Vulnerable Hibernate to 5.4.24" --- .../pentaho-solutions/system/pentaho.xml | 2 +- .../system/hibernate/h2.hibernate.cfg.xml | 2 +- .../system/hibernate/hsql.hibernate.cfg.xml | 3 +- .../system/hibernate/mysql5.hibernate.cfg.xml | 5 +- .../hibernate/oracle10g.hibernate.cfg.xml | 5 +- .../hibernate/postgresql.hibernate.cfg.xml | 3 +- .../hibernate/sqlserver.hibernate.cfg.xml | 5 +- assemblies/pentaho-war/pom.xml | 2 +- core/pom.xml | 6 +- extensions/pom.xml | 59 ---- .../plugin/services/cache/CacheManager.java | 257 +++++++++-------- .../plugin/services/cache/HvCache.java | 54 ---- .../services/cache/HvCacheRegionFactory.java | 34 --- .../services/cache/HvTimestampsRegion.java | 37 --- .../services/cache/LastModifiedCache.java | 258 +++++------------- .../hibernate/postgresql.hibernate.cfg.xml | 2 +- .../resources/web-solution/system/pentaho.xml | 2 +- pom.xml | 16 +- repository/pom.xml | 48 ---- .../hibernate/HibernateLoadEventListener.java | 8 +- .../repository/hibernate/HibernateUtil.java | 25 +- .../hibernate/usertypes/BlobUserType.java | 22 +- .../usertypes/BlobtoByteArrayUserType.java | 15 +- .../usertypes/EmptyStringUserType.java | 26 +- .../usertypes/LongStringUserType.java | 17 +- 25 files changed, 241 insertions(+), 672 deletions(-) delete mode 100644 extensions/src/main/java/org/pentaho/platform/plugin/services/cache/HvCache.java delete mode 100644 extensions/src/main/java/org/pentaho/platform/plugin/services/cache/HvCacheRegionFactory.java delete mode 100644 extensions/src/main/java/org/pentaho/platform/plugin/services/cache/HvTimestampsRegion.java diff --git a/assemblies/pentaho-solutions/src/main/resources-filtered/pentaho-solutions/system/pentaho.xml b/assemblies/pentaho-solutions/src/main/resources-filtered/pentaho-solutions/system/pentaho.xml index 6623321c078..13b5002593c 100644 --- a/assemblies/pentaho-solutions/src/main/resources-filtered/pentaho-solutions/system/pentaho.xml +++ b/assemblies/pentaho-solutions/src/main/resources-filtered/pentaho-solutions/system/pentaho.xml @@ -64,7 +64,7 @@ --> - org.pentaho.platform.plugin.services.cache.HvCacheRegionFactory + net.sf.ehcache.hibernate.SingletonEhCacheProvider pentahoCache - - org.hibernate.cache.EhCacheProvider - org.pentaho.platform.plugin.services.cache.HvCacheRegionFactory + + net.sf.ehcache.hibernate.SingletonEhCacheProvider true true diff --git a/assemblies/pentaho-war/pom.xml b/assemblies/pentaho-war/pom.xml index 3b9300bb917..1d6c83891c5 100644 --- a/assemblies/pentaho-war/pom.xml +++ b/assemblies/pentaho-war/pom.xml @@ -18,7 +18,7 @@ ${prepared.war.directory}/WEB-INF/lib 1.3.3 ${basedir}/src/main/resources/datasources - 5.4.24.Final + 3.6.9.Final 3.0.1 0.9.1.2 1.0.12 diff --git a/core/pom.xml b/core/pom.xml index dfef11e89f3..c48a913edb4 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -370,7 +370,7 @@ - org.hibernate.common + org.hibernate hibernate-commons-annotations ${hibernate-commons-annotations.version} compile @@ -383,8 +383,8 @@ org.hibernate.javax.persistence - hibernate-jpa-2.1-api - ${hibernate-jpa-2.1-api.version} + hibernate-jpa-2.0-api + ${hibernate-jpa-2.0-api.version} compile diff --git a/extensions/pom.xml b/extensions/pom.xml index 94b1771993e..d1a7af10296 100644 --- a/extensions/pom.xml +++ b/extensions/pom.xml @@ -487,17 +487,6 @@ - - org.hibernate - hibernate-ehcache - ${hibernate-ehcache.version} - - - * - * - - - org.antlr antlr-complete @@ -2765,54 +2754,6 @@ 4.10.0 test - - org.jboss.logging - jboss-logging - ${jboss-logging.version} - compile - - - * - * - - - - - com.fasterxml - classmate - ${classmate.version} - compile - - - * - * - - - - - javax.persistence - javax.persistence-api - ${javax.persistence-api.version} - compile - - - * - * - - - - - net.bytebuddy - byte-buddy - ${byte-buddy.version} - compile - - - * - * - - - diff --git a/extensions/src/main/java/org/pentaho/platform/plugin/services/cache/CacheManager.java b/extensions/src/main/java/org/pentaho/platform/plugin/services/cache/CacheManager.java index 98ba6e06f8f..23d7d380350 100644 --- a/extensions/src/main/java/org/pentaho/platform/plugin/services/cache/CacheManager.java +++ b/extensions/src/main/java/org/pentaho/platform/plugin/services/cache/CacheManager.java @@ -14,32 +14,24 @@ * See the GNU Lesser General Public License for more details. * * - * Copyright (c) 2002-2023 Hitachi Vantara. All rights reserved. + * Copyright (c) 2002-2018 Hitachi Vantara. All rights reserved. * */ package org.pentaho.platform.plugin.services.cache; -import net.sf.ehcache.Ehcache; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.dom4j.Element; -import org.hibernate.Cache; -import org.hibernate.SessionFactory; +import org.hibernate.cache.Cache; import org.hibernate.cache.CacheException; -import org.hibernate.cache.spi.RegionFactory; -import org.hibernate.engine.spi.SessionFactoryImplementor; -import org.hibernate.event.service.spi.EventListenerRegistry; -import org.hibernate.event.spi.EventType; -import org.hibernate.internal.SessionImpl; +import org.hibernate.cache.CacheProvider; import org.pentaho.platform.api.cache.ICacheExpirationRegistry; import org.pentaho.platform.api.engine.ICacheManager; import org.pentaho.platform.api.engine.IPentahoSession; import org.pentaho.platform.api.engine.ISystemSettings; import org.pentaho.platform.engine.core.system.PentahoSystem; import org.pentaho.platform.engine.services.messages.Messages; -import org.pentaho.platform.repository.hibernate.HibernateLoadEventListener; -import org.pentaho.platform.repository.hibernate.HibernateUtil; import org.pentaho.platform.util.xml.dom4j.XmlDom4JHelper; import java.util.ArrayList; @@ -49,18 +41,17 @@ import java.util.Map; import java.util.Properties; import java.util.Set; -import java.util.stream.Collectors; /** * This class provides an access point for pluggable caching mechanisms. Right now, it only supports the caching - * mechanisms implemented in org.hibernate.cache for Timestamp Regions. + * mechanisms implemented in org.hibernate.cache. *

* To use the cache manager, you need to include the following information in your pentaho.xml. * *

  * 
  *  <cache-provider>
- *    <class>org.pentaho.platform.plugin.services.cache.HvCacheRegionFactory</class>
+ *    <class>org.hibernate.cache.xxxxxxxx</class>
  *    <region>pentahoCache</region>
  *    <properties>
  *      <property name="someProperty">someValue</property>
@@ -69,13 +60,12 @@
  * 
* *

- * The specified class must extend org.hibernate.cache.spi.AbstractRegionFactory and/or implement - * org.hibernate.cache.spi.RegionFactory. + * The specified class must implement the org.hibernate.cache.CacheProvider interface. *

- * Each implementation of the org.hibernate.cache.spi.RegionFactory has slightly - * different requirements with respect to the required input parameters - so, please see the classes in that package - * for more information (available from the Sourceforge Hibernate project). Also, some region factories (notably the - * org.hibernate.cache.EhCacheRegionFactory) completely ignore the passed in properties, and only configure + * Each implementation of the org.hibernate.cache.CacheProvider has slightly different requirements with + * respect to the required input parameters - so, please see the classes in that package for more information (available + * from the Sourceforge Hibernate project). Also, some cache providers (notably the + * org.hibernate.cache.EhCacheProvider) completely ignore the passed in properties, and only configure * themselves by locating a configuration file (e.g. ehcache.xml) on the classpath. * *

@@ -115,8 +105,8 @@ * *

* - * @see org.hibernate.cache.RegionFactory - * @see org.hibernate.Cache + * @see org.hibernate.cache.CacheProvider + * @see org.hibernate.cache.Cache * * @author mbatchel * @@ -125,11 +115,11 @@ public class CacheManager implements ICacheManager { protected static final Log logger = LogFactory.getLog( CacheManager.class ); // ~ Instance Fields ====================================================== - private RegionFactory regionFactory; + private CacheProvider cacheProvider; private Map regionCache; - private String regionFactoryClassname; + private String cacheProviderClassName; private boolean cacheEnabled; @@ -162,10 +152,10 @@ public CacheManager() { System.setProperty( "java.io.tmpdir", s + "/" ); //$NON-NLS-1$//$NON-NLS-2$ } if ( settings != null ) { - regionFactoryClassname = settings.getSystemSetting( "cache-provider/class", null ); //$NON-NLS-1$ - if ( regionFactoryClassname != null ) { + cacheProviderClassName = settings.getSystemSetting( "cache-provider/class", null ); //$NON-NLS-1$ + if ( cacheProviderClassName != null ) { Properties cacheProperties = getCacheProperties( settings ); - setupRegionProvider( cacheProperties ); + setupCacheProvider( cacheProperties ); this.cacheEnabled = true; } } @@ -173,26 +163,23 @@ public CacheManager() { PentahoSystem.addLogoutListener( this ); } - protected void setupRegionProvider( Properties cacheProperties ) { - Object obj = PentahoSystem.createObject( regionFactoryClassname ); //Should be an HvCacheRegionFactory + protected void setupCacheProvider( Properties cacheProperties ) { + Object obj = PentahoSystem.createObject( cacheProviderClassName ); cacheExpirationRegistry = PentahoSystem.get( ICacheExpirationRegistry.class, null ); if ( null != obj ) { - if ( obj instanceof RegionFactory ) { - this.regionFactory = (RegionFactory) obj; //cacheProvider changed to regionFactory for hibernate 5.3 - regionFactory.start( HibernateUtil.getSessionFactory().getSessionFactoryOptions(), cacheProperties ); + if ( obj instanceof CacheProvider ) { + this.cacheProvider = (CacheProvider) obj; + cacheProvider.start( cacheProperties ); regionCache = new HashMap(); - ( (SessionFactoryImplementor) HibernateUtil.getSessionFactory() ).getServiceRegistry() - .getService( EventListenerRegistry.class ).prependListeners( - EventType.LOAD, new HibernateLoadEventListener() ); - Cache cache = buildCache( SESSION, HibernateUtil.getSessionFactory(), cacheProperties ); + Cache cache = buildCache( SESSION, cacheProperties ); if ( cache == null ) { CacheManager.logger .error( Messages.getInstance().getString( "CacheManager.ERROR_0005_UNABLE_TO_BUILD_CACHE" ) ); //$NON-NLS-1$ } else { regionCache.put( SESSION, cache ); } - cache = buildCache( GLOBAL, HibernateUtil.getSessionFactory(), cacheProperties ); + cache = buildCache( GLOBAL, cacheProperties ); if ( cache == null ) { CacheManager.logger .error( Messages.getInstance().getString( "CacheManager.ERROR_0005_UNABLE_TO_BUILD_CACHE" ) ); //$NON-NLS-1$ @@ -209,17 +196,17 @@ protected void setupRegionProvider( Properties cacheProperties ) { public void cacheStop() { if ( cacheEnabled ) { regionCache.clear(); - regionFactory.stop(); + cacheProvider.stop(); } } /** - * Returns the underlying regionFactory (implements org.hibernate.cache.RegionFactory) + * Returns the underlying cache provider (implements org.hibernate.cache.CacheProvider * - * @return regionFactory. + * @return cacheProvider. */ - protected RegionFactory getRegionFactory() { - return regionFactory; + protected CacheProvider getCacheProvider() { + return cacheProvider; } /** @@ -259,9 +246,9 @@ public void onLogout( final IPentahoSession session ) { public boolean addCacheRegion( String region, Properties cacheProperties ) { boolean returnValue = false; - if ( checkCacheEnabled() ) { + if ( cacheEnabled ) { if ( !cacheEnabled( region ) ) { - Cache cache = (Cache) buildCache( region, HibernateUtil.getSessionFactory(), cacheProperties ); + Cache cache = buildCache( region, cacheProperties ); if ( cache == null ) { CacheManager.logger .error( Messages.getInstance().getString( "CacheManager.ERROR_0005_UNABLE_TO_BUILD_CACHE" ) ); //$NON-NLS-1$ @@ -273,15 +260,17 @@ public boolean addCacheRegion( String region, Properties cacheProperties ) { CacheManager.logger.warn( Messages.getInstance().getString( "CacheManager.WARN_0002_REGION_ALREADY_EXIST", region ) ); //$NON-NLS-1$ } + } else { + CacheManager.logger.warn( Messages.getInstance().getString( "CacheManager.WARN_0001_CACHE_NOT_ENABLED" ) ); //$NON-NLS-1$ } return returnValue; } public boolean addCacheRegion( String region ) { boolean returnValue = false; - if ( checkCacheEnabled() ) { + if ( cacheEnabled ) { if ( !cacheEnabled( region ) ) { - Cache cache = (Cache) buildCache( region, HibernateUtil.getSessionFactory(), null ); + Cache cache = buildCache( region, null ); if ( cache == null ) { CacheManager.logger .error( Messages.getInstance().getString( "CacheManager.ERROR_0005_UNABLE_TO_BUILD_CACHE" ) ); //$NON-NLS-1$ @@ -294,12 +283,14 @@ public boolean addCacheRegion( String region ) { "CacheManager.WARN_0002_REGION_ALREADY_EXIST", region ) ); //$NON-NLS-1$ returnValue = true; } + } else { + CacheManager.logger.warn( Messages.getInstance().getString( "CacheManager.WARN_0001_CACHE_NOT_ENABLED" ) ); //$NON-NLS-1$ } return returnValue; } public boolean addCacheRegion( String region, Cache cache ) { - if ( checkCacheEnabled() ) { + if ( cacheEnabled ) { if ( !cacheEnabled( region ) ) { regionCache.put( region, cache ); } else { @@ -307,17 +298,18 @@ public boolean addCacheRegion( String region, Cache cache ) { "CacheManager.WARN_0002_REGION_ALREADY_EXIST", region ) ); } } else { + CacheManager.logger.warn( Messages.getInstance().getString( "CacheManager.WARN_0001_CACHE_NOT_ENABLED" ) ); return false; } return true; } public void clearRegionCache( String region ) { - if ( checkCacheEnabled() ) { + if ( cacheEnabled ) { Cache cache = regionCache.get( region ); if ( cache != null ) { try { - cache.evictAll(); + cache.clear(); } catch ( CacheException e ) { CacheManager.logger.error( Messages.getInstance().getString( "CacheManager.ERROR_0006_CACHE_EXCEPTION", e.getLocalizedMessage() ) ); //$NON-NLS-1$ @@ -326,43 +318,61 @@ public void clearRegionCache( String region ) { CacheManager.logger.info( Messages.getInstance().getString( "CacheManager.INFO_0001_CACHE_DOES_NOT_EXIST", region ) ); //$NON-NLS-1$ } + } else { + CacheManager.logger.warn( Messages.getInstance().getString( "CacheManager.WARN_0001_CACHE_NOT_ENABLED" ) ); //$NON-NLS-1$ } } public void removeRegionCache( String region ) { - if ( checkRegionEnabled( region ) ) { - clearRegionCache( region ); + if ( cacheEnabled ) { + if ( cacheEnabled( region ) ) { + clearRegionCache( region ); + } else { + CacheManager.logger.info( Messages.getInstance().getString( + "CacheManager.INFO_0001_CACHE_DOES_NOT_EXIST", region ) ); //$NON-NLS-1$ + } + } else { + CacheManager.logger.warn( Messages.getInstance().getString( "CacheManager.WARN_0001_CACHE_NOT_ENABLED" ) ); //$NON-NLS-1$ } } public void putInRegionCache( String region, Object key, Object value ) { - if ( checkRegionEnabled( region ) ) { - HvCache hvcache = (HvCache) regionCache.get( region ); //This is our LastModifiedCache or CarteStatusCache - try ( SessionImpl session = (SessionImpl) hvcache.getSessionFactory().openSession() ) { - hvcache.getDirectAccessRegion().putIntoCache( key, value, session ); + if ( cacheEnabled ) { + if ( cacheEnabled( region ) ) { + Cache cache = regionCache.get( region ); + cache.put( key, value ); + } else { + CacheManager.logger.warn( Messages.getInstance().getString( + "CacheManager.WARN_0003_REGION_DOES_NOT_EXIST", region ) ); //$NON-NLS-1$ } + } else { + CacheManager.logger.warn( Messages.getInstance().getString( "CacheManager.WARN_0001_CACHE_NOT_ENABLED" ) ); //$NON-NLS-1$ } } public Object getFromRegionCache( String region, Object key ) { Object returnValue = null; - if ( checkRegionEnabled( region ) ) { - HvCache hvcache = (HvCache) regionCache.get( region ); //This is our LastModifiedCache or CarteStatusCache - try ( SessionImpl session = (SessionImpl) hvcache.getSessionFactory().openSession() ) { - - return ( (HvCache) hvcache ).getDirectAccessRegion().getFromCache( key, session ); + if ( cacheEnabled ) { + Cache cache = regionCache.get( region ); + if ( cacheEnabled( region ) ) { + returnValue = cache.get( key ); + } else { + CacheManager.logger.warn( Messages.getInstance().getString( + "CacheManager.WARN_0003_REGION_DOES_NOT_EXIST", region ) ); //$NON-NLS-1$ } + } else { + CacheManager.logger.warn( Messages.getInstance().getString( "CacheManager.WARN_0001_CACHE_NOT_ENABLED" ) ); //$NON-NLS-1$ } + return returnValue; } public List getAllValuesFromRegionCache( String region ) { List list = new ArrayList(); - if ( checkRegionEnabled( region ) ) { - HvCache hvcache = (HvCache) regionCache.get( region ); //This is our LastModifiedCache or CarteStatusCache - try ( SessionImpl session = (SessionImpl) hvcache.getSessionFactory().openSession() ) { - Ehcache ehcache = hvcache.getStorageAccess().getCache(); - Map cacheMap = ehcache.getAll( ehcache.getKeys() ); + if ( cacheEnabled ) { + Cache cache = regionCache.get( region ); + if ( cacheEnabled( region ) ) { + Map cacheMap = cache.toMap(); if ( cacheMap != null ) { Iterator it = cacheMap.entrySet().iterator(); while ( it.hasNext() ) { @@ -371,38 +381,55 @@ public List getAllValuesFromRegionCache( String region ) { } } } + } else { + CacheManager.logger.warn( Messages.getInstance().getString( "CacheManager.WARN_0001_CACHE_NOT_ENABLED" ) ); //$NON-NLS-1$ } return list; } public Set getAllKeysFromRegionCache( String region ) { - if ( checkRegionEnabled( region ) ) { - HvCache hvcache = (HvCache) regionCache.get( region ); //This is our LastModifiedCache or CarteStatusCache - try ( SessionImpl session = (SessionImpl) hvcache.getSessionFactory().openSession() ) { - return hvcache.getAllKeys(); + Set set = null; + if ( cacheEnabled ) { + Cache cache = regionCache.get( region ); + if ( cacheEnabled( region ) ) { + Map cacheMap = cache.toMap(); + if ( cacheMap != null ) { + set = cacheMap.keySet(); + } } + } else { + CacheManager.logger.warn( Messages.getInstance().getString( "CacheManager.WARN_0001_CACHE_NOT_ENABLED" ) ); //$NON-NLS-1$ } - return null; + return set; } public Set getAllEntriesFromRegionCache( String region ) { - if ( checkRegionEnabled( region ) ) { - HvCache hvcache = (HvCache) regionCache.get( region ); //This is our LastModifiedCache or CarteStatusCache - try ( SessionImpl session = (SessionImpl) hvcache.getSessionFactory().openSession() ) { - Ehcache ehcache = hvcache.getStorageAccess().getCache(); - return ehcache.getAll( ehcache.getKeys() ).values().stream().collect( Collectors.toSet() ); + Set set = null; + if ( cacheEnabled ) { + Cache cache = regionCache.get( region ); + if ( cacheEnabled( region ) ) { + Map cacheMap = cache.toMap(); + if ( cacheMap != null ) { + set = cacheMap.entrySet(); + } } + } else { + CacheManager.logger.warn( Messages.getInstance().getString( "CacheManager.WARN_0001_CACHE_NOT_ENABLED" ) ); //$NON-NLS-1$ } - return null; + return set; } public void removeFromRegionCache( String region, Object key ) { - if ( checkRegionEnabled( region ) ) { - HvCache hvcache = (HvCache) regionCache.get( region ); - hvcache.evictEntityData( (String) key ); + if ( cacheEnabled ) { + Cache cache = regionCache.get( region ); + if ( cacheEnabled( region ) ) { + cache.remove( key ); + } else { + CacheManager.logger.warn( Messages.getInstance().getString( + "CacheManager.WARN_0003_REGION_DOES_NOT_EXIST", region ) ); //$NON-NLS-1$ + } } else { - CacheManager.logger.warn( Messages.getInstance().getString( - "CacheManager.WARN_0003_REGION_DOES_NOT_EXIST", region ) ); //$NON-NLS-1$ + CacheManager.logger.warn( Messages.getInstance().getString( "CacheManager.WARN_0001_CACHE_NOT_ENABLED" ) ); //$NON-NLS-1$ } } @@ -418,7 +445,7 @@ public void clearCache() { String key = ( entry.getKey() != null ) ? entry.getKey().toString() : ""; //$NON-NLS-1$ if ( key != null ) { Cache cache = regionCache.get( key ); - cache.evictAll(); + cache.clear(); } } } @@ -434,16 +461,16 @@ public Object getFromSessionCache( IPentahoSession session, String key ) { public void killSessionCache( IPentahoSession session ) { if ( cacheEnabled ) { - HvCache hvcache = (HvCache) regionCache.get( SESSION ); - if ( hvcache != null ) { - Ehcache ehcache = hvcache.getStorageAccess().getCache(); - Map cacheMap = ehcache.getAll( ehcache.getKeys() ); + Cache cache = regionCache.get( SESSION ); + if ( cache != null ) { + Map cacheMap = cache.toMap(); if ( cacheMap != null ) { - Iterator it = cacheMap.keySet().iterator(); + Set set = cacheMap.keySet(); + Iterator it = set.iterator(); while ( it.hasNext() ) { String key = (String) it.next(); if ( key.indexOf( session.getId() ) >= 0 ) { - hvcache.evictEntityData( key ); + cache.remove( key ); } } } @@ -481,11 +508,10 @@ private String getCorrectedKey( final IPentahoSession session, final String key } } - private LastModifiedCache buildCache( String key, SessionFactory sessionFactory, Properties cacheProperties ) { - if ( getRegionFactory() != null ) { - HvTimestampsRegion timestampsRegion = (HvTimestampsRegion ) - getRegionFactory().buildTimestampsRegion( key, (SessionFactoryImplementor) sessionFactory ); - LastModifiedCache lmCache = new LastModifiedCache( timestampsRegion, sessionFactory ); + private LastModifiedCache buildCache( String key, Properties cacheProperties ) { + if ( getCacheProvider() != null ) { + Cache cache = getCacheProvider().buildCache( key, cacheProperties ); + LastModifiedCache lmCache = new LastModifiedCache( cache ); if ( cacheExpirationRegistry != null ) { cacheExpirationRegistry.register( lmCache ); } else { @@ -500,13 +526,12 @@ private LastModifiedCache buildCache( String key, SessionFactory sessionFactory, @Override public long getElementCountInRegionCache( String region ) { - if ( checkRegionEnabled( region ) ) { - HvCache hvcache = (HvCache) regionCache.get( region ); - Ehcache ehcache = hvcache.getStorageAccess().getCache(); - if ( hvcache != null ) { + if ( cacheEnabled ) { + Cache cache = regionCache.get( region ); + if ( cache != null ) { try { - long memCnt = ehcache.getStatistics().getMemoryStoreObjectCount(); - long discCnt = ehcache.getStatistics().getDiskStoreObjectCount(); + long memCnt = cache.getElementCountInMemory(); + long discCnt = cache.getElementCountOnDisk(); return memCnt + discCnt; } catch ( Exception ignored ) { return -1; @@ -528,38 +553,4 @@ public long getElementCountInSessionCache() { public long getElementCountInGlobalCache() { return getElementCountInRegionCache( GLOBAL ); } - - private boolean checkRegionEnabled( String region ) { - if ( checkCacheEnabled() ) { - if ( cacheEnabled( region ) ) { - return true; - } else { - CacheManager.logger.warn( Messages.getInstance().getString( - "CacheManager.WARN_0003_REGION_DOES_NOT_EXIST", region ) ); - } - } - return false; - } - - private boolean checkCacheEnabled() { - if ( cacheEnabled ) { - return true; - } else { - CacheManager.logger.warn( - Messages.getInstance().getString( "CacheManager.WARN_0001_CACHE_NOT_ENABLED" ) ); //$NON-NLS-1$ - } - return false; - } - - private boolean checkRegionNonExistent( String region ) { - if ( checkCacheEnabled() ) { - if ( cacheEnabled( region ) ) { - CacheManager.logger.warn( Messages.getInstance().getString( - "CacheManager.WARN_0002_REGION_ALREADY_EXIST", region ) ); //$NON-NLS-1$ - } else { - return true; - } - } - return false; - } } diff --git a/extensions/src/main/java/org/pentaho/platform/plugin/services/cache/HvCache.java b/extensions/src/main/java/org/pentaho/platform/plugin/services/cache/HvCache.java deleted file mode 100644 index 4cb7eca7a47..00000000000 --- a/extensions/src/main/java/org/pentaho/platform/plugin/services/cache/HvCache.java +++ /dev/null @@ -1,54 +0,0 @@ -/*! - * - * This program is free software; you can redistribute it and/or modify it under the - * terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software - * Foundation. - * - * You should have received a copy of the GNU Lesser General Public License along with this - * program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html - * or from the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Lesser General Public License for more details. - * - * - * Copyright (c) 2002-2023 Hitachi Vantara. All rights reserved. - * - */ -package org.pentaho.platform.plugin.services.cache; - -import net.sf.ehcache.Ehcache; -import org.hibernate.Cache; -import org.hibernate.cache.ehcache.internal.StorageAccessImpl; -import org.hibernate.cache.spi.DirectAccessRegion; - -import java.util.Set; - -public interface HvCache extends Cache { - /** - * Return all keys for the region - * @return - */ - Set getAllKeys( ); - - /** - * Return built in cache access - * @return - */ - DirectAccessRegion getDirectAccessRegion(); - - /** - * Return the object that allows direct storage access - * @return - */ - StorageAccessImpl getStorageAccess(); - - /** - * Exposes the underlaying EhCache associated with this HvCache - * @return The EhCache - */ - Ehcache getCache(); - -} diff --git a/extensions/src/main/java/org/pentaho/platform/plugin/services/cache/HvCacheRegionFactory.java b/extensions/src/main/java/org/pentaho/platform/plugin/services/cache/HvCacheRegionFactory.java deleted file mode 100644 index c77781773f7..00000000000 --- a/extensions/src/main/java/org/pentaho/platform/plugin/services/cache/HvCacheRegionFactory.java +++ /dev/null @@ -1,34 +0,0 @@ -/*! - * - * This program is free software; you can redistribute it and/or modify it under the - * terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software - * Foundation. - * - * You should have received a copy of the GNU Lesser General Public License along with this - * program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html - * or from the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Lesser General Public License for more details. - * - * - * Copyright (c) 2002-2023 Hitachi Vantara. All rights reserved. - * - */ -package org.pentaho.platform.plugin.services.cache; - -import org.hibernate.cache.ehcache.internal.SingletonEhcacheRegionFactory; -import org.hibernate.cache.spi.TimestampsRegion; -import org.hibernate.engine.spi.SessionFactoryImplementor; - -public class HvCacheRegionFactory extends SingletonEhcacheRegionFactory { - @Override - public TimestampsRegion buildTimestampsRegion( - String regionName, SessionFactoryImplementor sessionFactory) { - verifyStarted(); - return new HvTimestampsRegion( - regionName, this, createTimestampsRegionStorageAccess( regionName, sessionFactory ) ); - } -} diff --git a/extensions/src/main/java/org/pentaho/platform/plugin/services/cache/HvTimestampsRegion.java b/extensions/src/main/java/org/pentaho/platform/plugin/services/cache/HvTimestampsRegion.java deleted file mode 100644 index 00307d58f30..00000000000 --- a/extensions/src/main/java/org/pentaho/platform/plugin/services/cache/HvTimestampsRegion.java +++ /dev/null @@ -1,37 +0,0 @@ -/*! - * - * This program is free software; you can redistribute it and/or modify it under the - * terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software - * Foundation. - * - * You should have received a copy of the GNU Lesser General Public License along with this - * program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html - * or from the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Lesser General Public License for more details. - * - * - * Copyright (c) 2002-2023 Hitachi Vantara. All rights reserved. - * - */ -package org.pentaho.platform.plugin.services.cache; - -import org.hibernate.cache.ehcache.internal.StorageAccessImpl; -import org.hibernate.cache.spi.RegionFactory; -import org.hibernate.cache.spi.support.StorageAccess; -import org.hibernate.cache.spi.support.TimestampsRegionTemplate; - -public class HvTimestampsRegion extends TimestampsRegionTemplate { - StorageAccess storageAccess; - - public HvTimestampsRegion( String name, RegionFactory regionFactory, StorageAccess storageAccess) { - super( name, regionFactory, storageAccess ); - } - - public StorageAccessImpl getStorageAccess() { - return (StorageAccessImpl) super.getStorageAccess(); - } -} diff --git a/extensions/src/main/java/org/pentaho/platform/plugin/services/cache/LastModifiedCache.java b/extensions/src/main/java/org/pentaho/platform/plugin/services/cache/LastModifiedCache.java index ecbb121b913..c68e8a1437b 100644 --- a/extensions/src/main/java/org/pentaho/platform/plugin/services/cache/LastModifiedCache.java +++ b/extensions/src/main/java/org/pentaho/platform/plugin/services/cache/LastModifiedCache.java @@ -14,73 +14,41 @@ * See the GNU Lesser General Public License for more details. * * - * Copyright (c) 2002-2023 Hitachi Vantara. All rights reserved. + * Copyright (c) 2002-2018 Hitachi Vantara. All rights reserved. * */ + package org.pentaho.platform.plugin.services.cache; -import net.sf.ehcache.Ehcache; -import org.apache.commons.lang3.NotImplementedException; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.hibernate.MappingException; -import org.hibernate.SessionFactory; -import org.hibernate.cache.ehcache.internal.StorageAccessImpl; -import org.hibernate.cache.spi.DirectAccessRegion; -import org.hibernate.cache.spi.RegionFactory; -import org.hibernate.cache.spi.access.EntityDataAccess; -import org.hibernate.cache.spi.access.NaturalIdDataAccess; -import org.hibernate.engine.spi.SessionFactoryImplementor; -import org.hibernate.metamodel.model.domain.NavigableRole; -import org.hibernate.metamodel.spi.MetamodelImplementor; -import org.hibernate.persister.collection.CollectionPersister; -import org.hibernate.persister.entity.EntityPersister; -import org.hibernate.pretty.MessageHelper; +import org.hibernate.cache.Cache; +import org.hibernate.cache.CacheException; import org.pentaho.platform.api.cache.ILastModifiedCacheItem; -import javax.persistence.PersistenceException; -import java.io.Serializable; import java.util.Date; -import java.util.HashSet; -import java.util.Set; +import java.util.Map; /** * User: rfellows Date: 10/25/11 Time: 3:53 PM */ -public class LastModifiedCache implements ILastModifiedCacheItem, HvCache { - private DirectAccessRegion directAccessRegion; //Should be an instanceof HvTimestampsRegion - private SessionFactoryImplementor sessionFactory; - private RegionFactory regionFactory; - +public class LastModifiedCache implements ILastModifiedCacheItem, Cache { + private Cache cache; private long lastModified; - protected static final Log LOGGER = LogFactory.getLog( LastModifiedCache.class ); - public LastModifiedCache( DirectAccessRegion directAccessRegion, SessionFactory sessionFactory ) { - setInstanceVariables( directAccessRegion, sessionFactory ); + public LastModifiedCache( Cache cache ) { + this.cache = cache; setLastModified(); } - public LastModifiedCache( DirectAccessRegion directAccessRegion, SessionFactory sessionFactory, long lastModified ) { - setInstanceVariables( directAccessRegion, sessionFactory ); + public LastModifiedCache( Cache cache, long lastModified ) { + this.cache = cache; this.lastModified = lastModified; } - private void setInstanceVariables( DirectAccessRegion directAccessRegion, SessionFactory sessionFactory ) { - this.directAccessRegion = directAccessRegion; - this.sessionFactory = (SessionFactoryImplementor) sessionFactory; - this.regionFactory = - getSessionFactory().getSessionFactoryOptions().getServiceRegistry().getService( RegionFactory.class ); - } - @Override public long getLastModified() { return lastModified; } - @Override public String getCacheKey() { - return directAccessRegion.getName(); - } - public void setLastModified( long lastModified ) { this.lastModified = lastModified; } @@ -89,197 +57,97 @@ protected void setLastModified() { this.lastModified = new Date().getTime(); } - @Override public SessionFactoryImplementor getSessionFactory() { - return sessionFactory; - } - - @Override public boolean containsEntity( Class entityClass, Serializable identifier ) { - return this.containsEntity(entityClass.getName(), identifier); - } - - @Override public boolean containsEntity( String entityName, Serializable identifier ) { - EntityPersister entityDescriptor = this.sessionFactory.getMetamodel().entityPersister(entityName); - EntityDataAccess cacheAccess = entityDescriptor.getCacheAccessStrategy(); - if (cacheAccess == null) { - return false; - } else { - Object key = cacheAccess.generateCacheKey(identifier, entityDescriptor, this.sessionFactory, (String) null); - return cacheAccess.contains(key); - } - } - - @Override public void evictEntityData( Class entityClass, Serializable identifier ) { - evictEntityData( entityClass.getName(), identifier ); - } - - @Override public void evictEntityData( String entityName, Serializable identifier ) { - final EntityPersister entityDescriptor = sessionFactory.getMetamodel().entityPersister( entityName ); - final EntityDataAccess cacheAccess = entityDescriptor.getCacheAccessStrategy(); - if ( cacheAccess == null ) { - return; - } - - if ( LOGGER.isDebugEnabled() ) { - LOGGER.debug( String.format( "Evicting second-level cache: %s", - MessageHelper.infoString( entityDescriptor, identifier, sessionFactory ) ) ); - } - - final Object key = cacheAccess.generateCacheKey( identifier, entityDescriptor, sessionFactory, null ); - cacheAccess.evict( key ); - } - - @Override public void evictEntityData( Class entityClass ) { - evictEntityData( entityClass.getName() ); - } - - @Override public void evictEntityData( String entityName ) { - try { - evictEntityData( getSessionFactory().getMetamodel().entityPersister( entityName ) ); - } catch ( MappingException e) { - //Nothing to do if the entry is not there. - } - } - - @Override public void evictEntityData() { - sessionFactory.getMetamodel().entityPersisters().values().forEach( this::evictEntityData ); - } - @Override - public void evictNaturalIdData( Class entityClass ) { - throwNotImplemented(); + public String getCacheKey() { + return cache.getRegionName(); } @Override - public void evictNaturalIdData( String entityName ) { - throwNotImplemented(); + public Object read( Object o ) throws CacheException { + return cache.read( o ); } @Override - public void evictNaturalIdData() { - throwNotImplemented(); - } - - private void evictNaturalIdData(NavigableRole rootEntityRole, NaturalIdDataAccess cacheAccess) { - throwNotImplemented(); + public Object get( Object o ) throws CacheException { + return cache.get( o ); } @Override - public boolean containsCollection(String role, Serializable ownerIdentifier) { - throwNotImplemented(); - return false; + public void put( Object o, Object o1 ) throws CacheException { + cache.put( o, o1 ); + setLastModified(); } @Override - public void evictCollectionData(String role, Serializable ownerIdentifier) { - throwNotImplemented(); - } - - @Override - public void evictCollectionData(String role) { - throwNotImplemented(); - } - - private void evictCollectionData( CollectionPersister collectionDescriptor) { - throwNotImplemented(); - } - - @Override public void evictCollectionData() { - throwNotImplemented(); - } - - @Override public boolean containsQuery( String regionName ) { - throwNotImplemented(); - return false; + public void update( Object o, Object o1 ) throws CacheException { + cache.update( o, o1 ); + setLastModified(); } - @Override public void evictDefaultQueryRegion() { - throwNotImplemented(); + @Override + public void remove( Object o ) throws CacheException { + cache.remove( o ); + setLastModified(); } - @Override public void evictQueryRegion( String regionName ) { - throwNotImplemented(); + @Override + public void clear() throws CacheException { + cache.clear(); + setLastModified(); } - @Override public void evictQueryRegions() { - throwNotImplemented(); + @Override + public void destroy() throws CacheException { + cache.destroy(); + setLastModified(); } - @Override public void evictRegion( String regionName ) { - throwNotImplemented(); + @Override + public void lock( Object o ) throws CacheException { + cache.lock( o ); } @Override - public boolean contains(Class cls, Object primaryKey) { - // JPA - return containsEntity( cls, (Serializable) primaryKey ); + public void unlock( Object o ) throws CacheException { + cache.unlock( o ); } @Override - public void evict(Class cls, Object primaryKey) { - // JPA call - evictEntityData( cls, (Serializable) primaryKey ); + public long nextTimestamp() { + return cache.nextTimestamp(); } - @Override public void evict( Class aClass ) { - // JPA - evictEntityData( aClass ); + @Override + public int getTimeout() { + return cache.getTimeout(); } - @SuppressWarnings("unchecked") - public T unwrap(Class cls) { - if ( org.hibernate.Cache.class.isAssignableFrom( cls ) ) { - return (T) this; - } - - if ( RegionFactory.class.isAssignableFrom( cls ) ) { - return (T) regionFactory; - } - - throw new PersistenceException( "Hibernate cannot unwrap Cache as " + cls.getName() ); + @Override + public String getRegionName() { + return cache.getRegionName(); } - @Override public Set getAllKeys() { - Ehcache ehcache = getStorageAccess().getCache(); - return new HashSet( ehcache.getKeys() ); + @Override + public long getSizeInMemory() { + return cache.getSizeInMemory(); } - @Override public DirectAccessRegion getDirectAccessRegion() { - return directAccessRegion; + @Override + public long getElementCountInMemory() { + return cache.getElementCountInMemory(); } - private void evictEntityData( EntityPersister entityDescriptor ) { - EntityPersister rootEntityDescriptor = entityDescriptor; - if ( entityDescriptor.isInherited() - && !entityDescriptor.getEntityName().equals( entityDescriptor.getRootEntityName() ) ) { - rootEntityDescriptor = ( (MetamodelImplementor) getSessionFactory().getMetamodel() ).locateEntityPersister( - entityDescriptor.getRootEntityName() ); - } - - evictEntityData( rootEntityDescriptor.getNavigableRole(), rootEntityDescriptor.getCacheAccessStrategy() ); - + @Override + public long getElementCountOnDisk() { + return cache.getElementCountOnDisk(); } - private void evictEntityData( NavigableRole navigableRole, EntityDataAccess cacheAccess) { - if ( cacheAccess == null ) { - return; - } - - if ( LOGGER.isDebugEnabled() ) { - LOGGER.debug( String.format( "Evicting entity cache: %s", navigableRole.getFullPath() ) ); + @Override + public Map toMap() { + try { + return cache.toMap(); + } catch ( Exception e ) { + return null; } - - cacheAccess.evictAll(); - } - - @Override public StorageAccessImpl getStorageAccess(){ - return ( (HvTimestampsRegion) directAccessRegion ).getStorageAccess(); - } - - @Override public Ehcache getCache() { - return getStorageAccess().getCache(); - } - - private void throwNotImplemented(){ - throw new NotImplementedException( "Method not Implemented with upgrade to hibernate 5.4.24"); } } diff --git a/extensions/src/test/resources/cache-solution/system/hibernate/postgresql.hibernate.cfg.xml b/extensions/src/test/resources/cache-solution/system/hibernate/postgresql.hibernate.cfg.xml index edc99106119..fcdc9d00821 100644 --- a/extensions/src/test/resources/cache-solution/system/hibernate/postgresql.hibernate.cfg.xml +++ b/extensions/src/test/resources/cache-solution/system/hibernate/postgresql.hibernate.cfg.xml @@ -5,7 +5,7 @@ - net.sf.ehcache.hibernate.SingletonEhcacheProvider + net.sf.ehcache.hibernate.SingletonEhCacheProvider true true diff --git a/extensions/src/test/resources/web-solution/system/pentaho.xml b/extensions/src/test/resources/web-solution/system/pentaho.xml index d3ef20e6bbd..ebe96bf28eb 100644 --- a/extensions/src/test/resources/web-solution/system/pentaho.xml +++ b/extensions/src/test/resources/web-solution/system/pentaho.xml @@ -28,7 +28,7 @@ --> - org.hibernate.cache.EhCacheProvider + net.sf.ehcache.hibernate.SingletonEhCacheProvider pentahoCache 4.2.3 - 3.5.3.Final - 1.6.0 - 2.2 - 1.12.16 diff --git a/repository/pom.xml b/repository/pom.xml index 867c202d72a..baba4417700 100644 --- a/repository/pom.xml +++ b/repository/pom.xml @@ -941,54 +941,6 @@ tests test - - org.jboss.logging - jboss-logging - ${jboss-logging.version} - compile - - - * - * - - - - - com.fasterxml - classmate - ${classmate.version} - compile - - - * - * - - - - - javax.persistence - javax.persistence-api - ${javax.persistence-api.version} - compile - - - * - * - - - - - net.bytebuddy - byte-buddy - ${byte-buddy.version} - compile - - - * - * - - - ${project.artifactId}-${project.version} diff --git a/repository/src/main/java/org/pentaho/platform/repository/hibernate/HibernateLoadEventListener.java b/repository/src/main/java/org/pentaho/platform/repository/hibernate/HibernateLoadEventListener.java index 962388f07d9..f6b920e284d 100644 --- a/repository/src/main/java/org/pentaho/platform/repository/hibernate/HibernateLoadEventListener.java +++ b/repository/src/main/java/org/pentaho/platform/repository/hibernate/HibernateLoadEventListener.java @@ -14,16 +14,16 @@ * See the GNU General Public License for more details. * * - * Copyright (c) 2002-2023 Hitachi Vantara. All rights reserved. + * Copyright (c) 2002-2018 Hitachi Vantara. All rights reserved. * */ package org.pentaho.platform.repository.hibernate; import org.hibernate.HibernateException; -import org.hibernate.event.spi.LoadEvent; -import org.hibernate.event.internal.DefaultLoadEventListener; -import org.hibernate.event.spi.LoadEventListener; +import org.hibernate.event.LoadEvent; +import org.hibernate.event.LoadEventListener; +import org.hibernate.event.def.DefaultLoadEventListener; import org.pentaho.platform.api.repository.IRuntimeElement; public class HibernateLoadEventListener extends DefaultLoadEventListener { diff --git a/repository/src/main/java/org/pentaho/platform/repository/hibernate/HibernateUtil.java b/repository/src/main/java/org/pentaho/platform/repository/hibernate/HibernateUtil.java index 692f65a656f..ca84c82bf0d 100644 --- a/repository/src/main/java/org/pentaho/platform/repository/hibernate/HibernateUtil.java +++ b/repository/src/main/java/org/pentaho/platform/repository/hibernate/HibernateUtil.java @@ -14,7 +14,7 @@ * See the GNU General Public License for more details. * * - * Copyright (c) 2002-2023 Hitachi Vantara. All rights reserved. + * Copyright (c) 2002-2018 Hitachi Vantara. All rights reserved. * */ @@ -42,6 +42,7 @@ import org.pentaho.platform.api.repository.RepositoryException; import org.pentaho.platform.engine.core.system.PentahoSystem; import org.pentaho.platform.engine.services.connection.datasource.dbcp.JndiDatasourceService; +import org.pentaho.platform.engine.services.solution.PentahoEntityResolver; import org.pentaho.platform.repository.messages.Messages; import org.pentaho.platform.util.StringUtil; import org.pentaho.platform.util.messages.MessageUtil; @@ -55,9 +56,6 @@ import java.util.Properties; import java.util.StringTokenizer; -import static org.hibernate.resource.transaction.spi.TransactionStatus.COMMITTED; -import static org.hibernate.resource.transaction.spi.TransactionStatus.ROLLED_BACK; - public class HibernateUtil implements IPentahoSystemEntryPoint, IPentahoSystemExitPoint { private static final Log log = LogFactory.getLog( HibernateUtil.class ); @@ -132,9 +130,8 @@ protected static boolean initialize() { try { HibernateUtil.configuration = new Configuration(); - // Used to have "HibernateUtil.configuration.setEntityResolver( new PentahoEntityResolver() );" here. - // There was no replacement for it during upgrade to 5.4.24. - // See jaxb.internal.stax.LocalXmlResourceResolver#resolveEntity + HibernateUtil.configuration.setEntityResolver( new PentahoEntityResolver() ); + HibernateUtil.configuration.setListener( "load", new HibernateLoadEventListener() ); //$NON-NLS-1$ if ( hibernateConfigurationFile != null ) { String configPath = applicationContext.getSolutionPath( hibernateConfigurationFile ); @@ -155,6 +152,7 @@ protected static boolean initialize() { } String dsName = HibernateUtil.configuration.getProperty( "connection.datasource" ); //$NON-NLS-1$ if ( ( dsName != null ) && dsName.toUpperCase().endsWith( "HIBERNATE" ) ) { //$NON-NLS-1$ + // IDBDatasourceService datasourceService = (IDBDatasourceService) PentahoSystem.getObjectFactory().getObject("IDBDatasourceService",null); //$NON-NLS-1$ IDBDatasourceService datasourceService = getDatasourceService(); String actualDSName = datasourceService.getDSBoundName( "Hibernate" ); //$NON-NLS-1$ HibernateUtil.configuration.setProperty( "hibernate.connection.datasource", actualDSName ); //$NON-NLS-1$ @@ -372,7 +370,7 @@ public static Session getSession() throws RepositoryException { HibernateUtil.log .debug( Messages.getInstance().getString( "HIBUTIL.DEBUG_USING_INTERCEPTOR" ) + HibernateUtil.getInterceptor().getClass() ); //$NON-NLS-1$ } - s = HibernateUtil.getSessionFactory().openSession(); + s = HibernateUtil.getSessionFactory().openSession( HibernateUtil.getInterceptor() ); } else { s = HibernateUtil.getSessionFactory().openSession(); } @@ -440,9 +438,11 @@ public static void beginTransaction() throws RepositoryException { * Commit the database transaction. */ public static void commitTransaction() throws RepositoryException { + // Boolean needed = (Boolean)commitNeeded.get(); + // if (needed.booleanValue()){ Transaction tx = (Transaction) HibernateUtil.threadTransaction.get(); try { - if ( ( tx != null ) && !tx.getStatus().isOneOf( COMMITTED ) && !tx.getStatus().isOneOf( ROLLED_BACK) ) { + if ( ( tx != null ) && !tx.wasCommitted() && !tx.wasRolledBack() ) { if ( HibernateUtil.debug ) { HibernateUtil.log.debug( Messages.getInstance().getString( "HIBUTIL.DEBUG_COMMIT_TRANS" ) ); //$NON-NLS-1$ } @@ -458,9 +458,14 @@ public static void commitTransaction() throws RepositoryException { if ( ex instanceof ConstraintViolationException ) { throw new RepositoryException( Messages.getInstance().getErrorString( "HIBUTIL.ERROR_0008_COMMIT_TRANS" ), ex ); //$NON-NLS-1$ } + // throw new + // RepositoryException(Messages.getInstance().getErrorString("HIBUTIL.ERROR_0008_COMMIT_TRANS"), + // ex); //$NON-NLS-1$ } finally { HibernateUtil.threadTransaction.set( null ); } + // } + // commitNeeded.set(Boolean.FALSE); } /** @@ -470,7 +475,7 @@ public static void rollbackTransaction() throws RepositoryException { Transaction tx = (Transaction) HibernateUtil.threadTransaction.get(); try { HibernateUtil.threadTransaction.set( null ); - if ( ( tx != null ) && !tx.getStatus().isOneOf( COMMITTED ) && !tx.getStatus().isOneOf( ROLLED_BACK) ) { + if ( ( tx != null ) && !tx.wasCommitted() && !tx.wasRolledBack() ) { if ( HibernateUtil.debug ) { HibernateUtil.log.debug( Messages.getInstance().getString( "HIBUTIL.DEBUG_ROLLBACK" ) ); //$NON-NLS-1$ } diff --git a/repository/src/main/java/org/pentaho/platform/repository/hibernate/usertypes/BlobUserType.java b/repository/src/main/java/org/pentaho/platform/repository/hibernate/usertypes/BlobUserType.java index 3dd7f6cca9e..90612bab57f 100644 --- a/repository/src/main/java/org/pentaho/platform/repository/hibernate/usertypes/BlobUserType.java +++ b/repository/src/main/java/org/pentaho/platform/repository/hibernate/usertypes/BlobUserType.java @@ -14,7 +14,7 @@ * See the GNU General Public License for more details. * * - * Copyright (c) 2002-2023 Hitachi Vantara. All rights reserved. + * Copyright (c) 2002-2018 Hitachi Vantara. All rights reserved. * */ @@ -29,10 +29,10 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.hibernate.HibernateException; -import org.hibernate.engine.spi.SharedSessionContractImplementor; import org.hibernate.type.SerializationException; import org.hibernate.usertype.UserType; -import org.hibernate.internal.util.SerializationHelper; +import org.hibernate.util.EqualsHelper; +import org.hibernate.util.SerializationHelper; import org.pentaho.platform.engine.core.system.PentahoSystem; import org.pentaho.platform.repository.messages.Messages; @@ -74,9 +74,7 @@ public Class returnedClass() { * @see org.hibernate.usertype.UserType#equals(java.lang.Object, java.lang.Object) */ public boolean equals( final Object arg0, final Object arg1 ) throws HibernateException { - //EqualsHelper removed after hibernate-core-5.3.1.Final.jar maybe just return equals( arg0, arg1 ); - //return EqualsHelper.equals( arg0, arg1 ); - return equals( arg0, arg1 ); + return EqualsHelper.equals( arg0, arg1 ); } /* @@ -88,18 +86,6 @@ public int hashCode( final Object arg0 ) throws HibernateException { return arg0.hashCode(); } - @Override - public Object nullSafeGet( ResultSet rs, String[] names, SharedSessionContractImplementor session, Object owner ) - throws HibernateException, SQLException { - return null; - } - - @Override - public void nullSafeSet( PreparedStatement st, Object value, int index, SharedSessionContractImplementor session ) - throws HibernateException, SQLException { - - } - /* * (non-Javadoc) * diff --git a/repository/src/main/java/org/pentaho/platform/repository/hibernate/usertypes/BlobtoByteArrayUserType.java b/repository/src/main/java/org/pentaho/platform/repository/hibernate/usertypes/BlobtoByteArrayUserType.java index 11f6b7c4060..56f9f376436 100644 --- a/repository/src/main/java/org/pentaho/platform/repository/hibernate/usertypes/BlobtoByteArrayUserType.java +++ b/repository/src/main/java/org/pentaho/platform/repository/hibernate/usertypes/BlobtoByteArrayUserType.java @@ -14,7 +14,7 @@ * See the GNU General Public License for more details. * * - * Copyright (c) 2002-2023 Hitachi Vantara. All rights reserved. + * Copyright (c) 2002-2018 Hitachi Vantara. All rights reserved. * */ @@ -29,7 +29,6 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.hibernate.HibernateException; -import org.hibernate.engine.spi.SharedSessionContractImplementor; import org.hibernate.type.SerializationException; import org.hibernate.usertype.UserType; import org.pentaho.platform.repository.messages.Messages; @@ -82,18 +81,6 @@ public int hashCode( final Object arg0 ) throws HibernateException { return arg0.hashCode(); } - @Override - public Object nullSafeGet( ResultSet rs, String[] names, SharedSessionContractImplementor session, Object owner ) - throws HibernateException, SQLException { - return null; - } - - @Override - public void nullSafeSet( PreparedStatement st, Object value, int index, SharedSessionContractImplementor session ) - throws HibernateException, SQLException { - - } - /* * (non-Javadoc) * diff --git a/repository/src/main/java/org/pentaho/platform/repository/hibernate/usertypes/EmptyStringUserType.java b/repository/src/main/java/org/pentaho/platform/repository/hibernate/usertypes/EmptyStringUserType.java index d6270a94547..ae7e9880809 100644 --- a/repository/src/main/java/org/pentaho/platform/repository/hibernate/usertypes/EmptyStringUserType.java +++ b/repository/src/main/java/org/pentaho/platform/repository/hibernate/usertypes/EmptyStringUserType.java @@ -14,7 +14,7 @@ * See the GNU General Public License for more details. * * - * Copyright (c) 2002-2023 Hitachi Vantara. All rights reserved. + * Copyright (c) 2002-2018 Hitachi Vantara. All rights reserved. * */ @@ -22,10 +22,10 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.hibernate.Hibernate; import org.hibernate.HibernateException; -import org.hibernate.engine.spi.SharedSessionContractImplementor; -import org.hibernate.type.StandardBasicTypes; import org.hibernate.usertype.UserType; +import org.hibernate.util.EqualsHelper; import org.pentaho.platform.engine.core.system.PentahoSystem; import org.pentaho.platform.repository.messages.Messages; @@ -69,7 +69,7 @@ public Class returnedClass() { * @see org.hibernate.usertype.UserType#equals(java.lang.Object, java.lang.Object) */ public boolean equals( final Object arg0, final Object arg1 ) throws HibernateException { - return equals( arg0, arg1 ); + return EqualsHelper.equals( arg0, arg1 ); } /* @@ -81,18 +81,6 @@ public int hashCode( final Object arg0 ) throws HibernateException { return arg0.hashCode(); } - @Override - public Object nullSafeGet( ResultSet rs, String[] names, SharedSessionContractImplementor session, Object owner ) - throws HibernateException, SQLException { - return null; - } - - @Override - public void nullSafeSet( PreparedStatement st, Object value, int index, SharedSessionContractImplementor session ) - throws HibernateException, SQLException { - - } - /* * (non-Javadoc) * @@ -103,8 +91,7 @@ public Object nullSafeGet( final ResultSet arg0, final String[] arg1, final Obje if ( EmptyStringUserType.debug ) { EmptyStringUserType.log.debug( Messages.getInstance().getString( "EMPTYSTRTYPE.DEBUG_NULL_SAFE_GET" ) ); //$NON-NLS-1$ } - - String colValue = (String) StandardBasicTypes.STRING.nullSafeGet( arg0, arg1[0] , null); + String colValue = (String) Hibernate.STRING.nullSafeGet( arg0, arg1[0] ); // _PENTAHOEMPTY_ shouldn't appear in the wild. So, check the string in // the DB for this flag, // and if it's there, then this must be an empty string. @@ -122,8 +109,7 @@ public void nullSafeSet( final PreparedStatement arg0, final Object arg1, final if ( EmptyStringUserType.debug ) { EmptyStringUserType.log.debug( Messages.getInstance().getString( "EMPTYSTRTYPE.DEBUG_NULL_SAFE_SET" ) ); //$NON-NLS-1$ } - - StandardBasicTypes.STRING.nullSafeSet( arg0, ( arg1 != null ) ? ( ( ( (String) arg1 ).length() > 0 ) ? arg1 + Hibernate.STRING.nullSafeSet( arg0, ( arg1 != null ) ? ( ( ( (String) arg1 ).length() > 0 ) ? arg1 : EmptyStringUserType.PENTAHOEMPTY ) : arg1, arg2, null ); } diff --git a/repository/src/main/java/org/pentaho/platform/repository/hibernate/usertypes/LongStringUserType.java b/repository/src/main/java/org/pentaho/platform/repository/hibernate/usertypes/LongStringUserType.java index 63123e91758..af60ef13292 100644 --- a/repository/src/main/java/org/pentaho/platform/repository/hibernate/usertypes/LongStringUserType.java +++ b/repository/src/main/java/org/pentaho/platform/repository/hibernate/usertypes/LongStringUserType.java @@ -14,7 +14,7 @@ * See the GNU General Public License for more details. * * - * Copyright (c) 2002-2023 Hitachi Vantara. All rights reserved. + * Copyright (c) 2002-2018 Hitachi Vantara. All rights reserved. * */ @@ -32,7 +32,6 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.hibernate.HibernateException; -import org.hibernate.engine.spi.SharedSessionContractImplementor; import org.hibernate.usertype.UserType; import org.pentaho.platform.engine.core.system.PentahoSystem; import org.pentaho.platform.repository.messages.Messages; @@ -44,8 +43,6 @@ import java.sql.SQLException; import java.sql.Types; -// UserType nullSafeGet() and nullSafeSet() different signature number of arguments we would have to implement the new methods -// nullSafeGet() and nullSafeSet() public class LongStringUserType implements UserType { private static final Log log = LogFactory.getLog( LongStringUserType.class ); @@ -95,18 +92,6 @@ public int hashCode( final Object x ) throws HibernateException { return x.hashCode(); } - @Override - public Object nullSafeGet( ResultSet rs, String[] names, SharedSessionContractImplementor session, Object owner ) - throws HibernateException, SQLException { - return null; - } - - @Override - public void nullSafeSet( PreparedStatement st, Object value, int index, SharedSessionContractImplementor session ) - throws HibernateException, SQLException { - - } - /* * (non-Javadoc) * From 29d584ccc5352570389e0da3bf11bdb332f12f76 Mon Sep 17 00:00:00 2001 From: Tim Kafalas tkafalas Date: Fri, 8 Dec 2023 16:39:03 -0500 Subject: [PATCH 24/31] [PPP-4826] Upgrade Vulnerable Hibernate to 5.4.24 --- .../pentaho-solutions/system/pentaho.xml | 2 +- .../system/hibernate/h2.hibernate.cfg.xml | 5 +- .../system/hibernate/hsql.hibernate.cfg.xml | 6 +- .../system/hibernate/mysql5.hibernate.cfg.xml | 5 +- .../hibernate/oracle10g.hibernate.cfg.xml | 5 +- .../hibernate/postgresql.hibernate.cfg.xml | 3 +- .../hibernate/sqlserver.hibernate.cfg.xml | 5 +- assemblies/pentaho-war/pom.xml | 2 +- core/pom.xml | 6 +- extensions/pom.xml | 59 ++++ .../plugin/services/cache/CacheManager.java | 257 ++++++++--------- .../plugin/services/cache/HvCache.java | 54 ++++ .../services/cache/HvCacheRegionFactory.java | 34 +++ .../services/cache/HvTimestampsRegion.java | 37 +++ .../services/cache/LastModifiedCache.java | 258 +++++++++++++----- .../resources/SystemConfig/system/pentaho.xml | 2 +- .../system/hibernate/hsql.hibernate.cfg.xml | 6 +- .../system/hibernate/mysql5.hibernate.cfg.xml | 4 +- .../hibernate/oracle10g.hibernate.cfg.xml | 4 +- .../hibernate/postgresql.hibernate.cfg.xml | 5 +- .../cache-solution/system/pentaho.xml | 2 +- .../system/hibernate/hsql.hibernate.cfg.xml | 6 +- .../system/hibernate/mysql5.hibernate.cfg.xml | 5 +- .../hibernate/oracle10g.hibernate.cfg.xml | 5 +- .../hibernate/postgresql.hibernate.cfg.xml | 5 +- .../cache-solution1/system/pentaho.xml | 2 +- .../system/hibernate/hsql.hibernate.cfg.xml | 6 +- .../system/hibernate/mysql5.hibernate.cfg.xml | 5 +- .../hibernate/oracle10g.hibernate.cfg.xml | 5 +- .../hibernate/postgresql.hibernate.cfg.xml | 5 +- .../cache-solution2/system/pentaho.xml | 2 +- .../connections-solution/system/pentaho.xml | 2 +- .../metadata-solution/system/pentaho.xml | 2 +- .../outputs-solution/system/pentaho.xml | 2 +- .../security-solution/system/pentaho.xml | 2 +- .../system/hibernate/hsql.hibernate.cfg.xml | 6 +- .../resources/solution/system/pentaho.xml | 2 +- .../solution1-no-config/system/pentaho.xml | 2 +- .../system/hibernate/hsql.hibernate.cfg.xml | 6 +- .../system/hibernate/mysql5.hibernate.cfg.xml | 5 +- .../hibernate/oracle10g.hibernate.cfg.xml | 5 +- .../hibernate/postgresql.hibernate.cfg.xml | 5 +- .../web-servlet-solution/system/pentaho.xml | 2 +- .../system/hibernate/hsql.hibernate.cfg.xml | 6 +- .../system/hibernate/mysql5.hibernate.cfg.xml | 5 +- .../hibernate/oracle10g.hibernate.cfg.xml | 5 +- .../hibernate/postgresql.hibernate.cfg.xml | 5 +- .../resources/web-solution/system/pentaho.xml | 2 +- pom.xml | 16 +- repository/pom.xml | 50 +++- .../hibernate/HibernateLoadEventListener.java | 8 +- .../repository/hibernate/HibernateUtil.java | 25 +- .../hibernate/usertypes/BlobUserType.java | 22 +- .../usertypes/BlobtoByteArrayUserType.java | 15 +- .../usertypes/EmptyStringUserType.java | 26 +- .../usertypes/LongStringUserType.java | 17 +- 56 files changed, 754 insertions(+), 296 deletions(-) create mode 100644 extensions/src/main/java/org/pentaho/platform/plugin/services/cache/HvCache.java create mode 100644 extensions/src/main/java/org/pentaho/platform/plugin/services/cache/HvCacheRegionFactory.java create mode 100644 extensions/src/main/java/org/pentaho/platform/plugin/services/cache/HvTimestampsRegion.java diff --git a/assemblies/pentaho-solutions/src/main/resources-filtered/pentaho-solutions/system/pentaho.xml b/assemblies/pentaho-solutions/src/main/resources-filtered/pentaho-solutions/system/pentaho.xml index 13b5002593c..6623321c078 100644 --- a/assemblies/pentaho-solutions/src/main/resources-filtered/pentaho-solutions/system/pentaho.xml +++ b/assemblies/pentaho-solutions/src/main/resources-filtered/pentaho-solutions/system/pentaho.xml @@ -64,7 +64,7 @@ --> - net.sf.ehcache.hibernate.SingletonEhCacheProvider + org.pentaho.platform.plugin.services.cache.HvCacheRegionFactory pentahoCache - - net.sf.ehcache.hibernate.SingletonEhCacheProvider + + org.hibernate.cache.EhCacheProvider + org.pentaho.platform.plugin.services.cache.HvCacheRegionFactory true true diff --git a/assemblies/pentaho-war/pom.xml b/assemblies/pentaho-war/pom.xml index 1d6c83891c5..3b9300bb917 100644 --- a/assemblies/pentaho-war/pom.xml +++ b/assemblies/pentaho-war/pom.xml @@ -18,7 +18,7 @@ ${prepared.war.directory}/WEB-INF/lib 1.3.3 ${basedir}/src/main/resources/datasources - 3.6.9.Final + 5.4.24.Final 3.0.1 0.9.1.2 1.0.12 diff --git a/core/pom.xml b/core/pom.xml index c48a913edb4..dfef11e89f3 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -370,7 +370,7 @@ - org.hibernate + org.hibernate.common hibernate-commons-annotations ${hibernate-commons-annotations.version} compile @@ -383,8 +383,8 @@ org.hibernate.javax.persistence - hibernate-jpa-2.0-api - ${hibernate-jpa-2.0-api.version} + hibernate-jpa-2.1-api + ${hibernate-jpa-2.1-api.version} compile diff --git a/extensions/pom.xml b/extensions/pom.xml index d1a7af10296..94b1771993e 100644 --- a/extensions/pom.xml +++ b/extensions/pom.xml @@ -487,6 +487,17 @@ + + org.hibernate + hibernate-ehcache + ${hibernate-ehcache.version} + + + * + * + + + org.antlr antlr-complete @@ -2754,6 +2765,54 @@ 4.10.0 test + + org.jboss.logging + jboss-logging + ${jboss-logging.version} + compile + + + * + * + + + + + com.fasterxml + classmate + ${classmate.version} + compile + + + * + * + + + + + javax.persistence + javax.persistence-api + ${javax.persistence-api.version} + compile + + + * + * + + + + + net.bytebuddy + byte-buddy + ${byte-buddy.version} + compile + + + * + * + + + diff --git a/extensions/src/main/java/org/pentaho/platform/plugin/services/cache/CacheManager.java b/extensions/src/main/java/org/pentaho/platform/plugin/services/cache/CacheManager.java index 23d7d380350..98ba6e06f8f 100644 --- a/extensions/src/main/java/org/pentaho/platform/plugin/services/cache/CacheManager.java +++ b/extensions/src/main/java/org/pentaho/platform/plugin/services/cache/CacheManager.java @@ -14,24 +14,32 @@ * See the GNU Lesser General Public License for more details. * * - * Copyright (c) 2002-2018 Hitachi Vantara. All rights reserved. + * Copyright (c) 2002-2023 Hitachi Vantara. All rights reserved. * */ package org.pentaho.platform.plugin.services.cache; +import net.sf.ehcache.Ehcache; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.dom4j.Element; -import org.hibernate.cache.Cache; +import org.hibernate.Cache; +import org.hibernate.SessionFactory; import org.hibernate.cache.CacheException; -import org.hibernate.cache.CacheProvider; +import org.hibernate.cache.spi.RegionFactory; +import org.hibernate.engine.spi.SessionFactoryImplementor; +import org.hibernate.event.service.spi.EventListenerRegistry; +import org.hibernate.event.spi.EventType; +import org.hibernate.internal.SessionImpl; import org.pentaho.platform.api.cache.ICacheExpirationRegistry; import org.pentaho.platform.api.engine.ICacheManager; import org.pentaho.platform.api.engine.IPentahoSession; import org.pentaho.platform.api.engine.ISystemSettings; import org.pentaho.platform.engine.core.system.PentahoSystem; import org.pentaho.platform.engine.services.messages.Messages; +import org.pentaho.platform.repository.hibernate.HibernateLoadEventListener; +import org.pentaho.platform.repository.hibernate.HibernateUtil; import org.pentaho.platform.util.xml.dom4j.XmlDom4JHelper; import java.util.ArrayList; @@ -41,17 +49,18 @@ import java.util.Map; import java.util.Properties; import java.util.Set; +import java.util.stream.Collectors; /** * This class provides an access point for pluggable caching mechanisms. Right now, it only supports the caching - * mechanisms implemented in org.hibernate.cache. + * mechanisms implemented in org.hibernate.cache for Timestamp Regions. *

* To use the cache manager, you need to include the following information in your pentaho.xml. * *

  * 
  *  <cache-provider>
- *    <class>org.hibernate.cache.xxxxxxxx</class>
+ *    <class>org.pentaho.platform.plugin.services.cache.HvCacheRegionFactory</class>
  *    <region>pentahoCache</region>
  *    <properties>
  *      <property name="someProperty">someValue</property>
@@ -60,12 +69,13 @@
  * 
* *

- * The specified class must implement the org.hibernate.cache.CacheProvider interface. + * The specified class must extend org.hibernate.cache.spi.AbstractRegionFactory and/or implement + * org.hibernate.cache.spi.RegionFactory. *

- * Each implementation of the org.hibernate.cache.CacheProvider has slightly different requirements with - * respect to the required input parameters - so, please see the classes in that package for more information (available - * from the Sourceforge Hibernate project). Also, some cache providers (notably the - * org.hibernate.cache.EhCacheProvider) completely ignore the passed in properties, and only configure + * Each implementation of the org.hibernate.cache.spi.RegionFactory has slightly + * different requirements with respect to the required input parameters - so, please see the classes in that package + * for more information (available from the Sourceforge Hibernate project). Also, some region factories (notably the + * org.hibernate.cache.EhCacheRegionFactory) completely ignore the passed in properties, and only configure * themselves by locating a configuration file (e.g. ehcache.xml) on the classpath. * *

@@ -105,8 +115,8 @@ * *

* - * @see org.hibernate.cache.CacheProvider - * @see org.hibernate.cache.Cache + * @see org.hibernate.cache.RegionFactory + * @see org.hibernate.Cache * * @author mbatchel * @@ -115,11 +125,11 @@ public class CacheManager implements ICacheManager { protected static final Log logger = LogFactory.getLog( CacheManager.class ); // ~ Instance Fields ====================================================== - private CacheProvider cacheProvider; + private RegionFactory regionFactory; private Map regionCache; - private String cacheProviderClassName; + private String regionFactoryClassname; private boolean cacheEnabled; @@ -152,10 +162,10 @@ public CacheManager() { System.setProperty( "java.io.tmpdir", s + "/" ); //$NON-NLS-1$//$NON-NLS-2$ } if ( settings != null ) { - cacheProviderClassName = settings.getSystemSetting( "cache-provider/class", null ); //$NON-NLS-1$ - if ( cacheProviderClassName != null ) { + regionFactoryClassname = settings.getSystemSetting( "cache-provider/class", null ); //$NON-NLS-1$ + if ( regionFactoryClassname != null ) { Properties cacheProperties = getCacheProperties( settings ); - setupCacheProvider( cacheProperties ); + setupRegionProvider( cacheProperties ); this.cacheEnabled = true; } } @@ -163,23 +173,26 @@ public CacheManager() { PentahoSystem.addLogoutListener( this ); } - protected void setupCacheProvider( Properties cacheProperties ) { - Object obj = PentahoSystem.createObject( cacheProviderClassName ); + protected void setupRegionProvider( Properties cacheProperties ) { + Object obj = PentahoSystem.createObject( regionFactoryClassname ); //Should be an HvCacheRegionFactory cacheExpirationRegistry = PentahoSystem.get( ICacheExpirationRegistry.class, null ); if ( null != obj ) { - if ( obj instanceof CacheProvider ) { - this.cacheProvider = (CacheProvider) obj; - cacheProvider.start( cacheProperties ); + if ( obj instanceof RegionFactory ) { + this.regionFactory = (RegionFactory) obj; //cacheProvider changed to regionFactory for hibernate 5.3 + regionFactory.start( HibernateUtil.getSessionFactory().getSessionFactoryOptions(), cacheProperties ); regionCache = new HashMap(); - Cache cache = buildCache( SESSION, cacheProperties ); + ( (SessionFactoryImplementor) HibernateUtil.getSessionFactory() ).getServiceRegistry() + .getService( EventListenerRegistry.class ).prependListeners( + EventType.LOAD, new HibernateLoadEventListener() ); + Cache cache = buildCache( SESSION, HibernateUtil.getSessionFactory(), cacheProperties ); if ( cache == null ) { CacheManager.logger .error( Messages.getInstance().getString( "CacheManager.ERROR_0005_UNABLE_TO_BUILD_CACHE" ) ); //$NON-NLS-1$ } else { regionCache.put( SESSION, cache ); } - cache = buildCache( GLOBAL, cacheProperties ); + cache = buildCache( GLOBAL, HibernateUtil.getSessionFactory(), cacheProperties ); if ( cache == null ) { CacheManager.logger .error( Messages.getInstance().getString( "CacheManager.ERROR_0005_UNABLE_TO_BUILD_CACHE" ) ); //$NON-NLS-1$ @@ -196,17 +209,17 @@ protected void setupCacheProvider( Properties cacheProperties ) { public void cacheStop() { if ( cacheEnabled ) { regionCache.clear(); - cacheProvider.stop(); + regionFactory.stop(); } } /** - * Returns the underlying cache provider (implements org.hibernate.cache.CacheProvider + * Returns the underlying regionFactory (implements org.hibernate.cache.RegionFactory) * - * @return cacheProvider. + * @return regionFactory. */ - protected CacheProvider getCacheProvider() { - return cacheProvider; + protected RegionFactory getRegionFactory() { + return regionFactory; } /** @@ -246,9 +259,9 @@ public void onLogout( final IPentahoSession session ) { public boolean addCacheRegion( String region, Properties cacheProperties ) { boolean returnValue = false; - if ( cacheEnabled ) { + if ( checkCacheEnabled() ) { if ( !cacheEnabled( region ) ) { - Cache cache = buildCache( region, cacheProperties ); + Cache cache = (Cache) buildCache( region, HibernateUtil.getSessionFactory(), cacheProperties ); if ( cache == null ) { CacheManager.logger .error( Messages.getInstance().getString( "CacheManager.ERROR_0005_UNABLE_TO_BUILD_CACHE" ) ); //$NON-NLS-1$ @@ -260,17 +273,15 @@ public boolean addCacheRegion( String region, Properties cacheProperties ) { CacheManager.logger.warn( Messages.getInstance().getString( "CacheManager.WARN_0002_REGION_ALREADY_EXIST", region ) ); //$NON-NLS-1$ } - } else { - CacheManager.logger.warn( Messages.getInstance().getString( "CacheManager.WARN_0001_CACHE_NOT_ENABLED" ) ); //$NON-NLS-1$ } return returnValue; } public boolean addCacheRegion( String region ) { boolean returnValue = false; - if ( cacheEnabled ) { + if ( checkCacheEnabled() ) { if ( !cacheEnabled( region ) ) { - Cache cache = buildCache( region, null ); + Cache cache = (Cache) buildCache( region, HibernateUtil.getSessionFactory(), null ); if ( cache == null ) { CacheManager.logger .error( Messages.getInstance().getString( "CacheManager.ERROR_0005_UNABLE_TO_BUILD_CACHE" ) ); //$NON-NLS-1$ @@ -283,14 +294,12 @@ public boolean addCacheRegion( String region ) { "CacheManager.WARN_0002_REGION_ALREADY_EXIST", region ) ); //$NON-NLS-1$ returnValue = true; } - } else { - CacheManager.logger.warn( Messages.getInstance().getString( "CacheManager.WARN_0001_CACHE_NOT_ENABLED" ) ); //$NON-NLS-1$ } return returnValue; } public boolean addCacheRegion( String region, Cache cache ) { - if ( cacheEnabled ) { + if ( checkCacheEnabled() ) { if ( !cacheEnabled( region ) ) { regionCache.put( region, cache ); } else { @@ -298,18 +307,17 @@ public boolean addCacheRegion( String region, Cache cache ) { "CacheManager.WARN_0002_REGION_ALREADY_EXIST", region ) ); } } else { - CacheManager.logger.warn( Messages.getInstance().getString( "CacheManager.WARN_0001_CACHE_NOT_ENABLED" ) ); return false; } return true; } public void clearRegionCache( String region ) { - if ( cacheEnabled ) { + if ( checkCacheEnabled() ) { Cache cache = regionCache.get( region ); if ( cache != null ) { try { - cache.clear(); + cache.evictAll(); } catch ( CacheException e ) { CacheManager.logger.error( Messages.getInstance().getString( "CacheManager.ERROR_0006_CACHE_EXCEPTION", e.getLocalizedMessage() ) ); //$NON-NLS-1$ @@ -318,61 +326,43 @@ public void clearRegionCache( String region ) { CacheManager.logger.info( Messages.getInstance().getString( "CacheManager.INFO_0001_CACHE_DOES_NOT_EXIST", region ) ); //$NON-NLS-1$ } - } else { - CacheManager.logger.warn( Messages.getInstance().getString( "CacheManager.WARN_0001_CACHE_NOT_ENABLED" ) ); //$NON-NLS-1$ } } public void removeRegionCache( String region ) { - if ( cacheEnabled ) { - if ( cacheEnabled( region ) ) { - clearRegionCache( region ); - } else { - CacheManager.logger.info( Messages.getInstance().getString( - "CacheManager.INFO_0001_CACHE_DOES_NOT_EXIST", region ) ); //$NON-NLS-1$ - } - } else { - CacheManager.logger.warn( Messages.getInstance().getString( "CacheManager.WARN_0001_CACHE_NOT_ENABLED" ) ); //$NON-NLS-1$ + if ( checkRegionEnabled( region ) ) { + clearRegionCache( region ); } } public void putInRegionCache( String region, Object key, Object value ) { - if ( cacheEnabled ) { - if ( cacheEnabled( region ) ) { - Cache cache = regionCache.get( region ); - cache.put( key, value ); - } else { - CacheManager.logger.warn( Messages.getInstance().getString( - "CacheManager.WARN_0003_REGION_DOES_NOT_EXIST", region ) ); //$NON-NLS-1$ + if ( checkRegionEnabled( region ) ) { + HvCache hvcache = (HvCache) regionCache.get( region ); //This is our LastModifiedCache or CarteStatusCache + try ( SessionImpl session = (SessionImpl) hvcache.getSessionFactory().openSession() ) { + hvcache.getDirectAccessRegion().putIntoCache( key, value, session ); } - } else { - CacheManager.logger.warn( Messages.getInstance().getString( "CacheManager.WARN_0001_CACHE_NOT_ENABLED" ) ); //$NON-NLS-1$ } } public Object getFromRegionCache( String region, Object key ) { Object returnValue = null; - if ( cacheEnabled ) { - Cache cache = regionCache.get( region ); - if ( cacheEnabled( region ) ) { - returnValue = cache.get( key ); - } else { - CacheManager.logger.warn( Messages.getInstance().getString( - "CacheManager.WARN_0003_REGION_DOES_NOT_EXIST", region ) ); //$NON-NLS-1$ + if ( checkRegionEnabled( region ) ) { + HvCache hvcache = (HvCache) regionCache.get( region ); //This is our LastModifiedCache or CarteStatusCache + try ( SessionImpl session = (SessionImpl) hvcache.getSessionFactory().openSession() ) { + + return ( (HvCache) hvcache ).getDirectAccessRegion().getFromCache( key, session ); } - } else { - CacheManager.logger.warn( Messages.getInstance().getString( "CacheManager.WARN_0001_CACHE_NOT_ENABLED" ) ); //$NON-NLS-1$ } - return returnValue; } public List getAllValuesFromRegionCache( String region ) { List list = new ArrayList(); - if ( cacheEnabled ) { - Cache cache = regionCache.get( region ); - if ( cacheEnabled( region ) ) { - Map cacheMap = cache.toMap(); + if ( checkRegionEnabled( region ) ) { + HvCache hvcache = (HvCache) regionCache.get( region ); //This is our LastModifiedCache or CarteStatusCache + try ( SessionImpl session = (SessionImpl) hvcache.getSessionFactory().openSession() ) { + Ehcache ehcache = hvcache.getStorageAccess().getCache(); + Map cacheMap = ehcache.getAll( ehcache.getKeys() ); if ( cacheMap != null ) { Iterator it = cacheMap.entrySet().iterator(); while ( it.hasNext() ) { @@ -381,55 +371,38 @@ public List getAllValuesFromRegionCache( String region ) { } } } - } else { - CacheManager.logger.warn( Messages.getInstance().getString( "CacheManager.WARN_0001_CACHE_NOT_ENABLED" ) ); //$NON-NLS-1$ } return list; } public Set getAllKeysFromRegionCache( String region ) { - Set set = null; - if ( cacheEnabled ) { - Cache cache = regionCache.get( region ); - if ( cacheEnabled( region ) ) { - Map cacheMap = cache.toMap(); - if ( cacheMap != null ) { - set = cacheMap.keySet(); - } + if ( checkRegionEnabled( region ) ) { + HvCache hvcache = (HvCache) regionCache.get( region ); //This is our LastModifiedCache or CarteStatusCache + try ( SessionImpl session = (SessionImpl) hvcache.getSessionFactory().openSession() ) { + return hvcache.getAllKeys(); } - } else { - CacheManager.logger.warn( Messages.getInstance().getString( "CacheManager.WARN_0001_CACHE_NOT_ENABLED" ) ); //$NON-NLS-1$ } - return set; + return null; } public Set getAllEntriesFromRegionCache( String region ) { - Set set = null; - if ( cacheEnabled ) { - Cache cache = regionCache.get( region ); - if ( cacheEnabled( region ) ) { - Map cacheMap = cache.toMap(); - if ( cacheMap != null ) { - set = cacheMap.entrySet(); - } + if ( checkRegionEnabled( region ) ) { + HvCache hvcache = (HvCache) regionCache.get( region ); //This is our LastModifiedCache or CarteStatusCache + try ( SessionImpl session = (SessionImpl) hvcache.getSessionFactory().openSession() ) { + Ehcache ehcache = hvcache.getStorageAccess().getCache(); + return ehcache.getAll( ehcache.getKeys() ).values().stream().collect( Collectors.toSet() ); } - } else { - CacheManager.logger.warn( Messages.getInstance().getString( "CacheManager.WARN_0001_CACHE_NOT_ENABLED" ) ); //$NON-NLS-1$ } - return set; + return null; } public void removeFromRegionCache( String region, Object key ) { - if ( cacheEnabled ) { - Cache cache = regionCache.get( region ); - if ( cacheEnabled( region ) ) { - cache.remove( key ); - } else { - CacheManager.logger.warn( Messages.getInstance().getString( - "CacheManager.WARN_0003_REGION_DOES_NOT_EXIST", region ) ); //$NON-NLS-1$ - } + if ( checkRegionEnabled( region ) ) { + HvCache hvcache = (HvCache) regionCache.get( region ); + hvcache.evictEntityData( (String) key ); } else { - CacheManager.logger.warn( Messages.getInstance().getString( "CacheManager.WARN_0001_CACHE_NOT_ENABLED" ) ); //$NON-NLS-1$ + CacheManager.logger.warn( Messages.getInstance().getString( + "CacheManager.WARN_0003_REGION_DOES_NOT_EXIST", region ) ); //$NON-NLS-1$ } } @@ -445,7 +418,7 @@ public void clearCache() { String key = ( entry.getKey() != null ) ? entry.getKey().toString() : ""; //$NON-NLS-1$ if ( key != null ) { Cache cache = regionCache.get( key ); - cache.clear(); + cache.evictAll(); } } } @@ -461,16 +434,16 @@ public Object getFromSessionCache( IPentahoSession session, String key ) { public void killSessionCache( IPentahoSession session ) { if ( cacheEnabled ) { - Cache cache = regionCache.get( SESSION ); - if ( cache != null ) { - Map cacheMap = cache.toMap(); + HvCache hvcache = (HvCache) regionCache.get( SESSION ); + if ( hvcache != null ) { + Ehcache ehcache = hvcache.getStorageAccess().getCache(); + Map cacheMap = ehcache.getAll( ehcache.getKeys() ); if ( cacheMap != null ) { - Set set = cacheMap.keySet(); - Iterator it = set.iterator(); + Iterator it = cacheMap.keySet().iterator(); while ( it.hasNext() ) { String key = (String) it.next(); if ( key.indexOf( session.getId() ) >= 0 ) { - cache.remove( key ); + hvcache.evictEntityData( key ); } } } @@ -508,10 +481,11 @@ private String getCorrectedKey( final IPentahoSession session, final String key } } - private LastModifiedCache buildCache( String key, Properties cacheProperties ) { - if ( getCacheProvider() != null ) { - Cache cache = getCacheProvider().buildCache( key, cacheProperties ); - LastModifiedCache lmCache = new LastModifiedCache( cache ); + private LastModifiedCache buildCache( String key, SessionFactory sessionFactory, Properties cacheProperties ) { + if ( getRegionFactory() != null ) { + HvTimestampsRegion timestampsRegion = (HvTimestampsRegion ) + getRegionFactory().buildTimestampsRegion( key, (SessionFactoryImplementor) sessionFactory ); + LastModifiedCache lmCache = new LastModifiedCache( timestampsRegion, sessionFactory ); if ( cacheExpirationRegistry != null ) { cacheExpirationRegistry.register( lmCache ); } else { @@ -526,12 +500,13 @@ private LastModifiedCache buildCache( String key, Properties cacheProperties ) { @Override public long getElementCountInRegionCache( String region ) { - if ( cacheEnabled ) { - Cache cache = regionCache.get( region ); - if ( cache != null ) { + if ( checkRegionEnabled( region ) ) { + HvCache hvcache = (HvCache) regionCache.get( region ); + Ehcache ehcache = hvcache.getStorageAccess().getCache(); + if ( hvcache != null ) { try { - long memCnt = cache.getElementCountInMemory(); - long discCnt = cache.getElementCountOnDisk(); + long memCnt = ehcache.getStatistics().getMemoryStoreObjectCount(); + long discCnt = ehcache.getStatistics().getDiskStoreObjectCount(); return memCnt + discCnt; } catch ( Exception ignored ) { return -1; @@ -553,4 +528,38 @@ public long getElementCountInSessionCache() { public long getElementCountInGlobalCache() { return getElementCountInRegionCache( GLOBAL ); } + + private boolean checkRegionEnabled( String region ) { + if ( checkCacheEnabled() ) { + if ( cacheEnabled( region ) ) { + return true; + } else { + CacheManager.logger.warn( Messages.getInstance().getString( + "CacheManager.WARN_0003_REGION_DOES_NOT_EXIST", region ) ); + } + } + return false; + } + + private boolean checkCacheEnabled() { + if ( cacheEnabled ) { + return true; + } else { + CacheManager.logger.warn( + Messages.getInstance().getString( "CacheManager.WARN_0001_CACHE_NOT_ENABLED" ) ); //$NON-NLS-1$ + } + return false; + } + + private boolean checkRegionNonExistent( String region ) { + if ( checkCacheEnabled() ) { + if ( cacheEnabled( region ) ) { + CacheManager.logger.warn( Messages.getInstance().getString( + "CacheManager.WARN_0002_REGION_ALREADY_EXIST", region ) ); //$NON-NLS-1$ + } else { + return true; + } + } + return false; + } } diff --git a/extensions/src/main/java/org/pentaho/platform/plugin/services/cache/HvCache.java b/extensions/src/main/java/org/pentaho/platform/plugin/services/cache/HvCache.java new file mode 100644 index 00000000000..4cb7eca7a47 --- /dev/null +++ b/extensions/src/main/java/org/pentaho/platform/plugin/services/cache/HvCache.java @@ -0,0 +1,54 @@ +/*! + * + * This program is free software; you can redistribute it and/or modify it under the + * terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software + * Foundation. + * + * You should have received a copy of the GNU Lesser General Public License along with this + * program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html + * or from the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU Lesser General Public License for more details. + * + * + * Copyright (c) 2002-2023 Hitachi Vantara. All rights reserved. + * + */ +package org.pentaho.platform.plugin.services.cache; + +import net.sf.ehcache.Ehcache; +import org.hibernate.Cache; +import org.hibernate.cache.ehcache.internal.StorageAccessImpl; +import org.hibernate.cache.spi.DirectAccessRegion; + +import java.util.Set; + +public interface HvCache extends Cache { + /** + * Return all keys for the region + * @return + */ + Set getAllKeys( ); + + /** + * Return built in cache access + * @return + */ + DirectAccessRegion getDirectAccessRegion(); + + /** + * Return the object that allows direct storage access + * @return + */ + StorageAccessImpl getStorageAccess(); + + /** + * Exposes the underlaying EhCache associated with this HvCache + * @return The EhCache + */ + Ehcache getCache(); + +} diff --git a/extensions/src/main/java/org/pentaho/platform/plugin/services/cache/HvCacheRegionFactory.java b/extensions/src/main/java/org/pentaho/platform/plugin/services/cache/HvCacheRegionFactory.java new file mode 100644 index 00000000000..c77781773f7 --- /dev/null +++ b/extensions/src/main/java/org/pentaho/platform/plugin/services/cache/HvCacheRegionFactory.java @@ -0,0 +1,34 @@ +/*! + * + * This program is free software; you can redistribute it and/or modify it under the + * terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software + * Foundation. + * + * You should have received a copy of the GNU Lesser General Public License along with this + * program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html + * or from the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU Lesser General Public License for more details. + * + * + * Copyright (c) 2002-2023 Hitachi Vantara. All rights reserved. + * + */ +package org.pentaho.platform.plugin.services.cache; + +import org.hibernate.cache.ehcache.internal.SingletonEhcacheRegionFactory; +import org.hibernate.cache.spi.TimestampsRegion; +import org.hibernate.engine.spi.SessionFactoryImplementor; + +public class HvCacheRegionFactory extends SingletonEhcacheRegionFactory { + @Override + public TimestampsRegion buildTimestampsRegion( + String regionName, SessionFactoryImplementor sessionFactory) { + verifyStarted(); + return new HvTimestampsRegion( + regionName, this, createTimestampsRegionStorageAccess( regionName, sessionFactory ) ); + } +} diff --git a/extensions/src/main/java/org/pentaho/platform/plugin/services/cache/HvTimestampsRegion.java b/extensions/src/main/java/org/pentaho/platform/plugin/services/cache/HvTimestampsRegion.java new file mode 100644 index 00000000000..00307d58f30 --- /dev/null +++ b/extensions/src/main/java/org/pentaho/platform/plugin/services/cache/HvTimestampsRegion.java @@ -0,0 +1,37 @@ +/*! + * + * This program is free software; you can redistribute it and/or modify it under the + * terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software + * Foundation. + * + * You should have received a copy of the GNU Lesser General Public License along with this + * program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html + * or from the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU Lesser General Public License for more details. + * + * + * Copyright (c) 2002-2023 Hitachi Vantara. All rights reserved. + * + */ +package org.pentaho.platform.plugin.services.cache; + +import org.hibernate.cache.ehcache.internal.StorageAccessImpl; +import org.hibernate.cache.spi.RegionFactory; +import org.hibernate.cache.spi.support.StorageAccess; +import org.hibernate.cache.spi.support.TimestampsRegionTemplate; + +public class HvTimestampsRegion extends TimestampsRegionTemplate { + StorageAccess storageAccess; + + public HvTimestampsRegion( String name, RegionFactory regionFactory, StorageAccess storageAccess) { + super( name, regionFactory, storageAccess ); + } + + public StorageAccessImpl getStorageAccess() { + return (StorageAccessImpl) super.getStorageAccess(); + } +} diff --git a/extensions/src/main/java/org/pentaho/platform/plugin/services/cache/LastModifiedCache.java b/extensions/src/main/java/org/pentaho/platform/plugin/services/cache/LastModifiedCache.java index c68e8a1437b..ecbb121b913 100644 --- a/extensions/src/main/java/org/pentaho/platform/plugin/services/cache/LastModifiedCache.java +++ b/extensions/src/main/java/org/pentaho/platform/plugin/services/cache/LastModifiedCache.java @@ -14,41 +14,73 @@ * See the GNU Lesser General Public License for more details. * * - * Copyright (c) 2002-2018 Hitachi Vantara. All rights reserved. + * Copyright (c) 2002-2023 Hitachi Vantara. All rights reserved. * */ - package org.pentaho.platform.plugin.services.cache; -import org.hibernate.cache.Cache; -import org.hibernate.cache.CacheException; +import net.sf.ehcache.Ehcache; +import org.apache.commons.lang3.NotImplementedException; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.hibernate.MappingException; +import org.hibernate.SessionFactory; +import org.hibernate.cache.ehcache.internal.StorageAccessImpl; +import org.hibernate.cache.spi.DirectAccessRegion; +import org.hibernate.cache.spi.RegionFactory; +import org.hibernate.cache.spi.access.EntityDataAccess; +import org.hibernate.cache.spi.access.NaturalIdDataAccess; +import org.hibernate.engine.spi.SessionFactoryImplementor; +import org.hibernate.metamodel.model.domain.NavigableRole; +import org.hibernate.metamodel.spi.MetamodelImplementor; +import org.hibernate.persister.collection.CollectionPersister; +import org.hibernate.persister.entity.EntityPersister; +import org.hibernate.pretty.MessageHelper; import org.pentaho.platform.api.cache.ILastModifiedCacheItem; +import javax.persistence.PersistenceException; +import java.io.Serializable; import java.util.Date; -import java.util.Map; +import java.util.HashSet; +import java.util.Set; /** * User: rfellows Date: 10/25/11 Time: 3:53 PM */ -public class LastModifiedCache implements ILastModifiedCacheItem, Cache { - private Cache cache; +public class LastModifiedCache implements ILastModifiedCacheItem, HvCache { + private DirectAccessRegion directAccessRegion; //Should be an instanceof HvTimestampsRegion + private SessionFactoryImplementor sessionFactory; + private RegionFactory regionFactory; + private long lastModified; + protected static final Log LOGGER = LogFactory.getLog( LastModifiedCache.class ); - public LastModifiedCache( Cache cache ) { - this.cache = cache; + public LastModifiedCache( DirectAccessRegion directAccessRegion, SessionFactory sessionFactory ) { + setInstanceVariables( directAccessRegion, sessionFactory ); setLastModified(); } - public LastModifiedCache( Cache cache, long lastModified ) { - this.cache = cache; + public LastModifiedCache( DirectAccessRegion directAccessRegion, SessionFactory sessionFactory, long lastModified ) { + setInstanceVariables( directAccessRegion, sessionFactory ); this.lastModified = lastModified; } + private void setInstanceVariables( DirectAccessRegion directAccessRegion, SessionFactory sessionFactory ) { + this.directAccessRegion = directAccessRegion; + this.sessionFactory = (SessionFactoryImplementor) sessionFactory; + this.regionFactory = + getSessionFactory().getSessionFactoryOptions().getServiceRegistry().getService( RegionFactory.class ); + } + @Override public long getLastModified() { return lastModified; } + @Override public String getCacheKey() { + return directAccessRegion.getName(); + } + public void setLastModified( long lastModified ) { this.lastModified = lastModified; } @@ -57,97 +89,197 @@ protected void setLastModified() { this.lastModified = new Date().getTime(); } - @Override - public String getCacheKey() { - return cache.getRegionName(); + @Override public SessionFactoryImplementor getSessionFactory() { + return sessionFactory; } - @Override - public Object read( Object o ) throws CacheException { - return cache.read( o ); + @Override public boolean containsEntity( Class entityClass, Serializable identifier ) { + return this.containsEntity(entityClass.getName(), identifier); } - @Override - public Object get( Object o ) throws CacheException { - return cache.get( o ); + @Override public boolean containsEntity( String entityName, Serializable identifier ) { + EntityPersister entityDescriptor = this.sessionFactory.getMetamodel().entityPersister(entityName); + EntityDataAccess cacheAccess = entityDescriptor.getCacheAccessStrategy(); + if (cacheAccess == null) { + return false; + } else { + Object key = cacheAccess.generateCacheKey(identifier, entityDescriptor, this.sessionFactory, (String) null); + return cacheAccess.contains(key); + } } - @Override - public void put( Object o, Object o1 ) throws CacheException { - cache.put( o, o1 ); - setLastModified(); + @Override public void evictEntityData( Class entityClass, Serializable identifier ) { + evictEntityData( entityClass.getName(), identifier ); } - @Override - public void update( Object o, Object o1 ) throws CacheException { - cache.update( o, o1 ); - setLastModified(); + @Override public void evictEntityData( String entityName, Serializable identifier ) { + final EntityPersister entityDescriptor = sessionFactory.getMetamodel().entityPersister( entityName ); + final EntityDataAccess cacheAccess = entityDescriptor.getCacheAccessStrategy(); + if ( cacheAccess == null ) { + return; + } + + if ( LOGGER.isDebugEnabled() ) { + LOGGER.debug( String.format( "Evicting second-level cache: %s", + MessageHelper.infoString( entityDescriptor, identifier, sessionFactory ) ) ); + } + + final Object key = cacheAccess.generateCacheKey( identifier, entityDescriptor, sessionFactory, null ); + cacheAccess.evict( key ); } - @Override - public void remove( Object o ) throws CacheException { - cache.remove( o ); - setLastModified(); + @Override public void evictEntityData( Class entityClass ) { + evictEntityData( entityClass.getName() ); } - @Override - public void clear() throws CacheException { - cache.clear(); - setLastModified(); + @Override public void evictEntityData( String entityName ) { + try { + evictEntityData( getSessionFactory().getMetamodel().entityPersister( entityName ) ); + } catch ( MappingException e) { + //Nothing to do if the entry is not there. + } } - @Override - public void destroy() throws CacheException { - cache.destroy(); - setLastModified(); + @Override public void evictEntityData() { + sessionFactory.getMetamodel().entityPersisters().values().forEach( this::evictEntityData ); } @Override - public void lock( Object o ) throws CacheException { - cache.lock( o ); + public void evictNaturalIdData( Class entityClass ) { + throwNotImplemented(); } @Override - public void unlock( Object o ) throws CacheException { - cache.unlock( o ); + public void evictNaturalIdData( String entityName ) { + throwNotImplemented(); } @Override - public long nextTimestamp() { - return cache.nextTimestamp(); + public void evictNaturalIdData() { + throwNotImplemented(); } - @Override - public int getTimeout() { - return cache.getTimeout(); + private void evictNaturalIdData(NavigableRole rootEntityRole, NaturalIdDataAccess cacheAccess) { + throwNotImplemented(); } @Override - public String getRegionName() { - return cache.getRegionName(); + public boolean containsCollection(String role, Serializable ownerIdentifier) { + throwNotImplemented(); + return false; } @Override - public long getSizeInMemory() { - return cache.getSizeInMemory(); - } + public void evictCollectionData(String role, Serializable ownerIdentifier) { + throwNotImplemented(); + } @Override - public long getElementCountInMemory() { - return cache.getElementCountInMemory(); + public void evictCollectionData(String role) { + throwNotImplemented(); + } + + private void evictCollectionData( CollectionPersister collectionDescriptor) { + throwNotImplemented(); + } + + @Override public void evictCollectionData() { + throwNotImplemented(); + } + + @Override public boolean containsQuery( String regionName ) { + throwNotImplemented(); + return false; + } + + @Override public void evictDefaultQueryRegion() { + throwNotImplemented(); + } + + @Override public void evictQueryRegion( String regionName ) { + throwNotImplemented(); + } + + @Override public void evictQueryRegions() { + throwNotImplemented(); + } + + @Override public void evictRegion( String regionName ) { + throwNotImplemented(); } @Override - public long getElementCountOnDisk() { - return cache.getElementCountOnDisk(); + public boolean contains(Class cls, Object primaryKey) { + // JPA + return containsEntity( cls, (Serializable) primaryKey ); } @Override - public Map toMap() { - try { - return cache.toMap(); - } catch ( Exception e ) { - return null; + public void evict(Class cls, Object primaryKey) { + // JPA call + evictEntityData( cls, (Serializable) primaryKey ); + } + + @Override public void evict( Class aClass ) { + // JPA + evictEntityData( aClass ); + } + + @SuppressWarnings("unchecked") + public T unwrap(Class cls) { + if ( org.hibernate.Cache.class.isAssignableFrom( cls ) ) { + return (T) this; + } + + if ( RegionFactory.class.isAssignableFrom( cls ) ) { + return (T) regionFactory; + } + + throw new PersistenceException( "Hibernate cannot unwrap Cache as " + cls.getName() ); + } + + @Override public Set getAllKeys() { + Ehcache ehcache = getStorageAccess().getCache(); + return new HashSet( ehcache.getKeys() ); + } + + @Override public DirectAccessRegion getDirectAccessRegion() { + return directAccessRegion; + } + + private void evictEntityData( EntityPersister entityDescriptor ) { + EntityPersister rootEntityDescriptor = entityDescriptor; + if ( entityDescriptor.isInherited() + && !entityDescriptor.getEntityName().equals( entityDescriptor.getRootEntityName() ) ) { + rootEntityDescriptor = ( (MetamodelImplementor) getSessionFactory().getMetamodel() ).locateEntityPersister( + entityDescriptor.getRootEntityName() ); + } + + evictEntityData( rootEntityDescriptor.getNavigableRole(), rootEntityDescriptor.getCacheAccessStrategy() ); + + } + + private void evictEntityData( NavigableRole navigableRole, EntityDataAccess cacheAccess) { + if ( cacheAccess == null ) { + return; } + + if ( LOGGER.isDebugEnabled() ) { + LOGGER.debug( String.format( "Evicting entity cache: %s", navigableRole.getFullPath() ) ); + } + + cacheAccess.evictAll(); + } + + @Override public StorageAccessImpl getStorageAccess(){ + return ( (HvTimestampsRegion) directAccessRegion ).getStorageAccess(); + } + + @Override public Ehcache getCache() { + return getStorageAccess().getCache(); + } + + private void throwNotImplemented(){ + throw new NotImplementedException( "Method not Implemented with upgrade to hibernate 5.4.24"); } } diff --git a/extensions/src/test/resources/SystemConfig/system/pentaho.xml b/extensions/src/test/resources/SystemConfig/system/pentaho.xml index ea8c9d848b2..8dccf29a75c 100644 --- a/extensions/src/test/resources/SystemConfig/system/pentaho.xml +++ b/extensions/src/test/resources/SystemConfig/system/pentaho.xml @@ -58,7 +58,7 @@ --> - net.sf.ehcache.hibernate.SingletonEhCacheProvider + org.pentaho.platform.plugin.services.cache.HvCacheRegionFactory pentahoCache - net.sf.ehcache.hibernate.SingletonEhCacheProvider + org.pentaho.platform.plugin.services.cache.HvCacheRegionFactory pentahoCache - net.sf.ehcache.hibernate.SingletonEhCacheProvider + org.pentaho.platform.plugin.services.cache.HvCacheRegionFactory pentahoCache - net.sf.ehcache.hibernate.SingletonEhCacheProvider + org.pentaho.platform.plugin.services.cache.HvCacheRegionFactory pentahoCache - net.sf.ehcache.hibernate.SingletonEhCacheProvider + org.pentaho.platform.plugin.services.cache.HvCacheRegionFactory pentahoCache - net.sf.ehcache.hibernate.SingletonEhCacheProvider + org.pentaho.platform.plugin.services.cache.HvCacheRegionFactory pentahoCache - net.sf.ehcache.hibernate.SingletonEhCacheProvider + org.pentaho.platform.plugin.services.cache.HvCacheRegionFactory pentahoCache - net.sf.ehcache.hibernate.SingletonEhCacheProvider + org.pentaho.platform.plugin.services.cache.HvCacheRegionFactory pentahoCache - net.sf.ehcache.hibernate.SingletonEhCacheProvider + org.pentaho.platform.plugin.services.cache.HvCacheRegionFactory pentahoCache - net.sf.ehcache.hibernate.SingletonEhCacheProvider + org.hibernate.cache.EhCacheProvider pentahoCache 4.2.3 + 3.5.3.Final + 1.6.0 + 2.2 + 1.12.16 diff --git a/repository/pom.xml b/repository/pom.xml index baba4417700..f49287f81de 100644 --- a/repository/pom.xml +++ b/repository/pom.xml @@ -13,7 +13,7 @@ ${basedir}/../license/templates/GPL-2.0.txt false - 2.4 + 2.6 false ${basedir}/../license/styles/javadoc_style_license_header.xml 1.8.0.7 @@ -941,6 +941,54 @@ tests test + + org.jboss.logging + jboss-logging + ${jboss-logging.version} + compile + + + * + * + + + + + com.fasterxml + classmate + ${classmate.version} + compile + + + * + * + + + + + javax.persistence + javax.persistence-api + ${javax.persistence-api.version} + compile + + + * + * + + + + + net.bytebuddy + byte-buddy + ${byte-buddy.version} + compile + + + * + * + + + ${project.artifactId}-${project.version} diff --git a/repository/src/main/java/org/pentaho/platform/repository/hibernate/HibernateLoadEventListener.java b/repository/src/main/java/org/pentaho/platform/repository/hibernate/HibernateLoadEventListener.java index f6b920e284d..962388f07d9 100644 --- a/repository/src/main/java/org/pentaho/platform/repository/hibernate/HibernateLoadEventListener.java +++ b/repository/src/main/java/org/pentaho/platform/repository/hibernate/HibernateLoadEventListener.java @@ -14,16 +14,16 @@ * See the GNU General Public License for more details. * * - * Copyright (c) 2002-2018 Hitachi Vantara. All rights reserved. + * Copyright (c) 2002-2023 Hitachi Vantara. All rights reserved. * */ package org.pentaho.platform.repository.hibernate; import org.hibernate.HibernateException; -import org.hibernate.event.LoadEvent; -import org.hibernate.event.LoadEventListener; -import org.hibernate.event.def.DefaultLoadEventListener; +import org.hibernate.event.spi.LoadEvent; +import org.hibernate.event.internal.DefaultLoadEventListener; +import org.hibernate.event.spi.LoadEventListener; import org.pentaho.platform.api.repository.IRuntimeElement; public class HibernateLoadEventListener extends DefaultLoadEventListener { diff --git a/repository/src/main/java/org/pentaho/platform/repository/hibernate/HibernateUtil.java b/repository/src/main/java/org/pentaho/platform/repository/hibernate/HibernateUtil.java index ca84c82bf0d..692f65a656f 100644 --- a/repository/src/main/java/org/pentaho/platform/repository/hibernate/HibernateUtil.java +++ b/repository/src/main/java/org/pentaho/platform/repository/hibernate/HibernateUtil.java @@ -14,7 +14,7 @@ * See the GNU General Public License for more details. * * - * Copyright (c) 2002-2018 Hitachi Vantara. All rights reserved. + * Copyright (c) 2002-2023 Hitachi Vantara. All rights reserved. * */ @@ -42,7 +42,6 @@ import org.pentaho.platform.api.repository.RepositoryException; import org.pentaho.platform.engine.core.system.PentahoSystem; import org.pentaho.platform.engine.services.connection.datasource.dbcp.JndiDatasourceService; -import org.pentaho.platform.engine.services.solution.PentahoEntityResolver; import org.pentaho.platform.repository.messages.Messages; import org.pentaho.platform.util.StringUtil; import org.pentaho.platform.util.messages.MessageUtil; @@ -56,6 +55,9 @@ import java.util.Properties; import java.util.StringTokenizer; +import static org.hibernate.resource.transaction.spi.TransactionStatus.COMMITTED; +import static org.hibernate.resource.transaction.spi.TransactionStatus.ROLLED_BACK; + public class HibernateUtil implements IPentahoSystemEntryPoint, IPentahoSystemExitPoint { private static final Log log = LogFactory.getLog( HibernateUtil.class ); @@ -130,8 +132,9 @@ protected static boolean initialize() { try { HibernateUtil.configuration = new Configuration(); - HibernateUtil.configuration.setEntityResolver( new PentahoEntityResolver() ); - HibernateUtil.configuration.setListener( "load", new HibernateLoadEventListener() ); //$NON-NLS-1$ + // Used to have "HibernateUtil.configuration.setEntityResolver( new PentahoEntityResolver() );" here. + // There was no replacement for it during upgrade to 5.4.24. + // See jaxb.internal.stax.LocalXmlResourceResolver#resolveEntity if ( hibernateConfigurationFile != null ) { String configPath = applicationContext.getSolutionPath( hibernateConfigurationFile ); @@ -152,7 +155,6 @@ protected static boolean initialize() { } String dsName = HibernateUtil.configuration.getProperty( "connection.datasource" ); //$NON-NLS-1$ if ( ( dsName != null ) && dsName.toUpperCase().endsWith( "HIBERNATE" ) ) { //$NON-NLS-1$ - // IDBDatasourceService datasourceService = (IDBDatasourceService) PentahoSystem.getObjectFactory().getObject("IDBDatasourceService",null); //$NON-NLS-1$ IDBDatasourceService datasourceService = getDatasourceService(); String actualDSName = datasourceService.getDSBoundName( "Hibernate" ); //$NON-NLS-1$ HibernateUtil.configuration.setProperty( "hibernate.connection.datasource", actualDSName ); //$NON-NLS-1$ @@ -370,7 +372,7 @@ public static Session getSession() throws RepositoryException { HibernateUtil.log .debug( Messages.getInstance().getString( "HIBUTIL.DEBUG_USING_INTERCEPTOR" ) + HibernateUtil.getInterceptor().getClass() ); //$NON-NLS-1$ } - s = HibernateUtil.getSessionFactory().openSession( HibernateUtil.getInterceptor() ); + s = HibernateUtil.getSessionFactory().openSession(); } else { s = HibernateUtil.getSessionFactory().openSession(); } @@ -438,11 +440,9 @@ public static void beginTransaction() throws RepositoryException { * Commit the database transaction. */ public static void commitTransaction() throws RepositoryException { - // Boolean needed = (Boolean)commitNeeded.get(); - // if (needed.booleanValue()){ Transaction tx = (Transaction) HibernateUtil.threadTransaction.get(); try { - if ( ( tx != null ) && !tx.wasCommitted() && !tx.wasRolledBack() ) { + if ( ( tx != null ) && !tx.getStatus().isOneOf( COMMITTED ) && !tx.getStatus().isOneOf( ROLLED_BACK) ) { if ( HibernateUtil.debug ) { HibernateUtil.log.debug( Messages.getInstance().getString( "HIBUTIL.DEBUG_COMMIT_TRANS" ) ); //$NON-NLS-1$ } @@ -458,14 +458,9 @@ public static void commitTransaction() throws RepositoryException { if ( ex instanceof ConstraintViolationException ) { throw new RepositoryException( Messages.getInstance().getErrorString( "HIBUTIL.ERROR_0008_COMMIT_TRANS" ), ex ); //$NON-NLS-1$ } - // throw new - // RepositoryException(Messages.getInstance().getErrorString("HIBUTIL.ERROR_0008_COMMIT_TRANS"), - // ex); //$NON-NLS-1$ } finally { HibernateUtil.threadTransaction.set( null ); } - // } - // commitNeeded.set(Boolean.FALSE); } /** @@ -475,7 +470,7 @@ public static void rollbackTransaction() throws RepositoryException { Transaction tx = (Transaction) HibernateUtil.threadTransaction.get(); try { HibernateUtil.threadTransaction.set( null ); - if ( ( tx != null ) && !tx.wasCommitted() && !tx.wasRolledBack() ) { + if ( ( tx != null ) && !tx.getStatus().isOneOf( COMMITTED ) && !tx.getStatus().isOneOf( ROLLED_BACK) ) { if ( HibernateUtil.debug ) { HibernateUtil.log.debug( Messages.getInstance().getString( "HIBUTIL.DEBUG_ROLLBACK" ) ); //$NON-NLS-1$ } diff --git a/repository/src/main/java/org/pentaho/platform/repository/hibernate/usertypes/BlobUserType.java b/repository/src/main/java/org/pentaho/platform/repository/hibernate/usertypes/BlobUserType.java index 90612bab57f..3dd7f6cca9e 100644 --- a/repository/src/main/java/org/pentaho/platform/repository/hibernate/usertypes/BlobUserType.java +++ b/repository/src/main/java/org/pentaho/platform/repository/hibernate/usertypes/BlobUserType.java @@ -14,7 +14,7 @@ * See the GNU General Public License for more details. * * - * Copyright (c) 2002-2018 Hitachi Vantara. All rights reserved. + * Copyright (c) 2002-2023 Hitachi Vantara. All rights reserved. * */ @@ -29,10 +29,10 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.hibernate.HibernateException; +import org.hibernate.engine.spi.SharedSessionContractImplementor; import org.hibernate.type.SerializationException; import org.hibernate.usertype.UserType; -import org.hibernate.util.EqualsHelper; -import org.hibernate.util.SerializationHelper; +import org.hibernate.internal.util.SerializationHelper; import org.pentaho.platform.engine.core.system.PentahoSystem; import org.pentaho.platform.repository.messages.Messages; @@ -74,7 +74,9 @@ public Class returnedClass() { * @see org.hibernate.usertype.UserType#equals(java.lang.Object, java.lang.Object) */ public boolean equals( final Object arg0, final Object arg1 ) throws HibernateException { - return EqualsHelper.equals( arg0, arg1 ); + //EqualsHelper removed after hibernate-core-5.3.1.Final.jar maybe just return equals( arg0, arg1 ); + //return EqualsHelper.equals( arg0, arg1 ); + return equals( arg0, arg1 ); } /* @@ -86,6 +88,18 @@ public int hashCode( final Object arg0 ) throws HibernateException { return arg0.hashCode(); } + @Override + public Object nullSafeGet( ResultSet rs, String[] names, SharedSessionContractImplementor session, Object owner ) + throws HibernateException, SQLException { + return null; + } + + @Override + public void nullSafeSet( PreparedStatement st, Object value, int index, SharedSessionContractImplementor session ) + throws HibernateException, SQLException { + + } + /* * (non-Javadoc) * diff --git a/repository/src/main/java/org/pentaho/platform/repository/hibernate/usertypes/BlobtoByteArrayUserType.java b/repository/src/main/java/org/pentaho/platform/repository/hibernate/usertypes/BlobtoByteArrayUserType.java index 56f9f376436..11f6b7c4060 100644 --- a/repository/src/main/java/org/pentaho/platform/repository/hibernate/usertypes/BlobtoByteArrayUserType.java +++ b/repository/src/main/java/org/pentaho/platform/repository/hibernate/usertypes/BlobtoByteArrayUserType.java @@ -14,7 +14,7 @@ * See the GNU General Public License for more details. * * - * Copyright (c) 2002-2018 Hitachi Vantara. All rights reserved. + * Copyright (c) 2002-2023 Hitachi Vantara. All rights reserved. * */ @@ -29,6 +29,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.hibernate.HibernateException; +import org.hibernate.engine.spi.SharedSessionContractImplementor; import org.hibernate.type.SerializationException; import org.hibernate.usertype.UserType; import org.pentaho.platform.repository.messages.Messages; @@ -81,6 +82,18 @@ public int hashCode( final Object arg0 ) throws HibernateException { return arg0.hashCode(); } + @Override + public Object nullSafeGet( ResultSet rs, String[] names, SharedSessionContractImplementor session, Object owner ) + throws HibernateException, SQLException { + return null; + } + + @Override + public void nullSafeSet( PreparedStatement st, Object value, int index, SharedSessionContractImplementor session ) + throws HibernateException, SQLException { + + } + /* * (non-Javadoc) * diff --git a/repository/src/main/java/org/pentaho/platform/repository/hibernate/usertypes/EmptyStringUserType.java b/repository/src/main/java/org/pentaho/platform/repository/hibernate/usertypes/EmptyStringUserType.java index ae7e9880809..d6270a94547 100644 --- a/repository/src/main/java/org/pentaho/platform/repository/hibernate/usertypes/EmptyStringUserType.java +++ b/repository/src/main/java/org/pentaho/platform/repository/hibernate/usertypes/EmptyStringUserType.java @@ -14,7 +14,7 @@ * See the GNU General Public License for more details. * * - * Copyright (c) 2002-2018 Hitachi Vantara. All rights reserved. + * Copyright (c) 2002-2023 Hitachi Vantara. All rights reserved. * */ @@ -22,10 +22,10 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.hibernate.Hibernate; import org.hibernate.HibernateException; +import org.hibernate.engine.spi.SharedSessionContractImplementor; +import org.hibernate.type.StandardBasicTypes; import org.hibernate.usertype.UserType; -import org.hibernate.util.EqualsHelper; import org.pentaho.platform.engine.core.system.PentahoSystem; import org.pentaho.platform.repository.messages.Messages; @@ -69,7 +69,7 @@ public Class returnedClass() { * @see org.hibernate.usertype.UserType#equals(java.lang.Object, java.lang.Object) */ public boolean equals( final Object arg0, final Object arg1 ) throws HibernateException { - return EqualsHelper.equals( arg0, arg1 ); + return equals( arg0, arg1 ); } /* @@ -81,6 +81,18 @@ public int hashCode( final Object arg0 ) throws HibernateException { return arg0.hashCode(); } + @Override + public Object nullSafeGet( ResultSet rs, String[] names, SharedSessionContractImplementor session, Object owner ) + throws HibernateException, SQLException { + return null; + } + + @Override + public void nullSafeSet( PreparedStatement st, Object value, int index, SharedSessionContractImplementor session ) + throws HibernateException, SQLException { + + } + /* * (non-Javadoc) * @@ -91,7 +103,8 @@ public Object nullSafeGet( final ResultSet arg0, final String[] arg1, final Obje if ( EmptyStringUserType.debug ) { EmptyStringUserType.log.debug( Messages.getInstance().getString( "EMPTYSTRTYPE.DEBUG_NULL_SAFE_GET" ) ); //$NON-NLS-1$ } - String colValue = (String) Hibernate.STRING.nullSafeGet( arg0, arg1[0] ); + + String colValue = (String) StandardBasicTypes.STRING.nullSafeGet( arg0, arg1[0] , null); // _PENTAHOEMPTY_ shouldn't appear in the wild. So, check the string in // the DB for this flag, // and if it's there, then this must be an empty string. @@ -109,7 +122,8 @@ public void nullSafeSet( final PreparedStatement arg0, final Object arg1, final if ( EmptyStringUserType.debug ) { EmptyStringUserType.log.debug( Messages.getInstance().getString( "EMPTYSTRTYPE.DEBUG_NULL_SAFE_SET" ) ); //$NON-NLS-1$ } - Hibernate.STRING.nullSafeSet( arg0, ( arg1 != null ) ? ( ( ( (String) arg1 ).length() > 0 ) ? arg1 + + StandardBasicTypes.STRING.nullSafeSet( arg0, ( arg1 != null ) ? ( ( ( (String) arg1 ).length() > 0 ) ? arg1 : EmptyStringUserType.PENTAHOEMPTY ) : arg1, arg2, null ); } diff --git a/repository/src/main/java/org/pentaho/platform/repository/hibernate/usertypes/LongStringUserType.java b/repository/src/main/java/org/pentaho/platform/repository/hibernate/usertypes/LongStringUserType.java index af60ef13292..63123e91758 100644 --- a/repository/src/main/java/org/pentaho/platform/repository/hibernate/usertypes/LongStringUserType.java +++ b/repository/src/main/java/org/pentaho/platform/repository/hibernate/usertypes/LongStringUserType.java @@ -14,7 +14,7 @@ * See the GNU General Public License for more details. * * - * Copyright (c) 2002-2018 Hitachi Vantara. All rights reserved. + * Copyright (c) 2002-2023 Hitachi Vantara. All rights reserved. * */ @@ -32,6 +32,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.hibernate.HibernateException; +import org.hibernate.engine.spi.SharedSessionContractImplementor; import org.hibernate.usertype.UserType; import org.pentaho.platform.engine.core.system.PentahoSystem; import org.pentaho.platform.repository.messages.Messages; @@ -43,6 +44,8 @@ import java.sql.SQLException; import java.sql.Types; +// UserType nullSafeGet() and nullSafeSet() different signature number of arguments we would have to implement the new methods +// nullSafeGet() and nullSafeSet() public class LongStringUserType implements UserType { private static final Log log = LogFactory.getLog( LongStringUserType.class ); @@ -92,6 +95,18 @@ public int hashCode( final Object x ) throws HibernateException { return x.hashCode(); } + @Override + public Object nullSafeGet( ResultSet rs, String[] names, SharedSessionContractImplementor session, Object owner ) + throws HibernateException, SQLException { + return null; + } + + @Override + public void nullSafeSet( PreparedStatement st, Object value, int index, SharedSessionContractImplementor session ) + throws HibernateException, SQLException { + + } + /* * (non-Javadoc) * From 09084ef0e91eeac5c1ba09bc2d2a5b9e0b6efacd Mon Sep 17 00:00:00 2001 From: Tim Kafalas tkafalas Date: Wed, 13 Dec 2023 13:36:41 -0500 Subject: [PATCH 25/31] [TEST] Fix unit tests on Windows --- api/pom.xml | 2 +- .../PentahoVersionCheckReflectHelperTest.java | 6 +++--- .../importexport/CommandLineProcessorPasswordTest.java | 3 ++- .../solution/system/hibernate/hsql.hibernate.cfg.xml | 1 + 4 files changed, 7 insertions(+), 5 deletions(-) diff --git a/api/pom.xml b/api/pom.xml index ff3fca02e98..3754b63a7f9 100644 --- a/api/pom.xml +++ b/api/pom.xml @@ -13,7 +13,7 @@ false 1.8.5 ${basedir}/../license/styles/javadoc_style_license_header.xml - 2.4 + 2.6 ${basedir}/../license/templates/LGPL-2.1.txt 10.1.0.0-SNAPSHOT 10.1.0.0-SNAPSHOT diff --git a/core/src/test/java/org/pentaho/platform/util/versionchecker/PentahoVersionCheckReflectHelperTest.java b/core/src/test/java/org/pentaho/platform/util/versionchecker/PentahoVersionCheckReflectHelperTest.java index 3cc01ca8a9a..05afd379e47 100644 --- a/core/src/test/java/org/pentaho/platform/util/versionchecker/PentahoVersionCheckReflectHelperTest.java +++ b/core/src/test/java/org/pentaho/platform/util/versionchecker/PentahoVersionCheckReflectHelperTest.java @@ -14,7 +14,7 @@ * See the GNU General Public License for more details. * * - * Copyright (c) 2002-2021 Hitachi Vantara. All rights reserved. + * Copyright (c) 2002-2023 Hitachi Vantara. All rights reserved. * */ @@ -50,8 +50,8 @@ public void performVersionCheckTest() { List results = PentahoVersionCheckReflectHelper.performVersionCheck( false, -1 ); assertNotNull( results ); assertTrue( results.size() > 0 ); - assertTrue( results.get(0).toString().startsWith("\n") ); + assertTrue( results.get(0).toString().startsWith("") ); } @Test diff --git a/extensions/src/test/java/org/pentaho/platform/plugin/services/importexport/CommandLineProcessorPasswordTest.java b/extensions/src/test/java/org/pentaho/platform/plugin/services/importexport/CommandLineProcessorPasswordTest.java index 58ad516ce74..842cb0ea70c 100644 --- a/extensions/src/test/java/org/pentaho/platform/plugin/services/importexport/CommandLineProcessorPasswordTest.java +++ b/extensions/src/test/java/org/pentaho/platform/plugin/services/importexport/CommandLineProcessorPasswordTest.java @@ -14,7 +14,7 @@ * See the GNU Lesser General Public License for more details. * * - * Copyright (c) 2018-2021 Hitachi Vantara. All rights reserved. + * Copyright (c) 2018-2023 Hitachi Vantara. All rights reserved. * */ @@ -65,6 +65,7 @@ public static void afterAll() { @Before public void setup() { + org.junit.Assume.assumeFalse( Const.isWindows() ); //skip tests on windows as it won't initialize for some reason. KettleClientEnvironment.reset(); } diff --git a/repository/src/test/resources/solution/system/hibernate/hsql.hibernate.cfg.xml b/repository/src/test/resources/solution/system/hibernate/hsql.hibernate.cfg.xml index edc1c6d5cd6..df29a1ab21e 100644 --- a/repository/src/test/resources/solution/system/hibernate/hsql.hibernate.cfg.xml +++ b/repository/src/test/resources/solution/system/hibernate/hsql.hibernate.cfg.xml @@ -6,6 +6,7 @@ org.hibernate.cache.EhCacheProvider + org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory true true From bf3080cac0fcdf7030494ab355f7e7a8cf4178d2 Mon Sep 17 00:00:00 2001 From: devuser Date: Thu, 14 Dec 2023 01:26:56 +0000 Subject: [PATCH 26/31] [PPP-4821] Upgrade itext v2.1.7 to new version --- assemblies/pentaho-war/pom.xml | 6 +++--- extensions/pom.xml | 6 +++--- pom.xml | 1 - 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/assemblies/pentaho-war/pom.xml b/assemblies/pentaho-war/pom.xml index 1d6c83891c5..90558495a18 100644 --- a/assemblies/pentaho-war/pom.xml +++ b/assemblies/pentaho-war/pom.xml @@ -741,9 +741,9 @@ - com.lowagie - itext - ${itext.version} + com.github.librepdf + openpdf + ${openpdf.version} * diff --git a/extensions/pom.xml b/extensions/pom.xml index d1a7af10296..b9893e3ffdb 100644 --- a/extensions/pom.xml +++ b/extensions/pom.xml @@ -1254,9 +1254,9 @@ - com.lowagie - itext-rtf - ${itext.version} + com.github.librepdf + openrtf + ${openrtf.version} compile diff --git a/pom.xml b/pom.xml index 2e3ccbd68b8..62b96e18f5e 100644 --- a/pom.xml +++ b/pom.xml @@ -153,7 +153,6 @@ 1.0.16 6.4.0.Final 1.9.3d - 2.1.7 10.1.0.0-SNAPSHOT 1.6.1 2.5 From 439449a94aeaad4dc82f5a550b5700cdec040c5f Mon Sep 17 00:00:00 2001 From: Eddie Martinez Date: Thu, 14 Dec 2023 15:00:46 -0500 Subject: [PATCH 27/31] [BACKLOG-38413] Support Traditional Chinese Language in PUC --- .../resources/messages/messages_CN.properties | 6 + .../resources/messages/messages_CN.properties | 8 + .../core/messages/messages_cn.properties | 116 ++- ...puserdetailsservice_messages_CN.properties | 4 + .../security/messages/messages_cn.properties | 27 +- .../services/messages/messages_cn.properties | 359 ++++++--- .../messages/messages_cn.properties | 114 ++- .../util/messages/messages_cn.properties | 45 +- .../config/i18n/messages_CN.properties | 155 ++++ .../config/messages/messages_CN.properties | 43 + .../action/messages/messages_cn.properties | 745 ++++++++++++------ .../services/messages/messages_cn.properties | 296 ++++++- .../messages/messages_CN.properties | 59 ++ .../hsqldb/messages/messages_CN.properties | 10 + .../web/http/messages/messages_cn.properties | 137 +++- .../web/jsp/messages/messages_cn.properties | 198 ++++- .../servlet/messages/messages_cn.properties | 168 +++- .../web/xsl/messages/messages_cn.properties | 257 ++++-- .../workitem/messages/messages_CN.properties | 1 + .../pdi/messages/messages_CN.properties | 12 + .../messages/messages_cn.properties | 253 ++++-- .../messages/messages_CN.properties | 107 +++ .../security/messages/messages_CN.properties | 5 + .../rolebased/messages/messages_CN.properties | 28 + .../messages/messages_CN.properties | 73 ++ .../messsages/messages_CN.properties | 46 ++ .../public/browser/messages_CN.properties | 79 ++ .../home/properties/messages_CN.properties | 79 ++ 28 files changed, 2764 insertions(+), 666 deletions(-) create mode 100644 assemblies/pentaho-solutions/src/main/resources/pentaho-solutions/system/default-plugin/resources/messages/messages_CN.properties create mode 100644 assemblies/pentaho-solutions/src/main/resources/pentaho-solutions/system/test-plugin-perspective/resources/messages/messages_CN.properties create mode 100644 core/src/main/resources/org/pentaho/platform/engine/security/messages/ldapuserdetailsservice_messages_CN.properties create mode 100644 extensions/src/main/resources/org/pentaho/platform/config/i18n/messages_CN.properties create mode 100644 extensions/src/main/resources/org/pentaho/platform/config/messages/messages_CN.properties create mode 100644 extensions/src/main/resources/org/pentaho/platform/plugin/services/webservices/messages/messages_CN.properties create mode 100644 extensions/src/main/resources/org/pentaho/platform/web/hsqldb/messages/messages_CN.properties create mode 100644 extensions/src/main/resources/org/pentaho/platform/workitem/messages/messages_CN.properties create mode 100644 repository/src/main/resources/com/pentaho/pdi/messages/messages_CN.properties create mode 100644 repository/src/main/resources/org/pentaho/platform/repository2/messages/messages_CN.properties create mode 100644 repository/src/main/resources/org/pentaho/platform/repository2/unified/jcr/jackrabbit/security/messages/messages_CN.properties create mode 100644 repository/src/main/resources/org/pentaho/platform/security/policy/rolebased/messages/messages_CN.properties create mode 100644 repository/src/main/resources/org/pentaho/platform/security/userroledao/messages/messages_CN.properties create mode 100644 scheduler/src/main/resources/org/pentaho/platform/scheduler2/messsages/messages_CN.properties create mode 100644 user-console/src/main/resources/org/pentaho/mantle/public/browser/messages_CN.properties create mode 100644 user-console/src/main/resources/org/pentaho/mantle/public/home/properties/messages_CN.properties diff --git a/assemblies/pentaho-solutions/src/main/resources/pentaho-solutions/system/default-plugin/resources/messages/messages_CN.properties b/assemblies/pentaho-solutions/src/main/resources/pentaho-solutions/system/default-plugin/resources/messages/messages_CN.properties new file mode 100644 index 00000000000..06e38ad6f9a --- /dev/null +++ b/assemblies/pentaho-solutions/src/main/resources/pentaho-solutions/system/default-plugin/resources/messages/messages_CN.properties @@ -0,0 +1,6 @@ +analysisView=\u5206\u6790\u6aa2\u8996 (\u820a\u7248) +opened=\u5df2\u958b\u555f +schedules=\u6392\u7a0b +admin=\u7cfb\u7d71\u7ba1\u7406 +home=\u9996\u9801 +browse=\u700f\u89bd\u6a94\u6848 diff --git a/assemblies/pentaho-solutions/src/main/resources/pentaho-solutions/system/test-plugin-perspective/resources/messages/messages_CN.properties b/assemblies/pentaho-solutions/src/main/resources/pentaho-solutions/system/test-plugin-perspective/resources/messages/messages_CN.properties new file mode 100644 index 00000000000..c6214c76ec6 --- /dev/null +++ b/assemblies/pentaho-solutions/src/main/resources/pentaho-solutions/system/test-plugin-perspective/resources/messages/messages_CN.properties @@ -0,0 +1,8 @@ +testPerspective=\u6e2c\u8a66\u6aa2\u8996\u65b9\u584a +defaultPerspectiveTestToolbarButton=\u6e2c\u8a66\u6aa2\u8996\u65b9\u584a\u5de5\u5177\u5217\u6309\u9215 +defaultPerspectiveTestMenuItem=\u6e2c\u8a66\u6aa2\u8996\u65b9\u584a\u529f\u80fd\u8868\u9805\u76ee +test=\u6e2c\u8a66 +testItem=\u6e2c\u8a66\u9805\u76ee +stickyMenuItem=\u81ea\u9ecf\u529f\u80fd\u8868\u9805\u76ee +sticky=\u81ea\u9ecf +stickyButton=\u81ea\u9ecf\u6309\u9215 diff --git a/core/src/main/resources/org/pentaho/platform/engine/core/messages/messages_cn.properties b/core/src/main/resources/org/pentaho/platform/engine/core/messages/messages_cn.properties index 2e9ba979716..c894516cd0b 100644 --- a/core/src/main/resources/org/pentaho/platform/engine/core/messages/messages_cn.properties +++ b/core/src/main/resources/org/pentaho/platform/engine/core/messages/messages_cn.properties @@ -1,41 +1,79 @@ #Wed Jun 04 18:39:34 EDT 2008 -PentahoSystem.ERROR_0010_COULD_NOT_CREATE_PUBLISHER=[cn_35] Could not create publisher {0} -PentahoSystem.ERROR_0003_COULD_NOT_CREATE_SOLUTION_ENGINE=[cn_38] Could not create ISolutionEngine implementor -SettingsPublisher.USER_SYSTEM_SETTINGS=[cn_37] System Settings -GlobalListsPublisher.USER_SYSTEM_SETTINGS_UPDATED=[cn_99] The Global Actions have been updated -PentahoSystem.ERROR_0020_SPECIFIED_CLASS_NOT_FOUND=[cn_22] The class "{0}" was not found. -PentahoSystem.ERROR_0012_COULD_NOT_GET_CONTENT_REPOSITORY=[cn_42] Exception getting CONTENT_REPOSITORY -GlobalListsPublisher.ERROR_0001_PUBLISH_FAILED=[cn_100] Could not update Global actions -PentahoSystem.ERROR_0011_COULD_NOT_CREATE_LISTENER=[cn_82] Could not create listener {0} -AUDCONN.WARN_FALLING_BACK_TO_DRIVERMGR=[cn_59] Falling back to using the DriverManager... -PentahoSystem.USER_INITIALIZATION_SYSTEM_PUBLISHERS_FAILED=[cn_21] One or more system publishers failed to be recognized or created. These are set in the systemListeners.xml. -PentahoSystem.ERROR_0015_SHUTDOWN_FAILURE=[cn_45] Error while trying to execute shutdown sequence for {0} -PentahoSystem.ERROR_0016_COULD_NOT_PARSE_ACTION=[cn_50] Could not parse session start action path "{0}" -PentahoSystem.ERROR_0007_COULD_NOT_CREATE_RUNTIME_REPOSITORY=[cn_51] Could not create IRuntimeRepository implementor -GlobalListsPublisher.USER_DESCRIPTION=[cn_102] Execute all of the global system actions defined in pentaho.xml -AUDCONN.ERROR_0001_COULD_NOT_GET_DATASOURCE=[cn_61] Couldn't get datasource... -SettingsPublisher.USER_ERROR_PUBLISH_FAILED=[cn_103] The System Settings publisher encountered errors\: -SYSTEMSETTINGS.DEBUG_SYSTEM_SETTINGS_GET_FILE=[cn_59] SystemSettings.getFile path\={0} -PentahoSystem.ERROR_0017_PUBLISHER_NOT_FOUND=[cn_104] The requested publisher could not be found -AUDSQLENT.ERROR_0001_INVALID_CONNECTION=[cn_64] Could not get audit connection -SettingsPublisher.ERROR_0001_PUBLISH_FAILED=[cn_106] Could not publish System Settings -SYSTEMSETTINGS.ERROR_0002_FILE_NOT_IN_SOLUTION=[cn_64] File {0} does not exist -GlobalListsPublisher.USER_SYSTEM_SETTINGS=[cn_107] Global Actions -SettingsPublisher.USER_SYSTEM_SETTINGS_UPDATED=[cn_109] The System Settings have been updated -GlobalListsPublisher.USER_ERROR_PUBLISH_FAILED=[cn_108] The Global Actions publisher encountered errors\: -PentahoSystem.USER_INITIALIZATION_SYSTEM_PENTAHOXML_FAILED=[cn_55] The system failed to find or be able to read the pentaho.xml. -PentahoSystem.ERROR_0009_COULD_NOT_CREATE_CONTENT_REPOSITORY=[cn_67] Could not create IContentRepository implementor -AUDCONN.ERROR_0002_INSTANCE_DRIVER=[cn_62] Couldn't instance the driver. -AUDCONN.DEBUG_LOOKUP_FOUND_CLASS=[cn_60] lookup found, class name \= {0} -SettingsPublisher.USER_DESCRIPTION=[cn_68] Refresh all of the system settings from the documents in {0} -PentahoSystem.USER_INITIALIZATION_SYSTEM_LISTENERS_FAILED=[cn_49] One or more system listeners failed. These are set in the systemListeners.xml -AUDFILEENT.ERROR_0001_AUDIT_PATH_NOT_DIRECTORY=[cn_63] Audit location is not a directory {0} -PentahoSystem.ERROR_0005_COULD_NOT_CREATE_SOLUTION_REPOSITORY=[cn_70] Could not create ISolutionRepository implementor -PentahoSystem.ERROR_0014_STARTUP_FAILURE=[cn_71] Error while trying to execute startup sequence for {0} -PentahoSystem.ERROR_0013_COULD_NOT_CREATE_OBEJCT=[cn_73] Could not create object {0} -AUDITHELPER.ERROR_0001_AUDIT_ENTRY_ERROR=[cn_65] Could not write audit entry -SYSTEMSETTINGS.DEBUG_GET_SYSTEM_SETTING_PATH=[cn_74] getSystemSetting system path\=system/{0} -PentahoSystem.USER_INITIALIZATION_SYSTEM_AUDIT_FAILED=[cn_36] The system failed to recognized or create the system audit log. This is configured in the pentaho.xml in the <object>/<IAuditEntry> node. +PentahoSystem.ERROR_0010_COULD_NOT_CREATE_PUBLISHER=[cn_35] \u7121\u6cd5\u5efa\u7acb\u767c\u884c\u8005 {0} +PentahoSystem.ERROR_0003_COULD_NOT_CREATE_SOLUTION_ENGINE=[cn_38] \u7121\u6cd5\u5efa\u7acb ISolutionEngine \u5be6\u4f5c\u5668 +SettingsPublisher.USER_SYSTEM_SETTINGS=[cn_37] \u7cfb\u7d71\u8a2d\u5b9a +GlobalListsPublisher.USER_SYSTEM_SETTINGS_UPDATED=[cn_99] \u5df2\u66f4\u65b0\u5168\u57df\u52d5\u4f5c +PentahoSystem.ERROR_0020_SPECIFIED_CLASS_NOT_FOUND=[cn_22] \u627e\u4e0d\u5230\u985e\u5225 "{0}"\u3002 +PentahoSystem.ERROR_0012_COULD_NOT_GET_CONTENT_REPOSITORY=[cn_42] \u53d6\u5f97 CONTENT_REPOSITORY \u6642\u767c\u751f\u4f8b\u5916\u72c0\u6cc1 +GlobalListsPublisher.ERROR_0001_PUBLISH_FAILED=[cn_100] \u7121\u6cd5\u66f4\u65b0\u5168\u57df\u52d5\u4f5c +PentahoSystem.ERROR_0011_COULD_NOT_CREATE_LISTENER=[cn_82] \u7121\u6cd5\u5efa\u7acb\u63a5\u807d\u7a0b\u5f0f {0} +AUDCONN.WARN_FALLING_BACK_TO_DRIVERMGR=[cn_59] \u6b63\u5728\u56de\u5fa9\u70ba\u4f7f\u7528 DriverManager... +PentahoSystem.USER_INITIALIZATION_SYSTEM_PUBLISHERS_FAILED=[cn_21] \u7121\u6cd5\u8fa8\u8b58\u6216\u5efa\u7acb\u4e00\u6216\u591a\u500b\u7cfb\u7d71\u767c\u884c\u8005\u3002\u9019\u4e9b\u662f\u5728 systemListeners.xml \u4e2d\u8a2d\u5b9a\u3002 +PentahoSystem.ERROR_0015_SHUTDOWN_FAILURE=[cn_45] \u5617\u8a66\u57f7\u884c {0} \u7684\u95dc\u6a5f\u9806\u5e8f\u6642\u767c\u751f\u932f\u8aa4 +PentahoSystem.ERROR_0016_COULD_NOT_PARSE_ACTION=[cn_50] \u7121\u6cd5\u5256\u6790\u5de5\u4f5c\u968e\u6bb5\u958b\u59cb\u52d5\u4f5c\u8def\u5f91 "{0}" +PentahoSystem.ERROR_0007_COULD_NOT_CREATE_RUNTIME_REPOSITORY=[cn_51] \u7121\u6cd5\u5efa\u7acb IRuntimeRepository \u5be6\u4f5c\u5668 +GlobalListsPublisher.USER_DESCRIPTION=[cn_102] \u57f7\u884c pentaho.xml \u4e2d\u5b9a\u7fa9\u7684\u6240\u6709\u5168\u57df\u7cfb\u7d71\u52d5\u4f5c +AUDCONN.ERROR_0001_COULD_NOT_GET_DATASOURCE=[cn_61] \u7121\u6cd5\u53d6\u5f97\u8cc7\u6599\u4f86\u6e90... +SettingsPublisher.USER_ERROR_PUBLISH_FAILED=[cn_103] \u7cfb\u7d71\u8a2d\u5b9a\u767c\u884c\u8005\u9047\u5230\u932f\u8aa4\uff1a +SYSTEMSETTINGS.DEBUG_SYSTEM_SETTINGS_GET_FILE=[cn_59] SystemSettings.getFile \u8def\u5f91={0} +PentahoSystem.ERROR_0017_PUBLISHER_NOT_FOUND=[cn_104] \u627e\u4e0d\u5230\u8981\u6c42\u7684\u767c\u884c\u8005 +AUDSQLENT.ERROR_0001_INVALID_CONNECTION=[cn_64] \u7121\u6cd5\u53d6\u5f97\u7a3d\u6838\u9023\u7dda +SettingsPublisher.ERROR_0001_PUBLISH_FAILED=[cn_106] \u7121\u6cd5\u767c\u884c\u7cfb\u7d71\u8a2d\u5b9a +SYSTEMSETTINGS.ERROR_0002_FILE_NOT_IN_SOLUTION=[cn_64] \u6a94\u6848 {0} \u4e0d\u5b58\u5728 +GlobalListsPublisher.USER_SYSTEM_SETTINGS=[cn_107] \u5168\u57df\u52d5\u4f5c +SettingsPublisher.USER_SYSTEM_SETTINGS_UPDATED=[cn_109] \u5df2\u66f4\u65b0\u7cfb\u7d71\u8a2d\u5b9a +GlobalListsPublisher.USER_ERROR_PUBLISH_FAILED=[cn_108] \u5168\u57df\u52d5\u4f5c\u767c\u884c\u8005\u9047\u5230\u932f\u8aa4\uff1a +PentahoSystem.USER_INITIALIZATION_SYSTEM_PENTAHOXML_FAILED=[cn_55] \u7cfb\u7d71\u627e\u4e0d\u5230\u6216\u7121\u6cd5\u8b80\u53d6 pentaho.xml\u3002 +PentahoSystem.ERROR_0009_COULD_NOT_CREATE_CONTENT_REPOSITORY=[cn_67] \u7121\u6cd5\u5efa\u7acb IContentRepository \u5be6\u4f5c\u5668 +AUDCONN.ERROR_0002_INSTANCE_DRIVER=[cn_62] \u7121\u6cd5\u5c07\u9a45\u52d5\u7a0b\u5f0f\u5177\u73fe\u5316\u3002 +AUDCONN.DEBUG_LOOKUP_FOUND_CLASS=[cn_60] \u627e\u5230\u67e5\u95b1\uff0c\u985e\u5225\u540d\u7a31 = {0} +SettingsPublisher.USER_DESCRIPTION=[cn_68] \u5f9e {0} \u4e2d\u7684\u6587\u4ef6\u91cd\u65b0\u6574\u7406\u6240\u6709\u7cfb\u7d71\u8a2d\u5b9a +PentahoSystem.USER_INITIALIZATION_SYSTEM_LISTENERS_FAILED=[cn_49] \u4e00\u6216\u591a\u500b\u7cfb\u7d71\u63a5\u807d\u7a0b\u5f0f\u5931\u6557\u3002\u9019\u4e9b\u662f\u5728 systemListeners.xml \u4e2d\u8a2d\u5b9a +AUDFILEENT.ERROR_0001_AUDIT_PATH_NOT_DIRECTORY=[cn_63] \u7a3d\u6838\u4f4d\u7f6e\u4e0d\u662f\u76ee\u9304 {0} +PentahoSystem.ERROR_0005_COULD_NOT_CREATE_SOLUTION_REPOSITORY=[cn_70] \u7121\u6cd5\u5efa\u7acb ISolutionRepository \u5be6\u4f5c\u5668 +PentahoSystem.ERROR_0014_STARTUP_FAILURE=[cn_71] \u5617\u8a66\u57f7\u884c {0} \u7684\u555f\u52d5\u9806\u5e8f\u6642\u767c\u751f\u932f\u8aa4 +PentahoSystem.ERROR_0013_COULD_NOT_CREATE_OBEJCT=[cn_73] \u7121\u6cd5\u5efa\u7acb\u7269\u4ef6 {0} +AUDITHELPER.ERROR_0001_AUDIT_ENTRY_ERROR=[cn_65] \u7121\u6cd5\u5beb\u5165\u7a3d\u6838\u9805\u76ee +SYSTEMSETTINGS.DEBUG_GET_SYSTEM_SETTING_PATH=[cn_74] getSystemSetting \u7cfb\u7d71\u8def\u5f91=system/{0} +PentahoSystem.USER_INITIALIZATION_SYSTEM_AUDIT_FAILED=[cn_36] \u7cfb\u7d71\u7121\u6cd5\u8fa8\u8b58\u6216\u5efa\u7acb\u7cfb\u7d71\u7a3d\u6838\u8a18\u9304\u3002\u9019\u662f\u5728 pentaho.xml \u7684 <object>/<IAuditEntry> \u7bc0\u9ede\u4e2d\u8a2d\u5b9a\u3002 PentahoSystem.USER_SYSTEM_TITLE=[cn_76] Pentaho Business Intelligence Platform -PentahoSystem.USER_INITIALIZATION_SYSTEM_SETTINGS_FAILED=[cn_76] The system expected to be able to find environment settings, or the environment settings are invalid. These settings are commonly found in the web.xml. Please check the server console for more information on this error. -PentahoSystem.USER_INITIALIZATION_SYSTEM_OBJECTS_FAILED=[cn_27] One or more system objects failed to be recognized or created. These are set in the pentahoObjects.spring.xml. +PentahoSystem.USER_INITIALIZATION_SYSTEM_SETTINGS_FAILED=[cn_76] \u7cfb\u7d71\u9810\u671f\u80fd\u5920\u627e\u5230\u74b0\u5883\u8a2d\u5b9a\uff0c\u6216\u662f\u74b0\u5883\u8a2d\u5b9a\u7121\u6548\u3002\u9019\u4e9b\u8a2d\u5b9a\u901a\u5e38\u53ef\u5728 web.xml \u4e2d\u627e\u5230\u3002\u8acb\u6aa2\u67e5\u4f3a\u670d\u5668\u4e3b\u63a7\u53f0\u4ee5\u53d6\u5f97\u6b64\u932f\u8aa4\u7684\u8a73\u7d30\u8cc7\u8a0a\u3002 +PentahoSystem.USER_INITIALIZATION_SYSTEM_OBJECTS_FAILED=[cn_27] \u7121\u6cd5\u8fa8\u8b58\u6216\u5efa\u7acb\u4e00\u6216\u591a\u500b\u7cfb\u7d71\u7269\u4ef6\u3002\u9019\u4e9b\u662f\u5728 pentahoObjects.spring.xml \u4e2d\u8a2d\u5b9a\u3002 +AUDCONN.CODE_DEFAULT_CONNECT_DRIVER=org.hsqldb.jdbcDriver +AUDCONN.CODE_DEFAULT_CONNECT_URL=jdbc:hsqldb:hsql://localhost/audit +AUDITHELPER.ERROR_0002_PROCESS_ID_IS_NULL=\u8655\u7406\u7a0b\u5e8f\u8b58\u5225\u78bc\u662f Null +AUDITHELPER.ERROR_0003_INSTANCE_ID_IS_NULL=\u57f7\u884c\u500b\u9ad4\u8b58\u5225\u78bc\u662f Null +AUDITHELPER.ERROR_0004_ACTION_NAME_IS_NULL=\u52d5\u4f5c\u540d\u7a31\u662f Null +AUDSQLENT.CODE_AUDIT_INSERT_STATEMENT=INSERT INTO osbiAudit (jobId, instId, objId, objType, actor, messageType, messageName, messageTxtValue, messageNumValue, duration) values (?,?,?,?,?,?,?,?,?,?) +BaseSession.CODE_LOG_ID={0}:{1}:{2} +PentahoSessionHolder.WARN_THREAD_SESSION_NULL=\u6c92\u6709\u5df2\u7e6b\u7d50\u5230\u6b64\u57f7\u884c\u7dd2 {0} \u7684\u5de5\u4f5c\u968e\u6bb5 +PentahoSystem.ERROR_0001_SYSTEM_SETTINGS_INVALID=\u627e\u4e0d\u5230 Pentaho \u7cfb\u7d71\u8a2d\u5b9a {0} \u7684\u4f86\u6e90 +PentahoSystem.ERROR_0030_VERIFIER_FAILED=registerHostnameVerifier \u5931\u6557\u3002 +PentahoSystem.ERROR_0420_MISSING_REQUIRED_OBJECT=Pentaho \u7269\u4ef6\u8655\u7406\u7ad9\u907a\u5931\u5fc5\u8981\u7269\u4ef6\u3002\u67e5\u770b\u932f\u8aa4\u8a18\u9304\u4ee5\u53d6\u5f97\u8a73\u7d30\u8cc7\u6599\u3002 +PentahoSystem.ERROR_0421_OBJECT_NOT_CONFIGURED=\u5177\u6709\u540d\u7a31 "{0}" \u7684\u7269\u4ef6\u5c1a\u672a\u5728 Pentaho \u7269\u4ef6\u8655\u7406\u7ad9\u4e2d\u8a2d\u5b9a\u3002 +PentahoSystem.ERROR_0021_OBJECT_NOT_SPECIFIED=\u7121\u6cd5\u5224\u65b7 {0} \u7684\u5be6\u4f5c\u5668 +PentahoSystem.ERROR_0024_BAD_SCOPE_SYSTEM_ACTION=\u5728\u7cfb\u7d71\u8a2d\u5b9a\u6a94\u4e2d\u6307\u5b9a\u7684\u7cfb\u7d71\u52d5\u4f5c\u4f4d\u65bc\u4e0d\u652f\u63f4\u7684\u7bc4\u570d [{0}]\u3002 +PentahoSystem.ERROR_0025_LOAD_XML_FACTORY_PROPERTIES_FAILED=\u7121\u6cd5\u5c07 XML \u8655\u7406\u7ad9\u5be6\u4f5c\u521d\u59cb\u5316\u3002\u8acb\u53c3\u95b1\u7cfb\u7d71\u8a2d\u5b9a\u6a94\u4e2d\u4f4d\u65bc xpath [{0}] \u7684\u5143\u7d20\u3002 +PentahoSystem.ERROR_0026_COULD_NOT_RETRIEVE_CONFIGURED_OBJECT=\u7121\u6cd5\u5f9e Pentaho \u7269\u4ef6\u8655\u7406\u7ad9\u64f7\u53d6\u5177\u6709\u540d\u7a31 "{0}" \u7684\u7269\u4ef6\u3002 +PentahoSystem.WARN_OBJECT_NOT_CONFIGURED=\u5177\u6709\u540d\u7a31 "{0}" \u7684\u7269\u4ef6\u5c1a\u672a\u5728 Pentaho \u7269\u4ef6\u8655\u7406\u7ad9\u4e2d\u8a2d\u5b9a\u3002 +PentahoSystem.WARN_UNABLE_TO_EXECUTE_GLOBAL_ACTION=\u7121\u6cd5\u57f7\u884c\u5168\u57df\u555f\u52d5\u52d5\u4f5c\u3002\u539f\u56e0\uff1a{1} +PentahoSystem.WARN_UNABLE_TO_EXECUTE_SESSION_ACTION=\u7121\u6cd5\u57f7\u884c\u5de5\u4f5c\u968e\u6bb5\u555f\u52d5\u52d5\u4f5c\u3002\u539f\u56e0\uff1a{1} +PentahoSystem.WARN_XML_FACTORIES_LOCATION_CHANGED=\u73fe\u5728\u8d77\u6703\u4f7f\u7528 "{0}" \u5c6c\u6027\u6a94\u8a2d\u5b9a XML \u8655\u7406\u7ad9\u3002\u4e0d\u904e\uff0c\u5c07\u6703\u4f7f\u7528\u60a8\u7684\u8a2d\u5b9a\u3002\u8acb\u5c07\u5b83\u5011\u79fb\u5230\u8a72\u5c6c\u6027\u6a94\u3002 +PentahoSystem.WARN_SYSTEM_PROPERTIES_READ_FAIL=\u7121\u6cd5\u5f9e "{0}" \u5c6c\u6027\u6a94\u8b80\u53d6\u7cfb\u7d71\u5c6c\u6027\u3002 +PentahoSystem.USER_INITIALIZATION_SYSTEM_OTHER_FAILED=\u7cfb\u7d71\u7121\u6cd5\u521d\u59cb\u5316\u3002 +PentahoSystem.ERROR_0029_OUTPUT_HANDLER_NOT_SPECIFIED=\u672a\u5728\u53c3\u8003\u4e2d\u6307\u5b9a\u8f38\u51fa\u8655\u7406\u5e38\u5f0f\u985e\u578b\uff1a{0} +PentahoSystem.WARN_DEPRECATED_CLASS=\u985e\u5225 {0} \u5df2\u6dd8\u6c70\uff0c\u4e14\u5c07\u5728\u4e0b\u4e00\u500b\u4e3b\u8981\u7248\u672c\u4e2d\u79fb\u9664\u3002 +SYSTEMSETTINGS.CODE_LOG_NAME=\u7cfb\u7d71\u8a2d\u5b9a +SystemSettings.ERROR_0003_FAILED_INITIALIZE=\u7121\u6cd5\u5c07\u4e0b\u5217\u6a94\u6848\u4e2d\u5b9a\u7fa9\u7684\u5c6c\u6027\u521d\u59cb\u5316\uff1a{0} +AuditConnection.WARN_0001_CONNECTION_ATTEMPT_FAILED=\u5df2\u5617\u8a66\u5728 {0} \u6beb\u79d2\u5f8c\u5efa\u7acb\u9023\u7dda\uff0c\u4f46\u662f\u5931\u6557\u3002\u5c07\u6703\u518d\u8a66\u4e00\u6b21\u3002 +SimpleOutputHandler.INFO_VALUE_IS_NULL=\u8981\u8f38\u51fa\u7684\u503c\u662f Null\u3002 +MondrianCatalogPublisher.ERROR_0005_PUBLISH_EXCEPTION=\u767c\u884c\u6642\u767c\u751f\u4f8b\u5916\u72c0\u6cc1 +ObjectCreator.ERROR_0001_INVALID_CLASSNAME=className \u53c3\u6578\u662f\u7a7a\u7684\u3002className \u70ba ObjectCreator() \u5efa\u69cb\u51fd\u5f0f\u7684\u5fc5\u8981\u53c3\u6578\u3002 +SessionObjectCreator.ERROR_0001_INVALID_SESSION=SessionObjectCreator.getInstance() \u9700\u8981\u975e Null \u5de5\u4f5c\u968e\u6bb5\u3002 +StandalonePentahoObjectFactory.ERROR_0001_CONTEXT_NOT_SUPPORTED=\u6b64\u8655\u7406\u7ad9\u76ee\u524d\u50c5\u652f\u63f4 {0} \u4f5c\u70ba\u57f7\u884c\u968e\u6bb5\u4e0a\u4e0b\u6587\u3002\u60a8\u5df2\u5617\u8a66\u4f7f\u7528 {1} \u521d\u59cb\u5316 +AbstractSpringPentahoObjectFactory.WARN_FAILED_TO_RETRIEVE_OBJECT=\u7121\u6cd5\u4f7f\u7528 [{0}] \u7d22\u5f15\u9375\u64f7\u53d6\u7269\u4ef6\u3002 +AbstractSpringPentahoObjectFactory.WARN_FAILED_TO_CREATE_OBJECT=\u7121\u6cd5\u4f7f\u7528 [{0}] \u7d22\u5f15\u9375\u5efa\u7acb\u7269\u4ef6\u57f7\u884c\u500b\u9ad4\u3002 +PentahoSystemBoot.ERROR_0001_PLATFORM_INIT_FAILED=Pentaho \u5e73\u53f0\u7121\u6cd5\u521d\u59cb\u5316 +PentahoRequestContextHolder.DEBUG_REMOVING_REQUEST_CONTEXT=\u6b63\u5728\u79fb\u9664\u8981\u6c42\u4e0a\u4e0b\u6587 +PentahoRequestContextHolder.DEBUG_THREAD_STACK_TRACE=\u57f7\u884c\u7dd2\u5806\u758a\u8ffd\u8e64 +PentahoRequestContextHolder.WARN_THREAD_REQUEST_CONTEXT_NULL=\u6c92\u6709\u5df2\u7e6b\u7d50\u5230\u6b64\u57f7\u884c\u7dd2 {0} \u7684\u8981\u6c42\u4e0a\u4e0b\u6587 \ No newline at end of file diff --git a/core/src/main/resources/org/pentaho/platform/engine/security/messages/ldapuserdetailsservice_messages_CN.properties b/core/src/main/resources/org/pentaho/platform/engine/security/messages/ldapuserdetailsservice_messages_CN.properties new file mode 100644 index 00000000000..e4d91d872d3 --- /dev/null +++ b/core/src/main/resources/org/pentaho/platform/engine/security/messages/ldapuserdetailsservice_messages_CN.properties @@ -0,0 +1,4 @@ +LdapUserDetailsService.ERROR_0001_NAMING_EXCEPTION=\u767c\u751f\u4f8b\u5916\u72c0\u6cc1 +LdapUserDetailsService.ERROR_0002_USERSEARCH_NOT_SPECIFIED=\u5fc5\u9808\u8a2d\u5b9a userSearch +LdapUserDetailsService.ERROR_0003_POPULATOR_NOT_SPECIFIED=\u5fc5\u9808\u8a2d\u5b9a\u586b\u5165\u5668 +LdapUserDetailsService.ERROR_0004_USERDETAILSMAPPER_NOT_SPECIFIED=\u5fc5\u9808\u8a2d\u5b9a userDetailsMapper diff --git a/core/src/main/resources/org/pentaho/platform/engine/security/messages/messages_cn.properties b/core/src/main/resources/org/pentaho/platform/engine/security/messages/messages_cn.properties index e7c14d43434..5b7afbf95a9 100644 --- a/core/src/main/resources/org/pentaho/platform/engine/security/messages/messages_cn.properties +++ b/core/src/main/resources/org/pentaho/platform/engine/security/messages/messages_cn.properties @@ -1 +1,26 @@ -#Wed Jun 04 18:52:53 EDT 2008 +#Wed Jun 04 18:52:53 EDT 2008 +PentahoAclEntry.USER_NONE=\u7121 +PentahoAclEntry.USER_ADMINISTER=\u5168\u90e8 +PentahoAclEntry.USER_MANAGE_PERMS=\u6388\u8207\u6b0a\u9650 +PentahoAclEntry.USER_EXECUTE=\u57f7\u884c +PentahoAclEntry.USER_SUBSCRIBE=\u8a02\u95b1 +PentahoAclEntry.USER_ALL=\u5168\u90e8 +PentahoAclEntry.USER_CREATE=\u5efa\u7acb +PentahoAclEntry.USER_UPDATE=\u66f4\u65b0 +PentahoAclEntry.USER_DELETE=\u522a\u9664 +UserDetailsRoleListService.ERROR_0001_USERROLELISTSERVICE_NOT_SET=\u5fc5\u9808\u8a2d\u5b9a userRoleListService +AclPublisher.ERROR_0001_DEFAULT_ACL_REQUIRES_USER_OR_ROLE=\u9810\u8a2d ACL \u5fc5\u9808\u5df2\u6307\u5b9a\u4f7f\u7528\u8005\u6216\u89d2\u8272 +AclPublisher.ERROR_0002_DEFAULT_ACL_HAS_BOTH=\u9810\u8a2d ACL \u5fc5\u9808\u5df2\u6307\u5b9a\u4f7f\u7528\u8005\u6216\u89d2\u8272\uff0c\u4f46\u4e0d\u80fd\u5169\u8005\u7686\u6307\u5b9a +DefaultPentahoPasswordEncoder.ERROR_0001_RAWPASS_CANNOT_BE_NULL=rawPass \u4e0d\u80fd\u662f Null +DefaultPentahoPasswordEncoder.ERROR_0002_ENCPASS_CANNOT_BE_NULL=encPass \u4e0d\u80fd\u662f Null +LoggingInterceptor.DEBUG_BEGIN_METHOD=(LoggingInterceptor) \u6b63\u5728\u958b\u59cb\u65b9\u6cd5 +LoggingInterceptor.DEBUG_END_METHOD=(LoggingInterceptor) \u6b63\u5728\u7d50\u675f\u65b9\u6cd5 +LoggingInterceptor.DEBUG_RETURN_VALUE=(LoggingInterceptor) \u50b3\u56de\u503c\uff1a{0}: {1} +LoggingInterceptor.DEBUG_EXCEPTION_IN_METHOD=(LoggingInterceptor) \u65b9\u6cd5\u4e2d\u7684\u4f8b\u5916\u72c0\u6cc1 +LoggingInterceptor.DEBUG_EXCEPTION=(LoggingInterceptor) \u4f8b\u5916\u72c0\u6cc1\uff1a{0}: {1} +LoggingInterceptor.DEBUG_STACK_TRACE=(LoggingInterceptor) \u5806\u758a\u8ffd\u8e64\uff1a +LoggingInterceptor.DEBUG_METHOD_NAME=(LoggingInterceptor) \u65b9\u6cd5\uff1a{0} +LoggingInterceptor.DEBUG_TARGET_OBJECT=(LoggingInterceptor) \u76ee\u6a19\uff1a +LoggingInterceptor.DEBUG_METHOD_ARGS=(LoggingInterceptor) \u65b9\u6cd5\u5f15\u6578\uff1a{0} +MondrianCatalogPublisher.ERROR_0005_PUBLISH_EXCEPTION=\u767c\u884c\u6642\u767c\u751f\u4f8b\u5916\u72c0\u6cc1 +UseridAttributeLdapContextMapper.ERROR_0001_ATTRIBUTE_NOT_FOUND=\u5728\u50b3\u56de\u7684\u5c6c\u6027\u4e2d\u627e\u4e0d\u5230 LDAP \u5c6c\u6027 {0}\u3002 diff --git a/core/src/main/resources/org/pentaho/platform/engine/services/messages/messages_cn.properties b/core/src/main/resources/org/pentaho/platform/engine/services/messages/messages_cn.properties index 5885330e05d..b6d158963ea 100644 --- a/core/src/main/resources/org/pentaho/platform/engine/services/messages/messages_cn.properties +++ b/core/src/main/resources/org/pentaho/platform/engine/services/messages/messages_cn.properties @@ -12,109 +12,256 @@ # without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # See the GNU General Public License for more details. #Wed Jun 04 18:48:42 EDT 2008 -ServerDSAdmin.ERROR_0002_WEB_XML_INVALID=[cn_224] web.xml could not be parsed\: {0} -RuntimeContext.TRACE_INFO_USING_CURRENT_PARAMETER_VALUE=[cn_17] using the current value of {0} -Base.WARNING_LOGGING_LEVEL_UNKNOWN=[cn_29] Logging level unknown\: setting to debug -SequenceDefinition.DEBUG_USING_DEFAULT_VALUE=[cn_17] Adding default value of "{0}" to parameter {1} -ComponentBase.ERROR_0004_OUTPUT_PARAM_MISSING=[cn_241] The required output parameter "{0}" was not specified in the action-outputs -Message.USER_ERROR_EX=[cn_14] Error\: {0} - {2} ({1}) -SolutionRepository.USER_PUBLISH_DESCRIPTION=[cn_20] Read all of the solution files and re-generate the repository index -RuntimeContext.DEBUG_VALIDATING_COMPONENT=[cn_1] validateComponent validating component {0} -Message.USER_DEBUG=[cn_116] Debug\: {0} ({1}) -DSAdmin.USER_DATASOURCE_NOT_FOUND=[cn_251] Error\: Datasource not found -DSAdminHelper.USER_FILE_ERROR=[cn_255] A file could not be found or modified -RuntimeContext.DEBUG_INITIALIZING_COMPONENT=[cn_11] Initializing component -DSAdminHelper.USER_DATASOURCE_SAVED=[cn_257] The requested datasource {0} was saved -SolutionPublisher.ERROR_0001_PUBLISH_FAILED=[cn_98] Could not publish Solution Repository -RuntimeContext.ERROR_0019_INVALID_INPUT_REQUEST=[cn_32] Invalid input parameter {0} requested during execution of {1} -SolutionRepository.USER_PUBLISH_TITLE=[cn_24] Solution Repository -RuntimeContext.ERROR_0027_COULD_NOT_CREATE_CHILD=[cn_50] Could not create child instance -RuntimeContext.DEBUG_POST-EXECUTE_AUDIT=[cn_19] execute post-audit -RuntimeContext.DEBUG_STARTING_COMPONENT_EXECUTE=[cn_4] executeComponent starting audited execute -Template.ERROR_0005_COULD_NOT_DETERMINE_COLUMN=[cn_274] Column in result set could not be determined. To format using a result set, make sure the column name and input name are the same, or make sure the result set has only one column. -RuntimeContext.ERROR_0024_NO_CONTENT_REPOSITORY=[cn_45] Could not get content repository -RuntimeContext.DEBUG_EXECUTING_ACTION=[cn_24] Executing action definition\: Iteration {0} -RuntimeContext.ERROR_0031_INPUT_NOT_FOUND=[cn_279] The required parameter "{0}" was not specified in the action-inputs -RuntimeContext.ERROR_0029_SAVE_PARAM_NOT_FOUND=[cn_22] Error output parameter {0} not found during save. -RuntimeContext.ERROR_0022_INVALID_RESOURCE_REQUEST=[cn_20] Invalid resource {0} requested during execution of {1} -RuntimeContext.DEBUG_SETTING_LOGGING=[cn_21] Setting component log level to {0} -Message.USER_ERROR=[cn_161] Error\: {0} ({1}) -JBossDSAdmin.ERROR_0002_COULD_NOT_DELETE=[cn_289] Could not delete datasource file\: {0} -RuntimeContext.DEBUG_FINISHED_COMPONENT_EXECUTE=[cn_15] executeComponent finished audited execute -RuntimeContext.ERROR_0001_RUNTIME_RUNNING=[cn_16] Runtime is already running. -RuntimeContext.ERROR_0021_INVALID_OUTPUT_REQUEST=[cn_9] Invalid output parameter {0} requested during execution of {1} -ComponentBase.ERROR_0003_INPUT_PARAM_MISSING=[cn_293] The required input parameter "{0}" was not specified in the action-inputs -SequenceDefinition.ERROR_0008_RESOURCE_NO_LOCATION=[cn_296] Resource named {0} was ignored because there is no location specified -SequenceDefinition.ERROR_0005_PARSING_PARAMETERS=[cn_32] Parsing parameters in action sequence -Message.USER_INFO=[cn_122] Info\: {0} ({1}) -RuntimeContext.ERROR_0008_ACTION_INITIALIZATION_FAILED=[cn_23] Action initialization failed\: {0} -RuntimeContext.ERROR_0002_ACTION_NOT_VALIDATED=[cn_7] Action document does not validate\: {0} -SolutionEngine.ERROR_0007_ACTION_EXECUTION_FAILED=[cn_27] Action sequence execution failed -RuntimeContext.DEBUG_AUDIT=[cn_34] audit\: instanceId\={0}, objectId\={1}, messageType\={2} -RuntimeContext.ERROR_0018_PARAMETER_NOT_FULFILLED=[cn_39] The requested parameter {0} could not be fulfilled -SolutionEngine.ERROR_0008_INVALID_INSTANCE=[cn_18] Invalid instance id requested "{0}" -RuntimeContext.WARN_VARIABLE_IN_LOOP_NOT_RECOGNIZED=[cn_310] Variable in loop is not recognized\: {0} of type {1} -SolutionEngine.DEBUG_STARTING_EXECUTION=[cn_21] Starting execute of {0} -RuntimeContext.ERROR_0017_COMPONENT_EXECUTE_FAILED=[cn_18] Activity failed to execute -SolutionEngine.ERROR_0006_ACTION_SEQUENCE_INVALID=[cn_15] Action sequence validation failed -RuntimeContext.ERROR_0005_ACTION_RESOURCES_NOT_VALID=[cn_46] Action resources do not validate\: {0} -Message.USER_WARNING=[cn_140] Warning\: {0} ({1}) -RuntimeContext.ERROR_0011_NO_VALID_ACTIONS=[cn_43] No valid ActionDefinitions available -RuntimeContext.ERROR_0009_COULD_NOT_CREATE_COMPONENT=[cn_41] Could not create component {0} -DSAdminHelper.USER_DATASOURCE_MISSING=[cn_331] The requested datasource {0} was not found -SequenceDefinition.ERROR_0007_RESOURCE_NO_MIME_TYPE=[cn_34] Resource named {0} was ignored because there is no mime type -SolutionPublisher.USER_SOLUTION_REPOSITORY_UPDATED=[cn_97] The Solution Repository has been updated -RuntimeContext.USER_BAD_PARAMETER_PAGE=[cn_247] Could not generate the parameter page -SolutionEngine.ERROR_0001_PROCESS_NOT_SPECIFIED=[cn_26] No process specified -RuntimeContext.WARN_REQUESTED_PARAMETER_SOURCE_NOT_AVAILABLE=[cn_49] The requested parameter provider {0} for parameter {1} is not available -Base.ERROR_0002_EXECUTION_FAILED=[cn_58] Component execution failed -JBossDSAdmin.ERROR_0006_ERRORSAVINGEDIT=[cn_59] Error Saving edit to JBoss datasource -DSAdminHelper.USER_OPERATION_NOT_ALLOWED=[cn_341] The was not allowed to complete -RuntimeContext.DEBUG_PARAMETER_HTML=[cn_44] createParameterPage html\={0} -SequenceDefinition.ERROR_0004_VARIABLE_SOURCE_NOT_VALID=[cn_16] Variable definition {0} for parameter {1} is not valid -JBossDSAdmin.ERROR_0001_DS_FILE_MISSING=[cn_345] Datasource {0} in jboss-web.xml does not have a datasource (-ds.xml) file defined in the deploy directory -RuntimeContext.ERROR_0032_CONDITIONAL_EXECUTION_FAILED=[cn_65] The conditional execution did not complete successfully. -ServerDSAdmin.ERROR_0001_USER_WEB_XML_NOT_FOUND=[cn_346] web.xml not found at\: {0} -JBossDSAdmin.ERROR_0005_DS_FILE_INVALID=[cn_347] jboss -ds.xml could not be parsed\: {0} -DSAdmin.USER_CONNECTION_FAILED=[cn_350] An error occurred. The message returned was {0} -SolutionEngine.ERROR_0003_PATH_NOT_SPECIFIED=[cn_19] No solution path specified -ServerDSAdmin.ERROR_0007_DATASOURCE_IS_NULL=[cn_357] Cannot save a null datasource -SolutionPublisher.USER_ERROR_PUBLISH_FAILED=[cn_96] The Solution Repository publisher encountered errors\: -SolutionEngine.ERROR_0002_SOLUTION_NOT_SPECIFIED=[cn_22] No solution specified -RuntimeContext.ERROR_0014_NO_OUTPUT_HANDLER=[cn_14] Output handler could not be resolved -JBossDSAdmin.ERROR_0004_JBOSS_WEB_XML_INVALID=[cn_366] jboss-web.xml could not be parsed\: {0} -RuntimeContext.ERROR_0020_INVALID_LOOP_PARAMETER=[cn_10] Invalid loop parameter {0} requested during execution of {1} -SequenceDefinition.ERROR_0002_NO_ACTION_SEQUENCE_NODE=[cn_28] ActionSequenceFactory Invalid XML\: 'action-sequence' node not found in {0}/{1}/{2} -RuntimeContext.ERROR_0006_ACTION_COMPONENT_NOT_VALID=[cn_2] Action components do not validate\: {0} -SolutionEngine.DEBUG_LOADING_ACTION_DEFINITION=[cn_33] Loading action sequence definition file -RuntimeContext.ERROR_0016_COMPONENT_INITIALIZE_FAILED=[cn_48] Initialization of component failed -RuntimeContext.WARN_DEPRECATED_COMPONENT_CLASS=[cn_376] Attempt to use {0}, please use {1} instead -RuntimeContext.ERROR_0030_SEND_FEEDBACKFORM=[cn_377] Could not create feedback form. -RuntimeContext.ERROR_0012_EXECUTION_FAILED=[cn_33] ActionDefinition for {0} did not execute successfully -RuntimeContext.ERROR_0023_INVALID_OUTPUT_STREAM=[cn_8] Requested output stream cannot be provided for {0} because it is not of type 'content' -Base.DEBUG_VALIDATING_COMPONENT=[cn_75] Validating component for action {0} -RuntimeContext.USER_PARAMETER_FORM_SUBMIT=[cn_37] Submit -JBossDSAdmin.ERROR_0003_JBOSS_WEB_XML_NOT_FOUND=[cn_393] jboss-web.xml not found at\: {0} -RuntimeContext.DEBUG_EXECUTING_ACTIONS=[cn_42] Executing action sequence -DSAdminHelper.USER_DATASOURCE_RENAMED=[cn_398] The requested datasource {0} was renamed -SolutionEngine.ERROR_0004_ACTION_NOT_SPECIFIED=[cn_31] No action sequence specified -DSAdmin.USER_CONNECTION_SUCCESS=[cn_400] Connection was successful -SolutionEngine.DEBUG_GETTING_RUNTIME_CONTEXT=[cn_30] Getting runtime context and data -SequenceDefinition.DEBUG_ADDING_SOURCE_FOR_PARAMETER=[cn_23] Adding variable source {0} to parameter {1} -RuntimeContext.ERROR_0010_RUNTIME_DID_NOT_VALIDATE=[cn_5] Runtime has not been validated -DSAdminHelper.USER_OPERATION_FAILED=[cn_406] The operation failed -SequenceDefinition.ERROR_0006_PARSING_RESOURCE=[cn_14] Parsing resource in action sequence -RuntimeContext.WARN_VARIABLE_IN_LOOP_IS_NULL=[cn_408] Variable in loop is null\: {0} -ComponentBase.ERROR_0005_RESOURCE_PARAM_MISSING=[cn_411] The required resource "{0}" was not specified in the action-resources -BaseRequestHandler.ERROR_0001_NO_SOLUTION_ENGINE=[cn_10] Solution Engine could not be created -Base.DEBUG_VALIDATION_RESULT=[cn_94] execute validation\= -RuntimeContext.TRACE_USING_DEFAULT_PARAMETER_VALUE=[cn_47] using the default value of {0} -ComponentBase.ERROR_0006_COMPONENT_SETTING_PARAM_MISSING=[cn_416] The required setting "{0}" was not specified in the component-definition -Base.ERROR_0004_VALIDATION_FAILED=[cn_86] Component validation failed -RuntimeContext.ERROR_0013_BAD_PARAMETERS=[cn_29] Parameters could not be resolved -DSAdminHelper.USER_DATASOURCE_DELETED=[cn_429] The datasource {0} was deleted -RuntimeContext.DEBUG_NO_ACTION=[cn_28] No Action -Base.ERROR_0001_INVALID_SESSION=[cn_61] Invalid session -RuntimeContext.INFO_ACTION_NOT_EXECUTED=[cn_90] Actions not executed due to condition. -JBossDSAdmin.ERROR_0007_ERRORCREATINGDS=[cn_92] Error creating JBoss datasource -RuntimeContext.DEBUG_PRE-EXECUTE_AUDIT=[cn_3] execute pre-audit +ServerDSAdmin.ERROR_0002_WEB_XML_INVALID=[cn_224] \u7121\u6cd5\u5256\u6790 web.xml\uff1a{0} +RuntimeContext.TRACE_INFO_USING_CURRENT_PARAMETER_VALUE=[cn_17] \u6b63\u5728\u4f7f\u7528\u76ee\u524d\u7684 {0} \u503c +Base.WARNING_LOGGING_LEVEL_UNKNOWN=[cn_29] \u672a\u77e5\u7684\u8a18\u9304\u5c64\u7d1a\uff1a\u6b63\u5728\u8a2d\u5b9a\u70ba\u5075\u932f +SequenceDefinition.DEBUG_USING_DEFAULT_VALUE=[cn_17] \u6b63\u5728\u5c07 "{0}" \u7684\u9810\u8a2d\u503c\u65b0\u589e\u5230\u53c3\u6578 {1} +ComponentBase.ERROR_0004_OUTPUT_PARAM_MISSING=[cn_241] \u672a\u5728 action-outputs \u4e2d\u6307\u5b9a\u5fc5\u8981\u8f38\u51fa\u53c3\u6578 "{0}" +Message.USER_ERROR_EX=[cn_14] \u932f\u8aa4\uff1a{0} - {2} ({1}) +SolutionRepository.USER_PUBLISH_DESCRIPTION=[cn_20] \u8b80\u53d6\u6240\u6709\u65b9\u6848\u6a94\u4e26\u91cd\u65b0\u7522\u751f\u5b58\u653e\u5eab\u7d22\u5f15 +RuntimeContext.DEBUG_VALIDATING_COMPONENT=[cn_1] validateComponent \u6b63\u5728\u9a57\u8b49\u5143\u4ef6 {0} +Message.USER_DEBUG=[cn_116] \u5075\u932f\uff1a{0} ({1}) +DSAdmin.USER_DATASOURCE_NOT_FOUND=[cn_251] \u932f\u8aa4\uff1a\u627e\u4e0d\u5230\u8cc7\u6599\u4f86\u6e90 +DSAdminHelper.USER_FILE_ERROR=[cn_255] \u627e\u4e0d\u5230\u6216\u7121\u6cd5\u4fee\u6539\u6a94\u6848 +RuntimeContext.DEBUG_INITIALIZING_COMPONENT=[cn_11] \u6b63\u5728\u5c07\u5143\u4ef6\u521d\u59cb\u5316 +DSAdminHelper.USER_DATASOURCE_SAVED=[cn_257] \u5df2\u5132\u5b58\u8981\u6c42\u7684\u8cc7\u6599\u4f86\u6e90 {0} +SolutionPublisher.ERROR_0001_PUBLISH_FAILED=[cn_98] \u7121\u6cd5\u767c\u884c\u65b9\u6848\u5b58\u653e\u5eab +RuntimeContext.ERROR_0019_INVALID_INPUT_REQUEST=[cn_32] \u5728\u57f7\u884c {1} \u671f\u9593\u8981\u6c42\u7684\u8f38\u5165\u53c3\u6578 {0} \u7121\u6548 +SolutionRepository.USER_PUBLISH_TITLE=[cn_24] \u65b9\u6848\u5b58\u653e\u5eab +RuntimeContext.ERROR_0027_COULD_NOT_CREATE_CHILD=[cn_50] \u7121\u6cd5\u5efa\u7acb\u5b50\u57f7\u884c\u500b\u9ad4 +RuntimeContext.DEBUG_POST-EXECUTE_AUDIT=[cn_19] \u57f7\u884c\u5f8c\u7e8c\u7a3d\u6838 +RuntimeContext.DEBUG_STARTING_COMPONENT_EXECUTE=[cn_4] executeComponent \u6b63\u5728\u958b\u59cb\u7a3d\u6838\u7684\u57f7\u884c +Template.ERROR_0005_COULD_NOT_DETERMINE_COLUMN=[cn_274] \u7121\u6cd5\u5224\u65b7\u7d50\u679c\u96c6\u4e2d\u7684\u8cc7\u6599\u884c\u3002\u82e5\u8981\u4f7f\u7528\u7d50\u679c\u96c6\u9032\u884c\u683c\u5f0f\u8a2d\u5b9a\uff0c\u8acb\u78ba\u5b9a\u8cc7\u6599\u884c\u540d\u7a31\u8207\u8f38\u5165\u540d\u7a31\u76f8\u540c\uff0c\u6216\u78ba\u8a8d\u7d50\u679c\u96c6\u53ea\u6709\u4e00\u500b\u8cc7\u6599\u884c\u3002 +RuntimeContext.ERROR_0024_NO_CONTENT_REPOSITORY=[cn_45] \u7121\u6cd5\u53d6\u5f97\u5167\u5bb9\u5b58\u653e\u5eab +RuntimeContext.DEBUG_EXECUTING_ACTION=[cn_24] \u6b63\u5728\u57f7\u884c\u52d5\u4f5c\u5b9a\u7fa9\uff1a\u53cd\u8986\u904b\u7b97 {0} +RuntimeContext.ERROR_0031_INPUT_NOT_FOUND=[cn_279] \u672a\u5728 action-inputs \u4e2d\u6307\u5b9a\u5fc5\u8981\u53c3\u6578 "{0}" +RuntimeContext.ERROR_0029_SAVE_PARAM_NOT_FOUND=[cn_22] \u5132\u5b58\u671f\u9593\u627e\u4e0d\u5230\u932f\u8aa4\u8f38\u51fa\u53c3\u6578 {0}\u3002 +RuntimeContext.ERROR_0022_INVALID_RESOURCE_REQUEST=[cn_20] \u5728\u57f7\u884c {1} \u671f\u9593\u8981\u6c42\u7684\u8cc7\u6e90 {0} \u7121\u6548 +RuntimeContext.DEBUG_SETTING_LOGGING=[cn_21] \u6b63\u5728\u5c07\u5143\u4ef6\u8a18\u9304\u5c64\u7d1a\u8a2d\u5b9a\u70ba {0} +Message.USER_ERROR=[cn_161] \u932f\u8aa4\uff1a{0} ({1}) +JBossDSAdmin.ERROR_0002_COULD_NOT_DELETE=[cn_289] \u7121\u6cd5\u522a\u9664\u8cc7\u6599\u4f86\u6e90\u6a94\u6848\uff1a{0} +RuntimeContext.DEBUG_FINISHED_COMPONENT_EXECUTE=[cn_15] executeComponent \u5df2\u5b8c\u6210\u7a3d\u6838\u7684\u57f7\u884c +RuntimeContext.ERROR_0001_RUNTIME_RUNNING=[cn_16] \u57f7\u884c\u968e\u6bb5\u5df2\u5728\u57f7\u884c\u3002 +RuntimeContext.ERROR_0021_INVALID_OUTPUT_REQUEST=[cn_9] \u5728\u57f7\u884c {1} \u671f\u9593\u8981\u6c42\u7684\u8f38\u51fa\u53c3\u6578 {0} \u7121\u6548 +ComponentBase.ERROR_0003_INPUT_PARAM_MISSING=[cn_293] \u672a\u5728 action-inputs \u4e2d\u6307\u5b9a\u5fc5\u8981\u8f38\u5165\u53c3\u6578 "{0}" +SequenceDefinition.ERROR_0008_RESOURCE_NO_LOCATION=[cn_296] \u5df2\u5ffd\u7565\u540d\u70ba {0} \u7684\u8cc7\u6e90\uff0c\u56e0\u70ba\u672a\u6307\u5b9a\u4efb\u4f55\u4f4d\u7f6e +SequenceDefinition.ERROR_0005_PARSING_PARAMETERS=[cn_32] \u6b63\u5728\u5256\u6790\u52d5\u4f5c\u5e8f\u5217\u4e2d\u7684\u53c3\u6578 +Message.USER_INFO=[cn_122] \u8cc7\u8a0a\uff1a{0} ({1}) +RuntimeContext.ERROR_0008_ACTION_INITIALIZATION_FAILED=[cn_23] \u52d5\u4f5c\u521d\u59cb\u5316\u5931\u6557\uff1a{0} +RuntimeContext.ERROR_0002_ACTION_NOT_VALIDATED=[cn_7] \u7121\u6cd5\u9a57\u8b49\u52d5\u4f5c\u6587\u4ef6\uff1a{0} +SolutionEngine.ERROR_0007_ACTION_EXECUTION_FAILED=[cn_27] \u52d5\u4f5c\u5e8f\u5217\u57f7\u884c\u5931\u6557 +RuntimeContext.DEBUG_AUDIT=[cn_34] \u7a3d\u6838\uff1ainstanceId={0}\uff0cobjectId={1}\uff0cmessageType={2} +RuntimeContext.ERROR_0018_PARAMETER_NOT_FULFILLED=[cn_39] \u7121\u6cd5\u6eff\u8db3\u8981\u6c42\u7684\u53c3\u6578 {0} +SolutionEngine.ERROR_0008_INVALID_INSTANCE=[cn_18] \u5df2\u8981\u6c42\u7121\u6548\u7684\u57f7\u884c\u500b\u9ad4\u8b58\u5225\u78bc "{0}" +RuntimeContext.WARN_VARIABLE_IN_LOOP_NOT_RECOGNIZED=[cn_310] \u7121\u6cd5\u8fa8\u8b58\u8ff4\u5708\u4e2d\u7684\u8b8a\u6578\uff1a{0}\uff0c\u985e\u578b\u70ba {1} +SolutionEngine.DEBUG_STARTING_EXECUTION=[cn_21] \u6b63\u5728\u958b\u59cb {0} \u7684\u57f7\u884c +RuntimeContext.ERROR_0017_COMPONENT_EXECUTE_FAILED=[cn_18] \u6d3b\u52d5\u7121\u6cd5\u57f7\u884c +SolutionEngine.ERROR_0006_ACTION_SEQUENCE_INVALID=[cn_15] \u52d5\u4f5c\u5e8f\u5217\u9a57\u8b49\u5931\u6557 +RuntimeContext.ERROR_0005_ACTION_RESOURCES_NOT_VALID=[cn_46] \u7121\u6cd5\u9a57\u8b49\u52d5\u4f5c\u8cc7\u6e90\uff1a{0} +Message.USER_WARNING=[cn_140] \u8b66\u544a\uff1a{0} ({1}) +RuntimeContext.ERROR_0011_NO_VALID_ACTIONS=[cn_43] \u6c92\u6709\u53ef\u7528\u7684\u6709\u6548 ActionDefinitions +RuntimeContext.ERROR_0009_COULD_NOT_CREATE_COMPONENT=[cn_41] \u7121\u6cd5\u5efa\u7acb\u5143\u4ef6 {0} +DSAdminHelper.USER_DATASOURCE_MISSING=[cn_331] \u627e\u4e0d\u5230\u8981\u6c42\u7684\u8cc7\u6599\u4f86\u6e90 {0} +SequenceDefinition.ERROR_0007_RESOURCE_NO_MIME_TYPE=[cn_34] \u5df2\u5ffd\u7565\u540d\u70ba {0} \u7684\u8cc7\u6e90\uff0c\u56e0\u70ba\u6c92\u6709 MIME \u985e\u578b +SolutionPublisher.USER_SOLUTION_REPOSITORY_UPDATED=[cn_97] \u5df2\u66f4\u65b0\u65b9\u6848\u5b58\u653e\u5eab +RuntimeContext.USER_BAD_PARAMETER_PAGE=[cn_247] \u7121\u6cd5\u7522\u751f\u53c3\u6578\u9801\u9762 +SolutionEngine.ERROR_0001_PROCESS_NOT_SPECIFIED=[cn_26] \u672a\u6307\u5b9a\u4efb\u4f55\u8655\u7406\u7a0b\u5e8f +RuntimeContext.WARN_REQUESTED_PARAMETER_SOURCE_NOT_AVAILABLE=[cn_49] \u91dd\u5c0d\u53c3\u6578 {1} \u6240\u8981\u6c42\u7684\u53c3\u6578\u63d0\u4f9b\u8005 {0} \u7121\u6cd5\u4f7f\u7528 +Base.ERROR_0002_EXECUTION_FAILED=[cn_58] \u5143\u4ef6\u57f7\u884c\u5931\u6557 +JBossDSAdmin.ERROR_0006_ERRORSAVINGEDIT=[cn_59] \u5c07\u7de8\u8f2f\u5132\u5b58\u5230 JBoss \u8cc7\u6599\u4f86\u6e90\u6642\u767c\u751f\u932f\u8aa4 +DSAdminHelper.USER_OPERATION_NOT_ALLOWED=[cn_341] \u4e0d\u5141\u8a31\u5b8c\u6210 +RuntimeContext.DEBUG_PARAMETER_HTML=[cn_44] createParameterPage html={0} +SequenceDefinition.ERROR_0004_VARIABLE_SOURCE_NOT_VALID=[cn_16] \u53c3\u6578 {1} \u7684\u8b8a\u6578\u5b9a\u7fa9 {0} \u7121\u6548 +JBossDSAdmin.ERROR_0001_DS_FILE_MISSING=[cn_345] jboss-web.xml \u4e2d\u7684\u8cc7\u6599\u4f86\u6e90 {0} \u672a\u5728\u90e8\u7f72\u76ee\u9304\u4e2d\u5b9a\u7fa9\u8cc7\u6599\u4f86\u6e90 (-ds.xml) \u6a94\u6848 +RuntimeContext.ERROR_0032_CONDITIONAL_EXECUTION_FAILED=[cn_65] \u672a\u9806\u5229\u5b8c\u6210\u689d\u4ef6\u5f0f\u57f7\u884c\u3002 +ServerDSAdmin.ERROR_0001_USER_WEB_XML_NOT_FOUND=[cn_346] \u7121\u6cd5\u5728\u4e0b\u5217\u4f4d\u7f6e\u627e\u5230 web.xml\uff1a{0} +JBossDSAdmin.ERROR_0005_DS_FILE_INVALID=[cn_347] \u7121\u6cd5\u5256\u6790 jboss -ds.xml\uff1a{0} +DSAdmin.USER_CONNECTION_FAILED=[cn_350] \u767c\u751f\u932f\u8aa4\u3002\u50b3\u56de\u7684\u8a0a\u606f\u70ba {0} +SolutionEngine.ERROR_0003_PATH_NOT_SPECIFIED=[cn_19] \u672a\u6307\u5b9a\u4efb\u4f55\u65b9\u6848\u8def\u5f91 +ServerDSAdmin.ERROR_0007_DATASOURCE_IS_NULL=[cn_357] \u7121\u6cd5\u5132\u5b58 Null \u8cc7\u6599\u4f86\u6e90 +SolutionPublisher.USER_ERROR_PUBLISH_FAILED=[cn_96] \u65b9\u6848\u5b58\u653e\u5eab\u767c\u884c\u8005\u9047\u5230\u932f\u8aa4\uff1a +SolutionEngine.ERROR_0002_SOLUTION_NOT_SPECIFIED=[cn_22] \u672a\u6307\u5b9a\u4efb\u4f55\u65b9\u6848 +RuntimeContext.ERROR_0014_NO_OUTPUT_HANDLER=[cn_14] \u7121\u6cd5\u89e3\u6790\u8f38\u51fa\u8655\u7406\u5e38\u5f0f +JBossDSAdmin.ERROR_0004_JBOSS_WEB_XML_INVALID=[cn_366] \u7121\u6cd5\u5256\u6790 jboss-web.xml\uff1a{0} +RuntimeContext.ERROR_0020_INVALID_LOOP_PARAMETER=[cn_10] \u5728\u57f7\u884c {1} \u671f\u9593\u8981\u6c42\u7684\u8ff4\u5708\u53c3\u6578 {0} \u7121\u6548 +SequenceDefinition.ERROR_0002_NO_ACTION_SEQUENCE_NODE=[cn_28] ActionSequenceFactory \u7121\u6548 XML\uff1a\u5728 {0}/{1}/{2} \u4e2d\u627e\u4e0d\u5230 'action-sequence' \u7bc0\u9ede +RuntimeContext.ERROR_0006_ACTION_COMPONENT_NOT_VALID=[cn_2] \u7121\u6cd5\u9a57\u8b49\u52d5\u4f5c\u5143\u4ef6\uff1a{0} +SolutionEngine.DEBUG_LOADING_ACTION_DEFINITION=[cn_33] \u6b63\u5728\u8f09\u5165\u52d5\u4f5c\u5e8f\u5217\u5b9a\u7fa9\u6a94 +RuntimeContext.ERROR_0016_COMPONENT_INITIALIZE_FAILED=[cn_48] \u5143\u4ef6\u521d\u59cb\u5316\u5931\u6557 +RuntimeContext.WARN_DEPRECATED_COMPONENT_CLASS=[cn_376] \u5617\u8a66\u4f7f\u7528 {0}\uff0c\u8acb\u6539\u70ba\u4f7f\u7528 {1} +RuntimeContext.ERROR_0030_SEND_FEEDBACKFORM=[cn_377] \u7121\u6cd5\u5efa\u7acb\u53cd\u994b\u8868\u55ae\u3002 +RuntimeContext.ERROR_0012_EXECUTION_FAILED=[cn_33] {0} \u7684 ActionDefinition \u7121\u6cd5\u9806\u5229\u57f7\u884c +RuntimeContext.ERROR_0023_INVALID_OUTPUT_STREAM=[cn_8] \u7121\u6cd5\u91dd\u5c0d {0} \u63d0\u4f9b\u6240\u8981\u6c42\u7684\u8f38\u51fa\u4e32\u6d41\uff0c\u56e0\u70ba\u5b83\u7684\u985e\u578b\u4e0d\u662f 'content' +Base.DEBUG_VALIDATING_COMPONENT=[cn_75] \u6b63\u5728\u9a57\u8b49\u52d5\u4f5c {0} \u7684\u5143\u4ef6 +RuntimeContext.USER_PARAMETER_FORM_SUBMIT=[cn_37] \u63d0\u4ea4 +JBossDSAdmin.ERROR_0003_JBOSS_WEB_XML_NOT_FOUND=[cn_393] \u7121\u6cd5\u5728\u4e0b\u5217\u4f4d\u7f6e\u627e\u5230 jboss-web.xml\uff1a{0} +RuntimeContext.DEBUG_EXECUTING_ACTIONS=[cn_42] \u6b63\u5728\u57f7\u884c\u52d5\u4f5c\u5e8f\u5217 +DSAdminHelper.USER_DATASOURCE_RENAMED=[cn_398] \u5df2\u91cd\u65b0\u547d\u540d\u8981\u6c42\u7684\u8cc7\u6599\u4f86\u6e90 {0} +SolutionEngine.ERROR_0004_ACTION_NOT_SPECIFIED=[cn_31] \u672a\u6307\u5b9a\u4efb\u4f55\u52d5\u4f5c\u5e8f\u5217 +DSAdmin.USER_CONNECTION_SUCCESS=[cn_400] \u9023\u7dda\u6210\u529f +SolutionEngine.DEBUG_GETTING_RUNTIME_CONTEXT=[cn_30] \u6b63\u5728\u53d6\u5f97\u57f7\u884c\u968e\u6bb5\u4e0a\u4e0b\u6587\u8207\u8cc7\u6599 +SequenceDefinition.DEBUG_ADDING_SOURCE_FOR_PARAMETER=[cn_23] \u6b63\u5728\u5c07\u8b8a\u6578\u4f86\u6e90 {0} \u65b0\u589e\u5230\u53c3\u6578 {1} +RuntimeContext.ERROR_0010_RUNTIME_DID_NOT_VALIDATE=[cn_5] \u672a\u9a57\u8b49\u57f7\u884c\u968e\u6bb5 +DSAdminHelper.USER_OPERATION_FAILED=[cn_406] \u4f5c\u696d\u5931\u6557 +SequenceDefinition.ERROR_0006_PARSING_RESOURCE=[cn_14] \u6b63\u5728\u5256\u6790\u52d5\u4f5c\u5e8f\u5217\u4e2d\u7684\u8cc7\u6e90 +RuntimeContext.WARN_VARIABLE_IN_LOOP_IS_NULL=[cn_408] \u8ff4\u5708\u4e2d\u7684\u8b8a\u6578\u662f Null\uff1a{0} +ComponentBase.ERROR_0005_RESOURCE_PARAM_MISSING=[cn_411] \u672a\u5728 action-resources \u4e2d\u6307\u5b9a\u5fc5\u8981\u8cc7\u6e90 "{0}" +BaseRequestHandler.ERROR_0001_NO_SOLUTION_ENGINE=[cn_10] \u7121\u6cd5\u5efa\u7acb\u65b9\u6848\u5f15\u64ce +Base.DEBUG_VALIDATION_RESULT=[cn_94] \u57f7\u884c\u9a57\u8b49= +RuntimeContext.TRACE_USING_DEFAULT_PARAMETER_VALUE=[cn_47] \u6b63\u5728\u4f7f\u7528 {0} \u7684\u9810\u8a2d\u503c +ComponentBase.ERROR_0006_COMPONENT_SETTING_PARAM_MISSING=[cn_416] \u672a\u5728 component-definition \u4e2d\u6307\u5b9a\u5fc5\u8981\u8a2d\u5b9a "{0}" +Base.ERROR_0004_VALIDATION_FAILED=[cn_86] \u5143\u4ef6\u9a57\u8b49\u5931\u6557 +RuntimeContext.ERROR_0013_BAD_PARAMETERS=[cn_29] \u7121\u6cd5\u89e3\u6790\u53c3\u6578 +DSAdminHelper.USER_DATASOURCE_DELETED=[cn_429] \u5df2\u522a\u9664\u8cc7\u6599\u4f86\u6e90 {0} +RuntimeContext.DEBUG_NO_ACTION=[cn_28] \u7121\u52d5\u4f5c +Base.ERROR_0001_INVALID_SESSION=[cn_61] \u7121\u6548\u7684\u5de5\u4f5c\u968e\u6bb5 +RuntimeContext.INFO_ACTION_NOT_EXECUTED=[cn_90] \u56e0\u689d\u4ef6\u800c\u672a\u57f7\u884c\u52d5\u4f5c\u3002 +JBossDSAdmin.ERROR_0007_ERRORCREATINGDS=[cn_92] \u5efa\u7acb JBoss \u8cc7\u6599\u4f86\u6e90\u6642\u767c\u751f\u932f\u8aa4 +RuntimeContext.DEBUG_PRE-EXECUTE_AUDIT=[cn_3] \u57f7\u884c\u9810\u5148\u7a3d\u6838 +ActionResource.ERROR_0001_FEATURE_NOT_IMPLEMENTED=\u529f\u80fd\u5c1a\u672a\u5be6\u4f5c\u3002 +Base.CODE_COMPONENT_ID={0}\uff1a{1} +Base.CODE_LOG_ID={0}\uff1a\u5143\u4ef6\uff1a{1}\uff1a{2} +ParameterManager.ERROR_0001_DISPOSE_ERROR=\u8655\u7f6e\u57f7\u884c\u968e\u6bb5\u53c3\u6578 {0} \u5931\u6557\u3002 +RuntimeContext.CODE_XFORM_CONTROL_LABEL_END= +RuntimeContext.CODE_XFORM_CONTROL_LABEL_START= +RuntimeContext.ERROR_0033_NOT_PEEKABLE=\u91dd\u5c0d\u8ff4\u5708\u6307\u5b9a\u7684\u7d50\u679c\u96c6\u7121\u6cd5\u9810\u89bd\uff0c\u4f46\u5df2\u8a2d\u5b9a\u300c\u50c5\u9650\u9810\u89bd\u300d +RuntimeContext.ERROR_0034_IO_ERROR=\u5c07\u8f38\u51fa\u5beb\u5165\u5230\u4e32\u6d41\u6642\u767c\u751f\u932f\u8aa4\u3002 +RuntimeContext.ERROR_0035_ACTION_VALIDATION_FAILED=\u52d5\u4f5c\u9a57\u8b49\u5931\u6557\u3002 +RuntimeContext.WARN_UNRECOGNIZED_SCOPE=\u7121\u6cd5\u8fa8\u8b58\u53c3\u6578 {1} \u7684\u7bc4\u570d {0}\u3002 +RuntimeContext.INFO_NO_OUTPUT_HANDLER=\u5b58\u5728\u300c\u56de\u61c9\u300d\u7684\u8f38\u51fa\uff0c\u4f46\u8f38\u51fa\u8655\u7406\u5e38\u5f0f\u662f Null\u3002 +RuntimeContext.ERROR_UNABLE_TO_GET_RESOURCE_AS_DOCUMENT=\u7121\u6cd5\u4ee5\u6587\u4ef6\u5f62\u5f0f\u53d6\u5f97\u8cc7\u6e90 +RuntimeContext.WARN_NO_PLUGIN_PROPERTIES_BUNDLE=\u7121\u6cd5\u5f9e\u57f7\u884c\u968e\u6bb5\u5957\u4ef6\u8b80\u53d6 plugin.properties\u3002 +RuntimeContext.WARN_NO_PLUGIN_PROPERTIES=\u5728\u7cfb\u7d71\u65b9\u6848\u4e2d\u627e\u4e0d\u5230\u8986\u5beb\u5916\u639b\u7a0b\u5f0f\u5c6c\u6027 +RuntimeContext.WARN_BAD_PLUGIN_PROPERTIES=\u8b80\u53d6\u8986\u5beb\u5c6c\u6027\u6642\u767c\u751f\u4f8b\u5916\u72c0\u6cc1 +SoapHelper.ERROR_0001_UNKNOWN_ERROR=\u672a\u77e5\u7684\u932f\u8aa4 +SequenceDefinition.INFO_OUTPUT_PARAMETERS_NOT_DEFINED=\u52d5\u4f5c\u5e8f\u5217\u6587\u4ef6\u4e2d\u672a\u5b9a\u7fa9\u4efb\u4f55\u8f38\u51fa\u53c3\u6578\u3002 +SequenceDefinition.INFO_RESOURCES_PARAMETERS_NOT_DEFINED=\u52d5\u4f5c\u5e8f\u5217\u6587\u4ef6\u4e2d\u672a\u5b9a\u7fa9\u4efb\u4f55\u8cc7\u6e90\u53c3\u6578\u3002 +MessageFormatter.ERROR_0001_REQUEST_FAILED=\u8981\u6c42\u5931\u6557 +MessageFormatter.ERROR_0002_COULD_NOT_PROCESS=\u65b9\u6848\u5f15\u64ce\u7121\u6cd5\u8655\u7406\u4e8b\u4ef6 +MessageFormatter.ERROR_0003_NO_TEMPLATE_FOUND=\u7121\u6cd5\u5728\u4e0b\u5217\u4f4d\u7f6e\u53d6\u5f97\u6b64\u932f\u8aa4\u56de\u61c9\u7684 html \u7bc4\u672c\uff1a{0} +MessageFormatter.USER_ACTION_SUCCESSFUL=\u52d5\u4f5c\u6210\u529f +MessageFormatter.USER_SERVER_VERSION=\u4f3a\u670d\u5668\u7248\u672c\uff1a{0} +MessageFormatter.USER_START_ACTION=Pentaho BI Platform - \u958b\u59cb\u52d5\u4f5c +MessageFormatter.ACTION_SEQUENCE_EXECUTION_FAILED=\u52d5\u4f5c\u5e8f\u5217\u57f7\u884c\u5931\u6557\uff0c\u8acb\u67e5\u770b\u4e0b\u9762\u7684\u8a73\u7d30\u8cc7\u6599 +MessageFormatter.EXCEPTION_STACK_TRACE=\u5806\u758a\u8ffd\u8e64\uff1a +MessageFormatter.EXCEPTION_FIELD_NOT_APPLICABLE=\u4e0d\u9069\u7528 +MessageFormatter.LOG_EXCEPTION_TIME=| \u932f\u8aa4\u6642\u9593\uff1a{0} +MessageFormatter.LOG_EXCEPTION_SESSION_ID=| \u5de5\u4f5c\u968e\u6bb5\u8b58\u5225\u78bc\uff1a{0} +MessageFormatter.LOG_EXCEPTION_INSTANCE_ID=| \u57f7\u884c\u500b\u9ad4\u8b58\u5225\u78bc\uff1a{0} +MessageFormatter.LOG_EXCEPTION_ACTION_SEQUENCE=| \u52d5\u4f5c\u5e8f\u5217\uff1a{0} +MessageFormatter.LOG_EXCEPTION_ACTION_CLASS=| \u52d5\u4f5c\u985e\u5225\uff1a{0} +MessageFormatter.LOG_EXCEPTION_ACTION_DESC=| \u52d5\u4f5c\u63cf\u8ff0\uff1a{0} +MessageFormatter.LOG_EXCEPTION_STEP_NUM=| \u6b65\u9a5f\u865f\u78bc\uff1a{0} +MessageFormatter.LOG_EXCEPTION_LOOP_INDEX=| \u8ff4\u5708\u7d22\u5f15\uff1a{0} +MessageFormatter.LOG_EXCEPTION_ACTION_SEQUENCE_EXECUTION_STACK=| \u57f7\u884c\u5806\u758a\uff1a +MessageFormatter.RESPONSE_ERROR_HEADING=Pentaho BI Platform \u5728\u57f7\u884c\u52d5\u4f5c\u5e8f\u5217\u6642\u56de\u5831\u932f\u8aa4 +MessageFormatter.RESPONSE_EXCEPTION_TIME_LABEL=\u932f\u8aa4\u6642\u9593\uff1a +MessageFormatter.RESPONSE_EXCEPTION_MESSAGES_LABEL=\u53ef\u80fd\u539f\u56e0\uff1a +MessageFormatter.RESPONSE_EXCEPTION_MSG_LABEL=\u932f\u8aa4\u8a0a\u606f\uff1a +MessageFormatter.RESPONSE_EXCEPTION_TYPE_LABEL=\u932f\u8aa4\u985e\u578b\uff1a +MessageFormatter.RESPONSE_EXCEPTION_SESSION_ID_LABEL=\u5de5\u4f5c\u968e\u6bb5\u8b58\u5225\u78bc\uff1a +MessageFormatter.RESPONSE_EXCEPTION_INSTANCE_ID_LABEL=\u57f7\u884c\u500b\u9ad4\u8b58\u5225\u78bc\uff1a +MessageFormatter.RESPONSE_EXCEPTION_ACTION_SEQUENCE_LABEL=\u52d5\u4f5c\u5e8f\u5217\uff1a +MessageFormatter.RESPONSE_EXCEPTION_ACTION_SEQUENCE_EXECUTION_STACK_LABEL=\u57f7\u884c\u5806\u758a\uff1a +MessageFormatter.RESPONSE_EXCEPTION_ACTION_CLASS_LABEL=\u52d5\u4f5c\u985e\u5225\uff1a +MessageFormatter.RESPONSE_EXCEPTION_ACTION_DESC_LABEL=\u52d5\u4f5c\u63cf\u8ff0\uff1a +MessageFormatter.RESPONSE_EXCEPTION_STEP_NUM_LABEL=\u6b65\u9a5f\u865f\u78bc\uff1a +MessageFormatter.RESPONSE_EXCEPTION_LOOP_INDEX_LABEL=\u8ff4\u5708\u7d22\u5f15\uff1a +MessageFormatter.RESPONSE_EXCEPTION_STACK_TRACE_LABEL=\u5806\u758a\u8ffd\u8e64\uff1a +PRO_SUBSCRIPTREP.ERROR_0005_GENERAL_ERROR=\u8a02\u95b1\u5b58\u653e\u5eab\u4e2d\u767c\u751f\u932f\u8aa4 +CacheManager.ERROR_0001_NOSESSION=\u7121\u6cd5\u5728\u6c92\u6709\u6709\u6548\u5de5\u4f5c\u968e\u6bb5\u8b58\u5225\u78bc\u7684\u60c5\u6cc1\u4e0b\u7f6e\u65bc\u5feb\u53d6\u4e2d +CacheManager.ERROR_0002_NOT_INSTANCE_OF_CACHE_PROVIDER=\u7269\u4ef6\u4e0d\u662f\u5feb\u53d6\u63d0\u4f9b\u8005\u7684\u57f7\u884c\u500b\u9ad4 +CacheManager.ERROR_0003_CACHE_NOT_ENABLED=\u672a\u555f\u7528\u5feb\u53d6 +CacheManager.ERROR_0005_UNABLE_TO_BUILD_CACHE=\u7121\u6cd5\u5efa\u7f6e\u5feb\u53d6 +CacheManager.WARN_0001_CACHE_NOT_ENABLED=\u672a\u555f\u7528\u5feb\u53d6 +CacheManager.WARN_0002_REGION_ALREADY_EXIST=\u5730\u5340\u5df2\u5b58\u5728 {0} +CacheManager.WARN_0003_REGION_DOES_NOT_EXIST=\u5730\u5340\u4e0d\u5b58\u5728 {0} +CacheManager.INFO_0001_CACHE_DOES_NOT_EXIST=\u5feb\u53d6\u4e0d\u5b58\u5728 +ApacheVFSOutputHandler.ERROR_0001_CANNOT_GET_VFSMGR=\u7121\u6cd5\u53d6\u5f97 VFS FileSystemManager +ApacheVFSOutputHandler.ERROR_0002_CANNOT_GET_VF=\u7121\u6cd5\u53d6\u5f97\u865b\u64ec\u6a94\u6848\uff1a{0} +ApacheVFSOutputHandler.ERROR_0003_CANNOT_WRITE=\u7121\u6cd5\u5beb\u5165\u5230\u865b\u64ec\u6a94\u6848\uff1a{0} +ApacheVFSOutputHandler.ERROR_0004_CANNOT_GET_CTX=\u7121\u6cd5\u53d6\u5f97\u865b\u64ec\u6a94\u6848\u5167\u5bb9\uff1a{0} +ApacheVFSOutputHandler.ERROR_0005_CANNOT_GET_HANDLER=\u53d6\u5f97 {0} \u7684\u8f38\u51fa\u8655\u7406\u5e38\u5f0f\u6642\u767c\u751f\u932f\u8aa4 +MetadataPublisher.USER_PUBLISHER_NAME=\u5831\u544a\u5f8c\u8a2d\u8cc7\u6599 +MetadataPublisher.USER_PUBLISHER_DESCRIPTION=\u7528\u65bc\u81e8\u6a5f\u64cd\u4f5c\u5831\u544a\u7684\u5f8c\u8a2d\u8cc7\u6599 +MetadataPublisher.USER_METADATA_RELOADED=\u5df2\u91cd\u65b0\u8f09\u5165\u9069\u7528\u65bc {0} \u500b\u65b9\u6848\u7684\u5831\u544a\u5f8c\u8a2d\u8cc7\u6599\u3002 +MetadataPublisher.USER_DELETE_META_FAILED=\u522a\u9664\u820a metadata.xmi \u6a94\u6848\u6642\u767c\u751f\u554f\u984c\u3002 +MetadataPublisher.ERROR_0001_USER_IMPORT_META_FAILED=\u8f09\u5165\u67d0\u4e9b metadata.xmi \u6a94\u6848\u6642\u767c\u751f\u554f\u984c\u3002 +MetadataPublisher.INFO_DELETING_METADATA=\u6b63\u5728\u522a\u9664 {0} \u7684\u73fe\u6709\u5f8c\u8a2d\u8cc7\u6599 +MetadataPublisher.INFO_0001_CHECK_LOG=\u8acb\u6aa2\u67e5\u4f3a\u670d\u5668\u8a18\u9304 +MetadataPublisher.DEBUG_ALREADY_LOADED=\u5df2\u91dd\u5c0d {0} \u8f09\u5165\u5f8c\u8a2d\u8cc7\u6599 +MetadataPublisher.INFO_IMPORTING_METADATA=\u6b63\u5728\u532f\u5165 {0} \u7684\u5f8c\u8a2d\u8cc7\u6599 +PMDSystemListener.ERROR_0001_PROPERTIES_NOT_FOUND=\u627e\u4e0d\u5230\u5c6c\u6027\u4ee5\u5c07\u5f8c\u8a2d\u8cc7\u6599\u5b58\u653e\u5eab\u521d\u59cb\u5316 - \u5f8c\u8a2d\u8cc7\u6599\u67e5\u8a62\u5c07\u4e0d\u6703\u904b\u4f5c +PMDSystemListener.ERROR_0002_COULD_NOT_INITIALIZE=\u7121\u6cd5\u5c07\u5f8c\u8a2d\u8cc7\u6599\u5b58\u653e\u5eab\u521d\u59cb\u5316 - \u5f8c\u8a2d\u8cc7\u6599\u67e5\u8a62\u5c07\u4e0d\u6703\u904b\u4f5c +TemplateUtil.NOT_FOUND=\u627e\u4e0d\u5230\uff1a{0} +TemplateUtil.INVALID_COLUMN=\u7121\u6548\u7684\u8cc7\u6599\u884c\uff1a{0} +TemplateUtil.NO_TOKEN=\u5075\u6e2c\u4e0d\u5230\u4efb\u4f55\u6b0a\u6756 +StandaloneSimpleJNDIDatasourceAdmin.ERROR_0001_SOLUTION_REPO_NOT_FOUND=\u7121\u6cd5\u5728\u4e0b\u5217\u4f4d\u7f6e\u627e\u5230\u65b9\u6848\u5b58\u653e\u5eab\uff1a{0} +StandaloneSimpleJNDIDatasourceAdmin.ERROR_0002_INPUT_STREAM_NOT_FOUND=\u7121\u6cd5\u64f7\u53d6\u8f38\u5165\u4e32\u6d41 {0} +StandaloneSimpleJNDIDatasourceAdmin.ERROR_0003_INPUT_STREAM_COULD_NOT_BE_CLOSED=\u7121\u6cd5\u95dc\u9589\u8f38\u5165\u4e32\u6d41 +StandaloneSimpleJNDIDatasourceAdmin.ERROR_0004_OUTPUT_STREAM_COULD_NOT_BE_CLOSED=\u7121\u6cd5\u95dc\u9589\u8f38\u5165\u4e32\u6d41 +MondrianCatalogPublisher.ERROR_0005_PUBLISH_EXCEPTION=\u767c\u884c\u6642\u767c\u751f\u4f8b\u5916\u72c0\u6cc1 +DatasourceSystemListener.ERROR_0001_UNABLE_TO_INSTANTIATE_OBJECT=\u7121\u6cd5\u5c07\u7269\u4ef6\u5177\u73fe\u5316 +DatasourceSystemListener.ERROR_0002_UNABLE_TO_GET_DATASOURCE=\u7121\u6cd5\u53d6\u5f97\u8cc7\u6599\u4f86\u6e90\u7269\u4ef6 +DatasourceSystemListener.ERROR_0003_UNABLE_TO_POOL_DATASOURCE=\u7121\u6cd5\u5c07\u4e0b\u5217\u8cc7\u6599\u4f86\u6e90\u7269\u4ef6\u653e\u5165\u96c6\u5340\uff1a{0}\uff0c\u539f\u56e0\u70ba {1} +DatasourceSystemListener.WARN_0001_UNABLE_TO_GET_CONNECTION_ADDRESS=\u7121\u6cd5\u53d6\u5f97\u9023\u7dda\u4f4d\u5740\u3002\u5047\u8a2d\u4e3b\u6a5f\u8207\u9023\u63a5\u57e0\u4e0d\u540c +DatasourceSystemListener.WARN_0002_UNABLE_TO_PARSE_SERVER_URL=\u7121\u6cd5\u5256\u6790\u5b8c\u6574\u4f3a\u670d\u5668 URL\u3002\u5047\u8a2d\u4e3b\u6a5f\u8207\u9023\u63a5\u57e0\u4e0d\u540c +DatasourceSystemListener.WARN_0003_UNABLE_TO_GET_SERVER_ADDRESS=\u7121\u6cd5\u53d6\u5f97\u4f3a\u670d\u5668\u4f4d\u5740\u3002\u5047\u8a2d\u4e3b\u6a5f\u8207\u9023\u63a5\u57e0\u4e0d\u540c +DatasourceSystemListener.WARN_0004_UNABLE_TO_GET_PORT_NUMBER=\u7121\u6cd5\u53d6\u5f97\u9023\u7dda\u7684\u9023\u63a5\u57e0\u865f\u78bc\u3002\u5047\u8a2d\u4e3b\u6a5f\u8207\u9023\u63a5\u57e0\u4e0d\u540c +DatasourceService.ERROR_0003_UNABLE_TO_GET_JNDI_DATASOURCE=\u7121\u6cd5\u53d6\u5f97 jndi \u8cc7\u6599\u4f86\u6e90 +DatasourceService.ERROR_0001_UNABLE_TO_INSTANTIATE_OBJECT=\u7121\u6cd5\u5c07\u7269\u4ef6\u5177\u73fe\u5316 +DatasourceService.ERROR_0002_UNABLE_TO_GET_DATASOURCE=\u7121\u6cd5\u53d6\u5f97\u8cc7\u6599\u4f86\u6e90\u7269\u4ef6 +DatasourceService.DEBUG_0001_UNABLE_TO_FIND_DATASOURCE_IN_REPOSITORY=\u7121\u6cd5\u5728 Pentaho \u53d7\u63a7\u5b58\u653e\u5eab\u4e2d\u627e\u5230\u8cc7\u6599\u4f86\u6e90\uff1a\u539f\u56e0\u70ba {0} +PentahoConnectionFactory.ERROR_0001_COULD_NOT_CREATE_CONNECTION=\u7121\u6cd5\u5efa\u7acb IPentahoConnection [{0}] +SimpleContentGenerator.ERROR_0001_NO_OUTPUT_HANDLER=\u7121\u6cd5\u53d6\u5f97\u8f38\u51fa\u8655\u7406\u5e38\u5f0f +SimpleContentGenerator.ERROR_0002_NO_CONTENT_ITEM=\u7121\u6cd5\u53d6\u5f97\u8f38\u51fa\u5167\u5bb9\u9805\u76ee +SimpleContentGenerator.ERROR_0003_NO_OUTPUT_STREAM=\u7121\u6cd5\u53d6\u5f97\u8f38\u51fa\u4e32\u6d41 +PojoComponent.CANNOT_USE_SETCLASS=\u7121\u6548\u7684\u8a2d\u5b9a\u5b50 - \u7121\u6cd5\u547c\u53eb\u7a31\u70ba setClass \u7684\u65b9\u6cd5 +PojoComponent.UNUSED_INPUT=\u672a\u4f7f\u7528\u7684\u8f38\u5165\u53c3\u6578\uff1a{0} +ActionDelegate.ERROR_0001_MIMETYPE_NOT_DECLARED=\u91dd\u5c0d\u4e32\u6d41\u52d5\u4f5c\uff0cMIME TYPE \u4e0d\u80fd\u662f Null +ActionDelegate.ERROR_0002_ACTION_CANNOT_ACCEPT_STREAM=\u627e\u5230\u4e32\u6d41\u8f38\u51fa "{0}"\uff0c\u4f46\u662f\u52d5\u4f5c "{1}" \u7121\u6cd5\u63a5\u53d7\u5b83\u3002\u52d5\u4f5c\u5fc5\u9808\u5be6\u4f5c IStreamingAction\u3002 +ActionDelegate.ERROR_0003_OUTPUT_STREAM_NOT_AVAILABLE_1=\u7121\u6cd5\u91dd\u5c0d\u5167\u5bb9\u985e\u578b\u8f38\u51fa "{0}" \u884d\u751f\u8f38\u51fa\u4e32\u6d41\u3002 +ActionDelegate.ERROR_0004_OUTPUT_STREAM_NOT_AVAILABLE_2=\u7121\u6cd5\u91dd\u5c0d\u4e32\u6d41\u52d5\u4f5c "{0}" \u884d\u751f\u8f38\u51fa\u4e32\u6d41\u3002\u539f\u56e0\uff1a\u4f86\u81ea\u5167\u5bb9\u9805\u76ee\u7684 Null \u8f38\u51fa\u4e32\u6d41 +ActionDelegate.ERROR_0005_FAILED_TO_SET_INPUT=\u8a2d\u5b9a "{0}" \u8f38\u5165\u6642\u767c\u751f\u932f\u8aa4\u3002\u5617\u8a66\u5728\u985e\u578b\u70ba "{3}" \u7684\u52d5\u4f5c ("{2}") \u5c6c\u6027\u4e0a\u8a2d\u5b9a\u985e\u578b\u70ba "{1}" \u7684\u52d5\u4f5c\u5b9a\u7fa9\u8f38\u5165\u3002 +ActionDelegate.ERROR_0006_FAILED_TO_SET_RESOURCE=\u8a2d\u5b9a\u540d\u70ba "{0}" \u7684\u8cc7\u6e90\u6642\u767c\u751f\u932f\u8aa4\u3002\u5617\u8a66\u5728\u985e\u578b\u70ba "{3}" \u7684\u52d5\u4f5c ("{2}") \u5c6c\u6027\u4e0a\u8a2d\u5b9a\u985e\u578b\u70ba "{1}" \u7684\u52d5\u4f5c\u5b9a\u7fa9\u8cc7\u6e90\u3002 +ActionDelegate.ERROR_0007_NO_ACTION_BEAN_SPECIFIED=\u672a\u91dd\u5c0d\u6b64 ActionDelegate \u6307\u5b9a\u4efb\u4f55\u52d5\u4f5c Bean +ActionDelegate.ERROR_0008_FAILED_TO_SET_STREAM=\u8a2d\u5b9a\u8f38\u51fa "{0}" \u7684\u4e32\u6d41\u6642\u767c\u751f\u932f\u8aa4\u3002\u5617\u8a66\u5728\u985e\u578b\u70ba "{3}" \u7684\u52d5\u4f5c ("{2}") \u5c6c\u6027\u4e0a\u8a2d\u5b9a\u985e\u578b\u70ba "{1}" \u7684\u52d5\u4f5c\u5b9a\u7fa9\u8f38\u51fa\u3002 +ActionDelegate.WARN_INPUT_NOT_WRITABLE=\u52d5\u4f5c "{0}" \u6c92\u6709\u7528\u65bc\u8a2d\u5b9a\u540d\u70ba "{1}" \u4e14\u985e\u578b\u70ba "{2}" \u4e4b\u8f38\u5165\u7684\u65b9\u6cd5 +ActionDelegate.WARN_OUTPUT_NOT_READABLE=\u52d5\u4f5c\u5b9a\u7fa9\u9810\u671f\u540d\u70ba "{0}" (\u985e\u578b\u70ba "{1}") \u7684\u8f38\u51fa\uff0c\u4f46\u52d5\u4f5c "{2}" \u6c92\u6709\u65b9\u6cd5\u53ef\u4ee5\u4f9d\u8a72\u540d\u7a31\u5b58\u53d6 Bean \u5c6c\u6027 +ActionDelegate.WARN_RESOURCE_NOT_WRITABLE=\u52d5\u4f5c "{0}" \u6c92\u6709\u7528\u65bc\u8a2d\u5b9a\u985e\u578b\u70ba "{2}" \u4e4b\u8cc7\u6e90 "{1}" \u7684\u65b9\u6cd5 +ActionDelegate.WARN_USING_IO_COMPATIBILITY_MODE=\u60a8\u6b63\u5728\u4f7f\u7528\u76f8\u5bb9\u6027\u6a21\u5f0f\u52d5\u4f5c\u5f15\u6578\u540d\u7a31\u3002\u5728\u8f38\u5165\u3001\u8f38\u51fa\u8207\u8cc7\u6e90\u4e2d\u4f7f\u7528\u9023\u5b57\u865f\u7684\u505a\u6cd5\u5df2\u88ab\u99dd\u5cf0\u5f0f\u5927\u5c0f\u5beb\u53d6\u4ee3\u3002\u8acb\u4f7f\u7528 "{0}" \u800c\u975e "{1}"\u3002 +SolutionRepoSaveContentGenerator.ERROR_0001_NO_FILEPATH=\u672a\u63d0\u4f9b 'filepath' \u53c3\u6578 +SolutionRepoSaveContentGenerator.ERROR_0002_NO_STATE=\u672a\u63d0\u4f9b 'state' \u53c3\u6578 +SolutionRepoSaveContentGenerator.ERROR_0003_BAD_PATH=\u63d0\u4f9b\u7684\u6a94\u6848\u8def\u5f91\u7121\u6548\uff1a{0} +SolutionRepoSaveContentGenerator.ERROR_0004_CANNOT_REPLACE=\u6a94\u6848\u5b58\u5728\uff0c\u4f46\u672a\u8a2d\u5b9a 'replace' \u53c3\u6578 +SolutionRepoSaveContentGenerator.ERROR_0005_CREDENTIALS=\u7121\u6548\u7684\u8a8d\u8b49 +SolutionRepoSaveContentGenerator.ERROR_0006_SAVE_FAILED=\u7121\u6cd5\u5c07\u6a94\u6848\u5132\u5b58\u5230\u5b58\u653e\u5eab +SolutionRepoSaveContentGenerator.USER_FILE_SAVE=\u5df2\u6210\u529f\u5132\u5b58\u6a94\u6848 +SolutionRepoLoadContentGenerator.ERROR_0001_LOAD_FAILED=\u7121\u6cd5\u8f09\u5165\u6a94\u6848 (\u907a\u5931\u6216\u7121\u6548\u7684\u6a94\u6848)\uff1a{0} +SolutionResourceContentGenerator.ERROR_0001_INVALID_PATH=\u5df2\u8981\u6c42\u7121\u6548\u7684\u8def\u5f91\uff0c\u5167\u5bb9\u5fc5\u9808\u4f4d\u65bc 'solution'/web\uff1a{0} +SolutionResourceContentGenerator.ERROR_0002_INVALID_MIMETYPE=\u4e0b\u5217\u9805\u76ee\u7684\u4e0d\u5141\u8a31\u6216\u672a\u77e5\u7684 Mime \u985e\u578b\uff1a{0} +SolutionResourceContentGenerator.ERROR_0003_RESOURCE_NOT_FOUND=\u627e\u4e0d\u5230\u8cc7\u6e90\uff1a{0} +SolutionURLContentGenerator.ERROR_0001_CANNOT_HANDLE_TYPE=\u7121\u6cd5\u8655\u7406\u5167\u5bb9\u985e\u578b\uff1a{0} +SolutionURLContentGenerator.ERROR_0002_RESOURCE_NOT_FOUND=\u627e\u4e0d\u5230\u8cc7\u6e90\uff1a{0} +SolutionURLContentGenerator.ERROR_0001_NO_FILEPATH=\u672a\u63d0\u4f9b 'path' \u53c3\u6578 +SolutionURLContentGenerator.ERROR_0002_CANNOT_HANDLE_TYPE=\u7121\u6548\u7684\u5167\u5bb9\u985e\u578b\uff1a{0} +SolutionURLContentGenerator.ERROR_0003_RESOURCE_NOT_FOUND=\u627e\u4e0d\u5230\u8cc7\u6e90\uff1a{0} +TenantAwareDatasourceService.ERROR_0001_NAME_FORMAT_ILLEGAL=datasourceNameFormat \u4e0d\u5408\u6cd5 - \u5fc5\u9808\u5305\u542b {0} \u8207 {1} \u5143\u7d20\u3002 +TenantAwareDatasourceService.ERROR_0002_TENANT_ID_REQUIRED=\u79df\u7528\u6236\u8b58\u5225\u78bc\u662f\u5fc5\u8981\u9805\u76ee\u3002 +TenantAwareDatasourceService.ERROR_0003_SESSION_VARIABLE_NAME_REQUIRED=\u5fc5\u9808\u8a2d\u5b9a tenantSessionVariableName\u3002 +ActionSequenceJCRHelper.ERROR_0017_INVALID_XML_DOCUMENT=XML \u6587\u4ef6\u7121\u6548 {0} +ActionSequenceJCRHelper.ERROR_0019_NO_DATA_IN_FILE=\u6a94\u6848\u6c92\u6709\u4efb\u4f55\u8cc7\u6599 {0} +ActionSequenceJCRHelper.ERROR_0009_INVALID_DOCUMENT=\u65b9\u6848\u6587\u4ef6 {0} \u4e0d\u662f\u6709\u6548\u7684 XML \u6587\u4ef6 +ActionSequenceJCRHelper.WARN_MISSING_RESOURCE_PROPERTY=\u9069\u7528\u65bc "{2}" \u7684\u8cc7\u6e90\u6a94 "{1}" \u4e2d\u7684 "{0}" \u5c6c\u6027\u907a\u5931 +ActionSequenceJCRHelper.ERROR_0007_COULD_NOT_READ_PROPERTIES=\u7121\u6cd5\u8b80\u53d6\u5c6c\u6027\u6a94 {0} +ActionSequenceJCRHelper.ERROR_0001_INVALID_REPOSITORY=\u7121\u6cd5\u5f9e\u5de5\u4f5c\u968e\u6bb5\u64f7\u53d6\u5b58\u653e\u5eab +PooledDatasourceHelper.ERROR_0001_DATASOURCE_CREATE_ERROR_NO_DIALECT=\u7121\u6cd5\u70ba\u9023\u7dda [ {0} ] \u5efa\u7acb\u8cc7\u6599\u4f86\u6e90\u3002\u6c92\u6709\u53ef\u7528\u7684\u65b9\u8a00\u8cc7\u8a0a\u3002 +PooledDatasourceHelper.ERROR_0002_DATASOURCE_CREATE_ERROR_NO_CLASSNAME=\u7121\u6cd5\u70ba\u9023\u7dda [ {0} ] \u5efa\u7acb\u8cc7\u6599\u4f86\u6e90\u3002\u6c92\u6709\u53ef\u7528\u7684\u9a45\u52d5\u7a0b\u5f0f\u985e\u5225\u540d\u7a31\u3002 +PooledDatasourceHelper.ERROR_0003_DATASOURCE_CREATE_ERROR_NO_DRIVER=\u7121\u6cd5\u70ba\u9023\u7dda [ {0} ] \u5efa\u7acb\u8cc7\u6599\u4f86\u6e90\u3002\u7121\u6cd5\u5f9e\u65b9\u8a00\u53d6\u5f97\u9a45\u52d5\u7a0b\u5f0f\u8cc7\u8a0a\u3002 +PooledDatasourceHelper.ERROR_0004_UNABLE_TO_POOL_DATASOURCE_NO_DIALECT=\u7121\u6cd5\u5c07\u8cc7\u6599\u4f86\u6e90 [ {0} ] \u653e\u5165\u96c6\u5340\u3002\u6c92\u6709\u53ef\u7528\u7684\u65b9\u8a00\u8cc7\u8a0a\u3002 +PooledDatasourceHelper.ERROR_0005_UNABLE_TO_POOL_DATASOURCE_NO_DIALECT_SERVICE=\u7121\u6cd5\u5c07\u8cc7\u6599\u4f86\u6e90 [ {0} ] \u653e\u5165\u96c6\u5340\u3002\u6c92\u6709\u53ef\u7528\u7684\u65b9\u8a00\u670d\u52d9\u3002 +PooledDatasourceHelper.ERROR_0006_UNABLE_TO_POOL_DATASOURCE_NO_CLASSNAME=\u7121\u6cd5\u5c07\u8cc7\u6599\u4f86\u6e90 [ {0} ] \u653e\u5165\u96c6\u5340\u3002\u6c92\u6709\u53ef\u7528\u7684\u9a45\u52d5\u7a0b\u5f0f\u985e\u5225\u540d\u7a31\u3002 +PooledDatasourceHelper.ERROR_0007_UNABLE_TO_POOL_DATASOURCE_NO_DRIVER=\u7121\u6cd5\u5c07\u8cc7\u6599\u4f86\u6e90 [ {0} ] \u653e\u5165\u96c6\u5340\u3002\u7121\u6cd5\u5f9e\u65b9\u8a00\u53d6\u5f97\u9a45\u52d5\u7a0b\u5f0f\u8cc7\u8a0a\u3002 +PooledDatasourceHelper.ERROR_0008_UNABLE_TO_POOL_DATASOURCE_IT_IS_JNDI=\u7121\u6cd5\u5c07\u8cc7\u6599\u4f86\u6e90 [ {0} ] \u653e\u5165\u96c6\u5340\u3002IT \u70ba JNDI \u9023\u7dda\u3002 +PooledDatasourceHelper.ERROR_0009_UNABLE_TO_POOL_DATASOURCE_CANT_INITIALIZE=\u7121\u6cd5\u5c07\u8cc7\u6599\u4f86\u6e90 [ {0} ] \u653e\u5165\u96c6\u5340\u3002\u7121\u6cd5\u5c07 {1} \u521d\u59cb\u5316\u3002 +PooledDatasourceHelper.ERROR_0001_DATASOURCE_CANNOT_LOAD_DIALECT_SVC=\u7121\u6cd5\u5f9e Pentaho \u5de5\u4f5c\u968e\u6bb5\u8f09\u5165 IDatabaseDialectService\u3002 \ No newline at end of file diff --git a/core/src/main/resources/org/pentaho/platform/uifoundation/messages/messages_cn.properties b/core/src/main/resources/org/pentaho/platform/uifoundation/messages/messages_cn.properties index 7a5f9c77b2a..a99f022faa1 100644 --- a/core/src/main/resources/org/pentaho/platform/uifoundation/messages/messages_cn.properties +++ b/core/src/main/resources/org/pentaho/platform/uifoundation/messages/messages_cn.properties @@ -1,34 +1,82 @@ #Wed Jun 04 19:16:27 EDT 2008 -WidgetGrid.ERROR_0002_NO_VALUE_ITEM=[cn_410] The value item has not been defined -Widget.ERROR_0002_INVALID_RESOURCE=[cn_230] Could not load resource\: {0} -BaseUI.ERROR_0002_XSL_NOT_FOUND=[cn_407] XSL file name not found for -FilterPanel.ERROR_0003_NO_FILTER_VALUES=[cn_383] Filters results are null -InputForm.ERROR_0006_TEMPLATE_NOT_SPECIFIED=[cn_400] Template name not specifed -BaseTest.DEBUG_JUNIT_TEST=[cn_90] JUnit Test -ChartEngine.ERROR_0002_COULD_NOT_CREATE_CHART=[cn_251] Invalid chart defintion -CHARTS.ERROR_0002_CHART_DATA_MISSING=[cn_268] Could not load chart data from {0} -WidgetGrid.ERROR_0004_NAME_COLUMN_MISSING=[cn_379] The specified name column "{0}" was not found -InputForm.ERROR_0002_ACTION_NAME_NOT_SPECIFIED=[cn_398] Action path not specified -ABSTRACTCHARTEXPRESSION.ERROR_0001_ERROR_GENERATING_CHART=[cn_290] Could not generate chart image. -WidgetGrid.ERROR_0001_NO_RESULTS_FROM_ACTION=[cn_404] Could not get any results from the specified action -Html.DEBUG_GETTING_CONTENT=[cn_391] Getting content from "{0}" -InputForm.ERROR_0003_ACTION_PATH_NOT_SPECIFIED=[cn_385] Action name not specifed -CategoryDatasetChartComponent.ERROR_0001_INVALID_CHART_DEFINITION=[cn_250] Invalid Chart Definition - {0} -InputForm.ERROR_0004_ACTION_NOT_FOUND=[cn_406] The specified inbox action could not be found -CHARTS.ERROR_0001_CHART_DEFINIION_MISSING=[cn_352] Could not load chart definition {0} -FilterDefinition.ERROR_0002_VALUE_COLUMN_MISSING=[cn_382] The specified value column "{0}" was not found -FilterDefinition.ERROR_0001_NAME_COLUMN_MISSING=[cn_394] The specified name column "{0}" was not found -BaseUI.ERROR_0001_NO_CONTENT=[cn_386] Component did not create any content -FilterPanel.ERROR_0001_NO_FILTERS=[cn_384] No valid filters defined -Widget.ERROR_0001_COULD_NOT_CREATE_WIDGET=[cn_473] Could not create widget display -InputForm.ERROR_0005_INBOX_DEFINITION_MISSING=[cn_408] Inbox definition is null in -FilterDefinition.ERROR_0003_NOT_IN_SESSION=[cn_403] Could not get list from session "{0}" -InputForm.ERROR_0001_SOLUTION_NOT_SPECIFIED=[cn_390] Solution not specified -WidgetGrid.ERROR_0005_VALUE_COLUMN_MISSING=[cn_377] The specified value column "{0}" was not found -WidgetGrid.ERROR_0003_DEFINITION_NOT_VALID=[cn_378] Could not read filter panel definition in {0} -JFreeChartEngine.ERROR_0001_NULL_ORDER_ARGUMENT=[cn_114] Null 'order' argument. -InputForm.ERROR_0007_INBOX_DEFINITION_INVALID=[cn_376] Inbox definition is not valid in -FilterPanel.ERROR_0004_COULD_NOT_CREATE_CONTENT=[cn_409] Could not create filter panel content -Widget.ERROR_0001_COULD_NOT_CREATE=[cn_381] The widget component could not be created -ChartEngine.ERROR_0001_COULD_NOT_CREATE_CHART=[cn_387] Chart engine could not create chart -Html.ERROR_0001_COULD_NOT_GET_CONTENT=[cn_392] Could not get content from the requested url "{0}" +WidgetGrid.ERROR_0002_NO_VALUE_ITEM=[cn_410] \u672a\u5b9a\u7fa9\u503c\u9805\u76ee +Widget.ERROR_0002_INVALID_RESOURCE=[cn_230] \u7121\u6cd5\u8f09\u5165\u8cc7\u6e90\uff1a{0} +BaseUI.ERROR_0002_XSL_NOT_FOUND=[cn_407] \u627e\u4e0d\u5230\u4e0b\u5217\u9805\u76ee\u7684 XSL \u6a94\u6848\u540d\u7a31\uff1a +FilterPanel.ERROR_0003_NO_FILTER_VALUES=[cn_383] \u7be9\u9078\u7d50\u679c\u662f Null +InputForm.ERROR_0006_TEMPLATE_NOT_SPECIFIED=[cn_400] \u672a\u6307\u5b9a\u7bc4\u672c\u540d\u7a31 +BaseTest.DEBUG_JUNIT_TEST=[cn_90] JUnit \u6e2c\u8a66 +ChartEngine.ERROR_0002_COULD_NOT_CREATE_CHART=[cn_251] \u7121\u6548\u7684\u5716\u8868\u5b9a\u7fa9 +CHARTS.ERROR_0002_CHART_DATA_MISSING=[cn_268] \u7121\u6cd5\u5f9e {0} \u8f09\u5165\u5716\u8868\u8cc7\u6599 +WidgetGrid.ERROR_0004_NAME_COLUMN_MISSING=[cn_379] \u627e\u4e0d\u5230\u6307\u5b9a\u7684\u540d\u7a31\u8cc7\u6599\u884c "{0}" +InputForm.ERROR_0002_ACTION_NAME_NOT_SPECIFIED=[cn_398] \u672a\u6307\u5b9a\u52d5\u4f5c\u8def\u5f91 +ABSTRACTCHARTEXPRESSION.ERROR_0001_ERROR_GENERATING_CHART=[cn_290] \u7121\u6cd5\u7522\u751f\u5716\u8868\u5f71\u50cf\u3002 +WidgetGrid.ERROR_0001_NO_RESULTS_FROM_ACTION=[cn_404] \u7121\u6cd5\u5f9e\u6307\u5b9a\u7684\u52d5\u4f5c\u53d6\u5f97\u4efb\u4f55\u7d50\u679c +Html.DEBUG_GETTING_CONTENT=[cn_391] \u6b63\u5728\u5f9e "{0}" \u53d6\u5f97\u5167\u5bb9 +InputForm.ERROR_0003_ACTION_PATH_NOT_SPECIFIED=[cn_385] \u672a\u6307\u5b9a\u52d5\u4f5c\u540d\u7a31 +CategoryDatasetChartComponent.ERROR_0001_INVALID_CHART_DEFINITION=[cn_250] \u7121\u6548\u7684\u5716\u8868\u5b9a\u7fa9 - {0} +InputForm.ERROR_0004_ACTION_NOT_FOUND=[cn_406] \u627e\u4e0d\u5230\u6307\u5b9a\u7684\u6536\u4ef6\u5323\u52d5\u4f5c +CHARTS.ERROR_0001_CHART_DEFINIION_MISSING=[cn_352] \u7121\u6cd5\u8f09\u5165\u5716\u8868\u5b9a\u7fa9 {0} +FilterDefinition.ERROR_0002_VALUE_COLUMN_MISSING=[cn_382] \u627e\u4e0d\u5230\u6307\u5b9a\u7684\u503c\u8cc7\u6599\u884c "{0}" +FilterDefinition.ERROR_0001_NAME_COLUMN_MISSING=[cn_394] \u627e\u4e0d\u5230\u6307\u5b9a\u7684\u540d\u7a31\u8cc7\u6599\u884c "{0}" +BaseUI.ERROR_0001_NO_CONTENT=[cn_386] \u5143\u4ef6\u672a\u5efa\u7acb\u4efb\u4f55\u5167\u5bb9 +FilterPanel.ERROR_0001_NO_FILTERS=[cn_384] \u672a\u5b9a\u7fa9\u4efb\u4f55\u6709\u6548\u7684\u7be9\u9078 +Widget.ERROR_0001_COULD_NOT_CREATE_WIDGET=[cn_473] \u7121\u6cd5\u5efa\u7acb\u5c0f\u5de5\u5177\u986f\u793a +InputForm.ERROR_0005_INBOX_DEFINITION_MISSING=[cn_408] \u6536\u4ef6\u5323\u5b9a\u7fa9\u5728\u4e0b\u5217\u4f4d\u7f6e\u4e2d\u662f Null\uff1a +FilterDefinition.ERROR_0003_NOT_IN_SESSION=[cn_403] \u7121\u6cd5\u5f9e\u5de5\u4f5c\u968e\u6bb5 "{0}" \u53d6\u5f97\u6e05\u55ae +InputForm.ERROR_0001_SOLUTION_NOT_SPECIFIED=[cn_390] \u672a\u6307\u5b9a\u65b9\u6848 +WidgetGrid.ERROR_0005_VALUE_COLUMN_MISSING=[cn_377] \u627e\u4e0d\u5230\u6307\u5b9a\u7684\u503c\u8cc7\u6599\u884c "{0}" +WidgetGrid.ERROR_0003_DEFINITION_NOT_VALID=[cn_378] \u7121\u6cd5\u8b80\u53d6 {0} \u4e2d\u7684\u7be9\u9078\u9762\u677f\u5b9a\u7fa9 +JFreeChartEngine.ERROR_0001_NULL_ORDER_ARGUMENT=[cn_114] Null 'order' \u5f15\u6578\u3002 +InputForm.ERROR_0007_INBOX_DEFINITION_INVALID=[cn_376] \u4e0b\u5217\u4f4d\u7f6e\u4e2d\u7684\u6536\u4ef6\u5323\u5b9a\u7fa9\u7121\u6548\uff1a +FilterPanel.ERROR_0004_COULD_NOT_CREATE_CONTENT=[cn_409] \u7121\u6cd5\u5efa\u7acb\u7be9\u9078\u9762\u677f\u5167\u5bb9 +Widget.ERROR_0001_COULD_NOT_CREATE=[cn_381] \u7121\u6cd5\u5efa\u7acb\u5c0f\u5de5\u5177\u5143\u4ef6 +ChartEngine.ERROR_0001_COULD_NOT_CREATE_CHART=[cn_387] \u5716\u8868\u5f15\u64ce\u7121\u6cd5\u5efa\u7acb\u5716\u8868 +Html.ERROR_0001_COULD_NOT_GET_CONTENT=[cn_392] \u7121\u6cd5\u5f9e\u8981\u6c42\u7684 URL "{0}" \u53d6\u5f97\u5167\u5bb9 +AbstractChartComponent.ERROR_0001_CANT_CREATE_TEMP_CHART=\u7121\u6cd5\u91dd\u5c0d\u8981\u6c42\u7684\u5716\u8868\u5efa\u7acb\u66ab\u5b58\u6a94 +AbstractChartComponent.ERROR_0002_URL_ENCODE_FAILED=\u7121\u6cd5\u5c0d URL \u9032\u884c\u7de8\u78bc +DIALCHARTCOMPONENT.ERROR_0001_ERROR_PARSING_VALUE=\u5256\u6790\u8f49\u76e4\u503c\u6642\u767c\u751f\u932f\u8aa4\uff1a{0}\u3002\u503c\u5df2\u91cd\u8a2d\u70ba\u96f6\u3002 +CHART.USER_NO_DATA_AVAILABLE=\u6c92\u6709\u53ef\u8b93\u5716\u8868\u986f\u793a\u7684\u8cc7\u6599\u3002 +CHART.USER_INCORRECT_DATA_FORMAT=\u5716\u8868\u683c\u5f0f\u4e0d\u6b63\u78ba\u6216\u907a\u5931 +CHART.WARN_DEPRECATED_PROPERTY=\u5c6c\u6027 {0} \u5df2\u6dd8\u6c70\u3002\u8acb\u6539\u70ba\u4f7f\u7528\u5c6c\u6027 {1}\u3002 +CHART.WARN_PROPERTY_WILL_NOT_VALIDATE=\u4f7f\u7528\u7684\u5c6c\u6027 {0} \u5c07\u4e0d\u6703\u91dd\u5c0d pentaho-chart XML \u7db1\u8981\u9032\u884c\u9a57\u8b49\uff01 +CHART.WARN_DEPRECATED_CHILD=\u5143\u7d20 {0} \u5728\u6c92\u6709\u7236 {1} \u5143\u7d20\u7684\u60c5\u6cc1\u4e0b\u662f\u4e0d\u5141\u8a31\u7684\u3002 +CategoryDatasetChartComponent.UNKNOWN_SERIES=\u672a\u77e5\u7684\u7cfb\u5217 +CategoryDatasetChartComponent.ERROR_0002_INVALID_SERIES_INDEX=\u4f86\u81ea categoryItemEntity \u7684\u7cfb\u5217\u7d22\u5f15\u7121\u6548 - {0} +CategoryDatasetChartComponent.ERROR_0003_INVALID_ACTION_RESOURCE=\u7121\u6548\u7684\u52d5\u4f5c\u8cc7\u6e90 - {0} +FilterDefinition.ERROR_0005_NAME_ELEMENT_EMPTY= +FilterDefinition.ERROR_0003_FILTER_DEFINITION_NULL=\u7be9\u9078\u5b9a\u7fa9\u7684\u7d50\u679c\u96c6\u662f Null\u3002 +FilterDefinition.ERROR_0004_FILTER_DEFINITION_EMPTY=\u7be9\u9078\u5b9a\u7fa9\u7684\u7d50\u679c\u96c6\u4f3c\u4e4e\u662f\u7a7a\u7684\u3002 +FilterDefinition.ERROR_0006_NAME_ELEMENT_WHITESPACE= +FilterPanelComponent.ERROR_0002_CREATE_XML=\u7121\u6cd5\u5efa\u7acb FilterPanel \u7684 XML \u6587\u4ef6\u3002 +FilterPanelComponent.ERROR_0003_CREATE=\u7121\u6cd5\u5efa\u7acb FilterPanel\u3002 +FilterPanelComponent.ERROR_0001_POPULATE=\u7be9\u9078\u9762\u677f\u7121\u6cd5\u586b\u5165 +ChartHelper.ERROR_0001_IO_PROBLEM_GETTING_CHART_TYPE=\u7121\u6cd5\u5f9e XML \u5b9a\u7fa9\u64f7\u53d6\u5716\u8868\u985e\u578b - I/O \u932f\u8aa4\u3002 +ChartHelper.ERROR_0002_COULD_NOT_DETERMINE_CHART_TYPE=\u7121\u6cd5\u5728 XML \u5b9a\u7fa9\u4e2d\u627e\u5230\u5716\u8868\u985e\u578b\uff0c\u4e5f\u627e\u4e0d\u5230\u53c3\u6578\u5f62\u5f0f\u7684\u5716\u8868\u985e\u578b\u3002\u7121\u6cd5\u5728\u6c92\u6709\u5716\u8868\u985e\u578b\u7684\u60c5\u6cc1\u4e0b\u7522\u751f\u5716\u8868\u3002 +ChartHelper.ERROR_0003_INVALID_CHART_TYPE=\u7121\u6548\u7684\u5716\u8868\u985e\u578b\uff1a{0}\uff0c{1} +XmlComponent.ERROR_0000_XML_XFORM_FAILED=\u7121\u6cd5\u8f49\u63db XML \u6587\u4ef6\u3002 +FlashChartComponent.ERROR_0001_CHART_TEMPLATE_INVALID=\u8981\u6c42\u7684\u5716\u8868\u7bc4\u672c\u7121\u6548\u3002 +FlashChartComponent.ERROR_0003_INVALID_XML_ATTRIBUTES_FOR_DIAL={0} \u7684\u7121\u6548 XML \u5c6c\u6027\u5df2\u50b3\u905e\u5230 FlashDial\uff1a{1} +FlashChartComponent.ERROR_0002_DIAL_DATA_INVALID=\u8f49\u76e4\u8cc7\u6599\u7121\u6548 - {0} +FlashChartComponent.USER_NO_DATA=\u5716\u8868\u6c92\u6709\u8cc7\u6599\u53ef\u986f\u793a +FlashDial.ERROR_0001_NAME_COLUMN_MISSING=\u540d\u7a31\u8cc7\u6599\u884c\u907a\u5931 +FlashDial.ERROR_0002_VALUE_COLUMN_MISSING=\u503c\u8cc7\u6599\u884c\u907a\u5931 +PropertiesPanelUIComponent.USER_NO_FILE_SELECTED=\u672a\u9078\u53d6\u4efb\u4f55\u6a94\u6848 +PropertiesPanelUIComponent.ERROR_0001_BAD_CONFIGURATION=\u7121\u6cd5\u5957\u7528\u6b0a\u9650\u3002\u6b64\u5b89\u88dd\u5df2\u8a2d\u5b9a\u70ba\u4f7f\u7528\u6a94\u6848\u578b\u65b9\u6848\u5b58\u653e\u5eab\u3002\u53ea\u80fd\u4f7f\u7528 RDBMS \u578b\u65b9\u6848\u5b58\u653e\u5eab\u8a2d\u5b9a\u6b0a\u9650\u3002 +LoadDBRepositoryUIComponent.INFO_0001_SUCCESS=\u8f09\u5165\u6210\u529f\uff01\uff01\uff01 +LoadDBRepositoryUIComponent.INFO_0002_SUCCESS_NEED_CONFIG=\u8f09\u5165\u6210\u529f\uff01 -- \u8acb\u53c3\u95b1\u6587\u4ef6\u4ee5\u4e86\u89e3\u5982\u4f55\u8a2d\u5b9a\u5e73\u53f0\u4ee5\u642d\u914d DB \u5b58\u653e\u5eab\u4f7f\u7528 +LoadDBRepositoryUIComponent.INFO_0004_ORPHANED_DELETED=\u5b64\u7acb\u7684\u6a94\u6848\uff1a\u5df2\u522a\u9664 +LoadDBRepositoryUIComponent.INFO_0005_ORPHANED_IGNORED=\u5b64\u7acb\u7684\u6a94\u6848\uff1a\u5df2\u5ffd\u7565 +LoadDBRepositoryUIComponent.INFO_0006_DELETE_ORPHANS_TITLE=\u522a\u9664\u5b64\u7acb +LoadDBRepositoryUIComponent.INFO_0003_ENTER_PATH=\u8f38\u5165\u65b9\u6848\u6839\u76ee\u9304\u8def\u5f91\uff1a +LoadDBRepositoryUIComponent.ERROR_0001_LOAD_ERROR=\u8f09\u5165\u6642\u767c\u751f\u932f\u8aa4\uff1a +PMDUIComponent.ERROR_0001_GET_MODEL_LIST=\u53d6\u5f97\u6a21\u578b\u6e05\u55ae\u6642\u767c\u751f\u932f\u8aa4 +PMDUIComponent.ERROR_0002_ILLEGAL_ACTION=PMDUIComponent.action {0} \u7684\u503c\u4e0d\u5408\u6cd5 +PMDUIComponent.USER_NO_DOMAIN_SPECIFIED=\u672a\u6307\u5b9a\u4efb\u4f55\u7db2\u57df +PMDUIComponent.USER_DOMAIN_LOADING_ERROR=\u7121\u6cd5\u8f09\u5165\u7db2\u57df\uff1a{0} +PMDUIComponent.USER_NO_MODEL_SPECIFIED=\u672a\u6307\u5b9a\u4efb\u4f55\u6a21\u578b +PMDUIComponent.USER_MODEL_LOADING_ERROR=\u7121\u6cd5\u8f09\u5165\u6a21\u578b\uff1a{0} +PMDUIComponent.USER_NO_COLUMN_SPECIFIED=\u672a\u6307\u5b9a\u4efb\u4f55\u8cc7\u6599\u884c +PMDUIComponent.USER_COLUMN_NOT_FOUND=\u627e\u4e0d\u5230\u8cc7\u6599\u884c +PMDUIComponent.USER_VIEW_NOT_FOUND=\u627e\u4e0d\u5230\u9069\u7528\u65bc\u8cc7\u6599\u884c\u7684\u6aa2\u8996\u3002 +TimeSeriesCollectionChartDefinition.ERROR_0001_INVALID_DATE=\u7121\u6548\u7684\u65e5\u671f\u53c3\u6578\uff1a{0} +MondrianCatalogPublisher.ERROR_0005_PUBLISH_EXCEPTION=\u767c\u884c\u6642\u767c\u751f\u4f8b\u5916\u72c0\u6cc1 \ No newline at end of file diff --git a/core/src/main/resources/org/pentaho/platform/util/messages/messages_cn.properties b/core/src/main/resources/org/pentaho/platform/util/messages/messages_cn.properties index 5503cb27ff1..1588b65d748 100644 --- a/core/src/main/resources/org/pentaho/platform/util/messages/messages_cn.properties +++ b/core/src/main/resources/org/pentaho/platform/util/messages/messages_cn.properties @@ -1,14 +1,33 @@ #Wed Jun 04 19:20:01 EDT 2008 -XmlHelper.ERROR_0003_NULL_XSL_SOURCE=[cn_114] transform xsl source is null -Logger.DEBUG_LOG_UNKNOWN=[cn_179] unknown -FileUtil.ERROR_0001_ERROR=[cn_104] FileUtil.getDocFromFile error\: {0} -XMLUTL.ERROR_0011_MAP_KEYS=[cn_106] Map keys for persistance may only be strings. -UUIDUtil.ERROR_0003_GENERATEFAILED=[cn_60] Could not generate UUID. -XmlHelper.ERROR_0006_TRANSFORM_XML_ERROR=[cn_111] transformXml error\: {0} -XmlHelper.ERROR_0004_NULL_DOCUMENT=[cn_113] transform document source is null -XmlHelper.ERROR_0011_TRANSFORM_XSL_DOES_NOT_EXIST=[cn_221] XSL not found\: {0} -XmlHelper.ERROR_0008_GET_DOM_FROM_STRING_ERROR=[cn_112] getDomFromString error\: {0} -UUIDUtil.ERROR_0002_GET_MAC_ADDR=[cn_102] Can't get primary ethernet adapter MAC address - falling back to dummy/generated address. -HttpUtil.ERROR_0001_URL_ERROR=[cn_110] HttpUtil.getURLContent() error\: {0} -XMLUTL.ERROR_0012_DATA_TYPE=[cn_127] Maps for persistance may only contain Strings, BigDecimals, Dates, Longs, Lists, or Maps as values. You passed a {0}. -ParameterHelper.ERROR_0001_INVALID_NUMERIC=[cn_107] Could not parse numeric value\: {0} +XmlHelper.ERROR_0003_NULL_XSL_SOURCE=[cn_114] \u8f49\u63db XSL \u4f86\u6e90\u662f Null +Logger.DEBUG_LOG_UNKNOWN=[cn_179] \u672a\u77e5 +FileUtil.ERROR_0001_ERROR=[cn_104] FileUtil.getDocFromFile \u932f\u8aa4\uff1a{0} +XMLUTL.ERROR_0011_MAP_KEYS=[cn_106] \u4fdd\u5b58\u7684\u5c0d\u61c9\u7d22\u5f15\u9375\u53ea\u80fd\u662f\u5b57\u4e32\u3002 +UUIDUtil.ERROR_0003_GENERATEFAILED=[cn_60] \u7121\u6cd5\u7522\u751f UUID\u3002 +XmlHelper.ERROR_0006_TRANSFORM_XML_ERROR=[cn_111] transformXml \u932f\u8aa4\uff1a{0} +XmlHelper.ERROR_0004_NULL_DOCUMENT=[cn_113] \u8f49\u63db\u6587\u4ef6\u4f86\u6e90\u662f Null +XmlHelper.ERROR_0011_TRANSFORM_XSL_DOES_NOT_EXIST=[cn_221] \u627e\u4e0d\u5230 XSL\uff1a{0} +XmlHelper.ERROR_0008_GET_DOM_FROM_STRING_ERROR=[cn_112] getDomFromString \u932f\u8aa4\uff1a{0} +UUIDUtil.ERROR_0002_GET_MAC_ADDR=[cn_102] \u7121\u6cd5\u53d6\u5f97\u4e3b\u8981\u4e59\u592a\u7db2\u8def\u4ecb\u9762\u5361 MAC \u4f4d\u5740 - \u6b63\u5728\u56de\u5fa9\u70ba\u4f7f\u7528\u865b\u64ec/\u7522\u751f\u7684\u4f4d\u5740\u3002 +HttpUtil.ERROR_0001_URL_ERROR=[cn_110] HttpUtil.getURLContent() \u932f\u8aa4\uff1a{0} +XMLUTL.ERROR_0012_DATA_TYPE=[cn_127] \u4fdd\u5b58\u7684\u5c0d\u61c9\u53ea\u80fd\u5305\u542b Strings\u3001BigDecimals\u3001Dates\u3001Longs\u3001Lists \u6216 Maps \u4f5c\u70ba\u503c\u3002\u60a8\u5df2\u50b3\u905e {0}\u3002 +ParameterHelper.ERROR_0001_INVALID_NUMERIC=[cn_107] \u7121\u6cd5\u5256\u6790\u6578\u503c\uff1a{0} +ActionHarness.WARN_NO_METHOD_FOR_PROPERTY=\u6b63\u5728\u8df3\u904e\u540d\u70ba "{0}" \u7684\u4f5c\u696d\u53c3\u6578\uff0c\u56e0\u70ba\u52d5\u4f5c "{1}" \u6c92\u6709\u4f9d\u8a72\u540d\u7a31\u8a2d\u5b9a\u5c6c\u6027\u7684\u65b9\u6cd5\u3002 +BeanUtil.ERROR_0001_FAILED_TO_SET_PROPERTY=\u7121\u6cd5\u4f7f\u7528\u503c (\u985e\u578b\u70ba "{2}") \u8a2d\u5b9a Bean \u5c6c\u6027 "{0}.{1}" (\u985e\u578b\u70ba "{1}")\u3002 +BeanUtil.ERROR_0002_NO_METHOD_FOR_PROPERTY=Bean "{0}" \u6c92\u6709\u8a2d\u5b9a\u540d\u70ba "{1}" \u4e4b\u5c6c\u6027\u7684\u65b9\u6cd5\u3002 +FileHelper.WARN_ERROR_CLOSING_STREAM=\u7121\u6cd5\u95dc\u9589 InputStream\u3002 +FileHelper.WARN_ERROR_CLOSING_READER=\u7121\u6cd5\u95dc\u9589\u8b80\u53d6\u5668\u3002 +Logger.CODE_LOG_UNKNOWN=\u672a\u77e5 +emailFromName=Pentaho +PUBLISHERUTIL.ERROR_0001_PUBLISH_PASSWORD_REQUIRED=\u9700\u8981\u5bc6\u78bc\u624d\u80fd\u767c\u884c\u5230\u4f3a\u670d\u5668\u3002 +XmlDom4JHelper.ERROR_0001_UNABLE_TO_GET_DOCUMENT_FROM_STRING=\u7121\u6cd5\u5f9e\u5b57\u4e32\u53d6\u5f97\u6587\u4ef6\uff1a{0} +XmlDom4JHelper.ERROR_0002_UNSUPPORTED_ENCODING=\u4e0d\u652f\u63f4\u7684\u7de8\u78bc\uff1a{0} +XmlDom4JHelper.ERROR_0003_UNABLE_TO_RENDER_DASHBOARD=\u6211\u5011\u7121\u6cd5\u8f49\u8b6f\u6b64\u5100\u8868\u677f\u3002\u8acb\u9023\u7d61\u60a8\u7684\u7cfb\u7d71\u7ba1\u7406\u54e1\u3002 +MondrianCatalogPublisher.ERROR_0005_PUBLISH_EXCEPTION=\u767c\u884c\u6642\u767c\u751f\u4f8b\u5916\u72c0\u6cc1 +VersionCheck.UPDATE_MESSAGE=\u6709\u66f4\u65b0\u53ef\u7528\uff1a{0} {1} {2}\uff0c\u4e0b\u8f09\u9023\u7d50\uff1a{3} +VersionCheck.ERROR_MESSAGE=\u7248\u672c\u6aa2\u67e5\u932f\u8aa4\uff1a{0} +VersionCheck.NO_RESULT_MESSAGE=\u7248\u672c\u6aa2\u67e5\u932f\u8aa4\uff1a\u6c92\u6709\u53ef\u7528\u7684\u7d50\u679c +ActionUtil.ERROR_0001_REQUIRED_PARAM_MISSING=\u5c6c\u6027 "{0}" \u6216 "{1}" \u5fc5\u9808\u5728\u52d5\u4f5c\u8cc7\u6599\u5c0d\u61c9\u4e2d\u8a2d\u5b9a +ActionUtil.ERROR_0002_FAILED_TO_CREATE_ACTION=\u7121\u6cd5\u5efa\u7acb\u52d5\u4f5c "{0}" \u7684\u57f7\u884c\u500b\u9ad4 +ActionUtil.ERROR_0003_ACTION_WRONG_TYPE=\u985e\u5225 {0} \u5fc5\u9808\u662f "{1}" \u7684\u57f7\u884c\u500b\u9ad4 + diff --git a/extensions/src/main/resources/org/pentaho/platform/config/i18n/messages_CN.properties b/extensions/src/main/resources/org/pentaho/platform/config/i18n/messages_CN.properties new file mode 100644 index 00000000000..b2603f19843 --- /dev/null +++ b/extensions/src/main/resources/org/pentaho/platform/config/i18n/messages_CN.properties @@ -0,0 +1,155 @@ +PacService.ERROR_0001_ROLE_CREATION_FAILED=\u5efa\u7acb\u89d2\u8272\u5931\u6557\uff1a{0}\u3002 +PacService.ERROR_0002_NO_CREATE_ROLE_PERMISSION=\u6c92\u6709\u8db3\u5920\u7684\u6b0a\u9650\u53ef\u5efa\u7acb\u89d2\u8272\uff1a{0}\u3002 +PacService.ERROR_0003_ROLE_CREATION_FAILED_NON_EXISTING_USER=\u5efa\u7acb\u89d2\u8272 "{0}" \u5931\u6557\u3002\u6b63\u5728\u5617\u8a66\u5c07\u4e0d\u5b58\u5728\u7684\u4f7f\u7528\u8005 "{0}" \u65b0\u589e\u5230\u89d2\u8272\u3002 +PacService.ERROR_0004_USER_CREATION_FAILED=\u5efa\u7acb\u4f7f\u7528\u8005\u5931\u6557\uff1a{0}\u3002 +PacService.ERROR_0005_NO_CREATE_USER_PERMISSION=\u6c92\u6709\u8db3\u5920\u7684\u6b0a\u9650\u53ef\u5efa\u7acb\u4f7f\u7528\u8005\uff1a{0}\u3002 +PacService.ERROR_0006_USER_CREATION_FAILED_NON_EXISTING_USER=\u5efa\u7acb "{0}" \u4f7f\u7528\u8005\u5931\u6557\u3002\u6b63\u5728\u5617\u8a66\u5c07\u4e0d\u5b58\u5728\u7684\u4f7f\u7528\u8005 "{0}" \u65b0\u589e\u5230\u65b0\u4f7f\u7528\u8005\u7684\u89d2\u8272\u3002 +PacService.ERROR_0049_ROLE_ALREADY_EXIST=\u89d2\u8272\u5df2\u7d93\u5b58\u5728 "{0}" +PacService.ERROR_0050_UNRECOGNIZED_ROLE_CREATION=\u5efa\u7acb\u89d2\u8272\u5931\u6557\uff0c\u56e0\u70ba\u767c\u751f\u7121\u6cd5\u8fa8\u8b58\u7684\u932f\u8aa4 {0} +PacService.ERROR_0051_USER_ALREADY_EXIST=\u4f7f\u7528\u8005\u5df2\u7d93\u5b58\u5728 "{0}" +PacService.ERROR_0052_UNRECOGNIZED_USER_CREATION=\u5efa\u7acb\u4f7f\u7528\u8005\u5931\u6557\uff0c\u56e0\u70ba\u767c\u751f\u7121\u6cd5\u8fa8\u8b58\u7684\u932f\u8aa4\u3002{0} +PacService.ERROR_0053_UNRECOGNIZED_ROLE_DELETION=\u522a\u9664\u89d2\u8272\u5931\u6557\uff0c\u56e0\u70ba\u767c\u751f\u7121\u6cd5\u8fa8\u8b58\u7684\u932f\u8aa4\u3002{0} +PacService.ERROR_0054_UNRECOGNIZED_USER_DELETION=\u522a\u9664\u4f7f\u7528\u8005\u5931\u6557\uff0c\u56e0\u70ba\u767c\u751f\u7121\u6cd5\u8fa8\u8b58\u7684\u932f\u8aa4\u3002{0} +PacService.ERROR_0055_UNRECOGNIZED_ROLE_RETRIEVAL=\u64f7\u53d6\u89d2\u8272\u5931\u6557\uff0c\u56e0\u70ba\u767c\u751f\u7121\u6cd5\u8fa8\u8b58\u7684\u932f\u8aa4\u3002{0} +PacService.ERROR_0056_UNRECOGNIZED_USER_RETRIEVAL=\u64f7\u53d6\u4f7f\u7528\u8005\u5931\u6557\uff0c\u56e0\u70ba\u767c\u751f\u7121\u6cd5\u8fa8\u8b58\u7684\u932f\u8aa4\u3002{0} +PacService.ERROR_0057_UNRECOGNIZED_ROLES_RETRIEVAL=\u89d2\u8272\u64f7\u53d6\u5931\u6557\uff0c\u56e0\u70ba\u767c\u751f\u7121\u6cd5\u8fa8\u8b58\u7684\u932f\u8aa4\u3002{0} +PacService.ERROR_0058_UNRECOGNIZED_USERS_RETRIEVAL=\u64f7\u53d6\u4f7f\u7528\u8005\u5931\u6557\uff0c\u56e0\u70ba\u767c\u751f\u7121\u6cd5\u8fa8\u8b58\u7684\u932f\u8aa4\u3002{0} +PacService.ERROR_0059_UNRECOGNIZED_ROLES_UPDATE=\u66f4\u65b0\u89d2\u8272\u5931\u6557\uff0c\u56e0\u70ba\u767c\u751f\u7121\u6cd5\u8fa8\u8b58\u7684\u932f\u8aa4\u3002{0} +PacService.ERROR_0060_UNRECOGNIZED_USERS_UPDATE=\u66f4\u65b0\u4f7f\u7528\u8005\u5931\u6557\uff0c\u56e0\u70ba\u767c\u751f\u7121\u6cd5\u8fa8\u8b58\u7684\u932f\u8aa4\u3002{0} + +PacService.ERROR_0007_DATASOURCE_CREATION_FAILED=\u5efa\u7acb\u8cc7\u6599\u4f86\u6e90\u5931\u6557\uff1a{0}\u3002 +PacService.ERROR_0008_NO_CREATE_DATASOURCE_PERMISSION=\u6c92\u6709\u8db3\u5920\u7684\u6b0a\u9650\u53ef\u5efa\u7acb\u8cc7\u6599\u4f86\u6e90\uff1a{0}\u3002 +PacService.ERROR_0009_DATASOURCE_ALREADY_EXIST=\u8cc7\u6599\u4f86\u6e90\u5df2\u5b58\u5728\uff1a{0}\u3002 + +PacService.ERROR_0010_ROLE_DELETION_FAILED_NO_ROLE=\u522a\u9664\u89d2\u8272\u5931\u6557\uff0c\u89d2\u8272\u4e0d\u5b58\u5728\uff1a{0} +PacService.ERROR_0011_ROLE_DELETION_FAILED=\u522a\u9664\u89d2\u8272\u5931\u6557\uff1a{0} +PacService.ERROR_0012_ROLE_DELETION_FAILED_NO_PERMISSION=\u6c92\u6709\u8db3\u5920\u7684\u6b0a\u9650\u53ef\u522a\u9664\u89d2\u8272\uff1a{0} + +PacService.ERROR_0013_USER_DELETION_FAILED_NO_USER=\u522a\u9664\u4f7f\u7528\u8005\u5931\u6557\uff0c\u4f7f\u7528\u8005\u4e0d\u5b58\u5728\uff1a{0} +PacService.ERROR_0014_USER_DELETION_FAILED=\u522a\u9664\u4f7f\u7528\u8005\u5931\u6557\uff1a{0} +PacService.ERROR_0015_USER_DELETION_FAILED_NO_PERMISSION=\u6c92\u6709\u8db3\u5920\u7684\u6b0a\u9650\u53ef\u522a\u9664\u4f7f\u7528\u8005\uff1a{0} + +PacService.ERROR_0016_DATASOURCE_DELETION_FAILED_NO_DATASOURCE=\u522a\u9664\u8cc7\u6599\u4f86\u6e90\u5931\u6557\uff0c{0} \u4e0d\u5b58\u5728 {1} +PacService.ERROR_0017_DATASOURCE_DELETION_FAILED=\u522a\u9664\u8cc7\u6599\u4f86\u6e90\u5931\u6557\uff1a{0} +PacService.ERROR_0018_DATASOURCE_DELETION_FAILED_NO_PERMISSION=\u6c92\u6709\u8db3\u5920\u7684\u6b0a\u9650\u53ef\u522a\u9664\u8cc7\u6599\u4f86\u6e90\uff1a{0} + +PacService.ERROR_0019_DATASOURCE_UPDATE_FAILED=\u7121\u6cd5\u66f4\u65b0\u8cc7\u6599\u4f86\u6e90\uff1a{0} +PacService.ERROR_0020_DATASOURCE_UPDATE_FAILED_NO_PERMISSION=\u6c92\u6709\u8db3\u5920\u7684\u6b0a\u9650\u53ef\u66f4\u65b0\u8cc7\u6599\u4f86\u6e90\uff1a{0} +PacService.ERROR_0021_DATASOURCE_UPDATE_FAILED_DOES_NOT_EXIST=\u8981\u66f4\u65b0\u7684\u8cc7\u6599\u4f86\u6e90\u4e0d\u5b58\u5728\uff1a{0} + +PacService.ERROR_0022_FAILED_TO_FIND_DATASOURCE=\u627e\u4e0d\u5230\u8cc7\u6599\u4f86\u6e90\uff1a{0} +PacService.ERROR_0023_FAILED_TO_GET_DATASDOURCE=\u7121\u6cd5\u53d6\u5f97\u8cc7\u6599\u4f86\u6e90\uff1a{0} +PacService.ERROR_0024_CONNECTION_ATTEMPT_FAILED=\u9023\u7dda\u5617\u8a66\u5931\u6557\uff0c\u6c92\u6709\u53ef\u7528\u7684\u9a45\u52d5\u7a0b\u5f0f\u985e\u5225\uff1a{0} +PacService.ERROR_0025_UNABLE_TO_CONNECT=\u9023\u7dda\u5617\u8a66\u5931\u6557\uff1a{0} +PacService.ERROR_0026_DRIVER_NOT_FOUND_IN_CLASSPATH=\u9023\u7dda\u5617\u8a66\u5931\u6557\uff0c\u985e\u5225\u8def\u5f91\u4e2d\u6c92\u6709\u9a45\u52d5\u7a0b\u5f0f\u985e\u5225 {0}\u3002 +PacService.ERROR_0027_UNABLE_TO_INSTANCE_DRIVER=\u9023\u7dda\u5617\u8a66\u5931\u6557\uff0c\u7121\u6cd5\u5efa\u7acb\u9a45\u52d5\u7a0b\u5f0f\u985e\u5225\u57f7\u884c\u500b\u9ad4\uff1a{0} +PacService.ERROR_0028_QUERY_NOT_VALID=\u8cc7\u6599\u4f86\u6e90\u8a2d\u5b9a\u672a\u5305\u542b\u9a57\u8b49\u67e5\u8a62\u3002 +PacService.ERROR_0029_QUERY_VALIDATION_FAILED=\u67e5\u8a62\u9a57\u8b49\u5931\u6557\u3002\u539f\u56e0\uff1a{0} +PacService.ERROR_0030_FAILED_TO_FIND_ROLE=\u7121\u6cd5\u5c0b\u627e\u89d2\u8272\uff1a{0} +PacService.ERROR_0031_FAILED_TO_GET_ROLE_NAME=\u7121\u6cd5\u53d6\u5f97\u89d2\u8272\u540d\u7a31\u3002 +PacService.ERROR_0032_FAILED_TO_FIND_USER=\u7121\u6cd5\u5c0b\u627e\u4f7f\u7528\u8005\uff1a{0} +PacService.ERROR_0033_FAILED_TO_GET_USER_NAME=\u7121\u6cd5\u53d6\u5f97\u4f7f\u7528\u8005\u540d\u7a31\u3002 +PacService.ERROR_0034_ROLE_UPDATE_FAILED=\u7121\u6cd5\u66f4\u65b0\u89d2\u8272\uff1a{0} +PacService.ERROR_0035_ROLE_UPDATE_FAILED_NO_PERMISSION=\u6c92\u6709\u8db3\u5920\u7684\u6b0a\u9650\u53ef\u66f4\u65b0\u89d2\u8272\uff1a{0} +PacService.ERROR_0036_ROLE_UPDATE_FAILED_DOES_NOT_EXIST=\u8981\u66f4\u65b0\u7684\u89d2\u8272\u4e0d\u5b58\u5728\uff1a{0} +PacService.ERROR_0037_ROLE_UPDATE_FAILED_USER_DOES_NOT_EXIST=\u8981\u65b0\u589e\u5230\u89d2\u8272 {0} \u7684\u4f7f\u7528\u8005\u4e0d\u5b58\u5728\uff1a{1} +PacService.ERROR_0038_USER_UPDATE_FAILED=\u7121\u6cd5\u66f4\u65b0\u4f7f\u7528\u8005\uff1a{0}\u3002 +PacService.ERROR_0061_USER_UPDATE_FAILED_NO_PERMISSION=\u6c92\u6709\u8db3\u5920\u7684\u6b0a\u9650\u53ef\u66f4\u65b0\u4f7f\u7528\u8005\uff1a{0} +PacService.ERROR_0039_USER_UPDATE_FAILED_DOES_NOT_EXIST=\u8981\u66f4\u65b0\u7684\u4f7f\u7528\u8005\u4e0d\u5b58\u5728\uff1a{0} +PacService.ERROR_0040_USER_UPDATE_FAILED_ROLE_DOES_NOT_EXIST=\u8981\u65b0\u589e\u5230\u4f7f\u7528\u8005 {0} \u7684\u89d2\u8272\u4e0d\u5b58\u5728\uff1a{1} +PacService.ERROR_0041_FAILED_TO_GET_BISERVER_BASE_URL=\u7121\u6cd5\u53d6\u5f97 biserver \u57fa\u5e95 URL +PacService.ERROR_0042_FAILED_TO_GET_BISERVER_CONTEXT_PATH=\u7121\u6cd5\u53d6\u5f97 biserver \u4e0a\u4e0b\u6587\u8def\u5f91 +PacService.ERROR_0043_TXN_ROLLBACK_FAILED=\u4ea4\u6613\u56de\u5fa9\u5931\u6557\u3002 +PacService.ERROR_0044_CLOSE_PROPS_STREAM_FAILED=\u7121\u6cd5\u95dc\u9589\u8207\u6a94\u6848\u76f8\u95dc\u806f\u7684\u8f38\u5165\u4e32\u6d41\uff1a{0} +PacService.ERROR_0045_THREAD_SCHEDULING_FAILED=\u7121\u6cd5\u5c0d BI Server \u72c0\u614b\u57f7\u884c\u7dd2\u9032\u884c\u6392\u7a0b\u3002 +PacService.ERROR_0046_SERVICE_INITIALIZATION_FAILED=\u7cfb\u7d71\u7ba1\u7406\u4e3b\u63a7\u53f0\u7121\u6cd5\u521d\u59cb\u5316\u3002{0} +PacService.ERROR_0047_IO_ERROR=\u8f09\u5165 {0} \u6642\u767c\u751f IO \u932f\u8aa4 +PacService.ERROR_0048_ROLLBACK_FAILED=\u7121\u6cd5\u56de\u5fa9\u4ea4\u6613\u3002 +PacService.ERROR_0062_UNABLE_TO_REFRESH_HIBERNATE=\u7121\u6cd5\u91cd\u65b0\u6574\u7406\u4f11\u7720 +PacService.ACTION_COMPLETE=\u52d5\u4f5c\u5b8c\u6210\u3002 + +StopJettyServer.ERROR_0002_LOAD_PROPS_FAILED=\u7121\u6cd5\u8f09\u5165\u5c6c\u6027\u6a94\uff1a{0} +StopJettyServer.ERROR_0001_OPEN_PROPS_FAILED=\u7121\u6cd5\u958b\u555f\u5c6c\u6027\u6a94\uff1a{0} +StopJettyServer.ERROR_0003_UNKNOWN_HOST=\u672a\u77e5\u7684\u4e3b\u6a5f\uff1a{0} + +ConsoleProperties.ERROR_0002_LOAD_PROPS_FAILED=\u7121\u6cd5\u8f09\u5165\u5c6c\u6027\u6a94\uff1a{0} +ConsoleProperties.ERROR_0001_OPEN_PROPS_FAILED=\u7121\u6cd5\u958b\u555f\u5c6c\u6027\u6a94\uff1a{0} + + +XmlSerializer.stateNormal=\u6a19\u6e96 +XmlSerializer.stateSuspended=\u5df2\u66ab\u505c +XmlSerializer.stateComplete=\u5b8c\u6210 +XmlSerializer.stateError=\u932f\u8aa4 +XmlSerializer.stateBlocked=\u5df2\u5c01\u9396 +XmlSerializer.stateNone=\u7121 + +ThreadSafeHttpClient.ERROR_0002_INVALID_HTTP_METHOD_TYPE=\u7121\u6548\u7684 HTTP \u65b9\u6cd5\u985e\u578b\uff1a{0}\u3002 +ThreadSafeHttpClient.ERROR_0001_CLIENT_REQUEST_FAILED=\u7528\u6236\u7aef\u8981\u6c42 URI "{0}" \u5931\u6557\u3002\u5931\u6557\u539f\u56e0\uff1a{1}\u3002 +ThreadSafeHttpClient.ERROR_0003_AUTHORIZATION_FAILED=\u7121\u6cd5\u9023\u7dda\u5230 BI Server\u3002\u78ba\u8a8d\u4f7f\u7528\u8005\u8a8d\u8b49\u8207 Web \u8a2d\u5b9a XML \u7d44\u614b\u3002 +JettyServer.CONSOLE_STARTING=\u4e3b\u63a7\u53f0\u6b63\u5728\u555f\u52d5 +JettyServer.WAITING_TO_HALT=\u6b63\u5728\u7b49\u5f85\u505c\u6b62\u4e3b\u63a7\u53f0 +JettyServer.HALTING=\u6b63\u5728\u505c\u6b62\u4e3b\u63a7\u53f0 +JettyServer.STOPPING=\u6b63\u5728\u505c\u6b62\u4e3b\u63a7\u53f0\u3002\u8acb\u7a0d\u5019 +JettyServer.CONSOLE_STARTED=\u4e3b\u63a7\u53f0\u73fe\u5728\u5df2\u555f\u52d5\u3002\u53ef\u4ee5\u4f7f\u7528 {0} \u6216 {1} \u52a0\u4ee5\u5b58\u53d6 +JettyServer.ERROR_0001_UNABLE_START_SERVER=\u555f\u52d5\u4f3a\u670d\u5668\u6642\u767c\u751f\u932f\u8aa4 +JettyServer.ERROR_0002_IO_ERROR=IO \u932f\u8aa4\uff1a{0} + +JdbcDriverDiscoveryService.ERROR_0001_NO_JDBC_DRIVER_PATH_SPECIFIED=\u672a\u6307\u5b9a\u4efb\u4f55 jdbc \u9a45\u52d5\u7a0b\u5f0f\u8def\u5f91 +JdbcDriverDiscoveryService.ERROR_0002_NO_DRIVERS_FOUND_IN_JDBC_DRIVER_PATH=\u672a\u5728\u6307\u5b9a\u7684\u8def\u5f91\u4e2d\u627e\u5230\u4efb\u4f55 jdbc \u9a45\u52d5\u7a0b\u5f0f + +AppConfigProperties.ERROR_0001_INCORRECT_SOLUTION_PATH=\u7121\u6cd5\u8b80\u53d6\u6a94\u6848\uff1a{0} {1}\u3002\u8acb\u78ba\u5b9a\u65b9\u6848\u8def\u5f91\u662f\u6b63\u78ba\u7684\u3002 +AppConfigProperties.ERROR_0002_INCORRECT_WAR_PATH=\u7121\u6cd5\u8b80\u53d6\u6a94\u6848\uff1a{0} {1}\u3002\u8acb\u78ba\u5b9a war \u8def\u5f91\u662f\u6b63\u78ba\u7684\u3002 +AppConfigProperties.ERROR_0003_FAILED_TO_CLOSE_STREAM=\u7121\u6cd5\u95dc\u9589\u8207\u4e0b\u5217\u9805\u76ee\u76f8\u95dc\u806f\u7684\u4e32\u6d41\uff1a{0} {1} +AppConfigProperties.ERROR_0004_UNABLE_TO_READ_FILE=\u7121\u6cd5\u8b80\u53d6\u6a94\u6848\uff1a{0} +AppConfigProperties.ERROR_0005_CLOSE_STREAM_FAILED=\u7121\u6cd5\u95dc\u9589\u8207\u4e0b\u5217\u9805\u76ee\u76f8\u95dc\u806f\u7684\u4e32\u6d41\uff1a{0} +AppConfigProperties.ERROR_0006_UNABLE_TO_GET_PASSWORD_SERVICE=\u7121\u6cd5\u53d6\u5f97\u5bc6\u78bc\u670d\u52d9\u5be6\u4f5c\u3002\u6b63\u5728\u4f7f\u7528\u9810\u8a2d\u5bc6\u78bc\u670d\u52d9 {0} +AppConfigProperties.ERROR_0007_WAR_PATH_NOT_CONFIGURED=Pentaho war \u8def\u5f91\u672a\u6b63\u78ba\u8a2d\u5b9a\u3002\u8acb\u4fee\u6b63 console.xml \u4e2d\u7684\u8def\u5f91\uff0c\u7136\u5f8c\u91cd\u65b0\u555f\u52d5\u4e3b\u63a7\u53f0\u3002 +AppConfigProperties.ERROR_0008_SOLUTION_PATH_NOT_CONFIGURED=Pentaho \u65b9\u6848\u8def\u5f91\u672a\u6b63\u78ba\u8a2d\u5b9a\u3002\u8acb\u4fee\u6b63 console.xml \u4e2d\u7684\u8def\u5f91\uff0c\u7136\u5f8c\u91cd\u65b0\u555f\u52d5\u4e3b\u63a7\u53f0\u3002 +AppConfigProperties.ERROR_0009_UNABLE_TO_GET_ABSOLUTE_PATH=\u7121\u6cd5\u53d6\u5f97\u6a94\u6848\u7684\u7d55\u5c0d\u8def\u5f91\u3002{0} \u539f\u56e0\uff1a{1} +AppConfigProperties.ERROR_0010_UNABLE_TO_GET_PASSWORD_ENCODER=\u7121\u6cd5\u5efa\u7acb\u5bc6\u78bc\u7de8\u78bc\u5668\u7684\u57f7\u884c\u500b\u9ad4 +AppConfigProperties.USING_DEFAULT_WAR_PATH=\u672a\u5728 console.xml \u4e2d\u6b63\u78ba\u8a2d\u5b9a Pentaho war \u8def\u5f91\u3002\u6b63\u5728\u4f7f\u7528\u9810\u8a2d war \u8def\u5f91\u3002{0} +AppConfigProperties.USING_DEFAULT_SOLUTION_PATH=\u672a\u5728 console.xml \u4e2d\u6b63\u78ba\u8a2d\u5b9a Pentaho \u65b9\u6848\u8def\u5f91\u3002\u6b63\u5728\u4f7f\u7528\u9810\u8a2d\u65b9\u6848\u8def\u5f91\u3002{0} +DAOFactory.WARN_0001_UNABLE_TO_INITIALIZE_USER_ROLE_DAO=\u7121\u6cd5\u521d\u59cb\u5316 + + +JettyServer.ERROR_0001_KEY_STORE_MUST_BE_SET=\u5fc5\u9808\u8a2d\u5b9a KeyStore \u6216\u7cfb\u7d71\u5c6c\u6027 javax.net.ssl.keyStore +JettyServer.ERROR_0002_KEY_STORE_PASSWORD_MUST_BE_SET=\u5fc5\u9808\u8a2d\u5b9a keyStorePassword \u6216\u7cfb\u7d71\u5c6c\u6027 javax.net.ssl.keyStorePassword + +HibernateSessionFactory.ERROR_0001_UNKNOWN_CONFIGURATION=\u672a\u77e5\u7684\u8a2d\u5b9a\uff1a{0} +HibernateSessionFactory.ERROR_0002_MISSING_MANAGED_CONFIGURATION=\u4f11\u7720\u5df2\u8a2d\u5b9a\u70ba\u53d7\u63a7\u4e14 {0} \u5df2\u907a\u5931\u6216\u70ba Null +HibernateSessionFactory.ERROR_0003_UNABLE_TO_CREATE_SESSION_FACTORY=\u7121\u6cd5\u5efa\u7acb\u5de5\u4f5c\u968e\u6bb5\u8655\u7406\u7ad9\uff1a{0} +HibernateSessionFactory.ERROR_0004_UNABLE_TO_REBUILD_SESSION_FACTORY=\u7121\u6cd5\u91cd\u65b0\u5efa\u7f6e\u5de5\u4f5c\u968e\u6bb5\u8655\u7406\u7ad9\uff1a{0} +HibernateSessionFactory.ERROR_0005_MISSING_CONFIGURATION_FILE=\u4f11\u7720\u8a2d\u5b9a\u6a94\u907a\u5931\uff1a{0} + +PentahoXml.ERROR_0001_INVALID_ROOT_ELEMENT=\u7121\u6548\u7684\u6839\u5143\u7d20\u3002 +HibernateSettingsXml.ERROR_0001_INVALID_ROOT_ELEMENT=\u7121\u6548\u7684\u6839\u5143\u7d20\u3002 +PentahoObjectsConfig.ERROR_0001_INVALID_ROOT_ELEMENT=\u7121\u6548\u7684\u6839\u5143\u7d20\u3002 +WebXml.ERROR_0001_INVALID_ROOT_ELEMENT=\u7121\u6548\u7684\u6839\u5143\u7d20\u3002 +GoogleMapsConfig.ERROR_0001_INVALID_ROOT_ELEMENT=\u7121\u6548\u7684\u6839\u5143\u7d20\u3002 +PentahoSpringBeansConfig.ERROR_0001_INVALID_ROOT_ELEMENT=\u7121\u6548\u7684\u6839\u5143\u7d20\u3002 +SystemListenersConfig.ERROR_0001_INVALID_ROOT_ELEMENT=\u7121\u6548\u7684\u6839\u5143\u7d20\u3002 + + + +SolutionRepositoryServiceProxy.ERROR_0001_UNABLE_RETRIEVE_SOLUTION_REPOSITORY=\u7121\u6cd5\u53d6\u5f97\u65b9\u6848\u5b58\u653e\u5eab\u7684\u5167\u5bb9\u3002{0} + +SchedulerAdminUIComponentProxy.ERROR_0001_PRIVATE_UNABLE_TO_DELETE_JOB=\u7121\u6cd5\u522a\u9664\u79c1\u4eba\u6392\u7a0b\uff1a{0} +SchedulerAdminUIComponentProxy.ERROR_0002_PRIVATE_UNABLE_TO_EXECUTE_JOB=\u7121\u6cd5\u57f7\u884c\u79c1\u4eba\u6392\u7a0b\uff1a{0} +SchedulerAdminUIComponentProxy.ERROR_0003_PRIVATE_UNABLE_TO_PAUSE_JOB=\u7121\u6cd5\u66ab\u505c\u79c1\u4eba\u6392\u7a0b\uff1a{0} +SchedulerAdminUIComponentProxy.ERROR_0004_PRIVATE_UNABLE_TO_RESUME_JOB=\u7121\u6cd5\u7e7c\u7e8c\u79c1\u4eba\u6392\u7a0b\uff1a{0} +SchedulerAdminUIComponentProxy.ERROR_0005_PRIVATE_UNABLE_TO_RETRIEVE_JOB=\u7121\u6cd5\u64f7\u53d6\u79c1\u4eba\u6392\u7a0b\uff1a{0} +SchedulerAdminUIComponentProxy.ERROR_0006_PRIVATE_UNABLE_TO_CHECK_IS_PAUSED=\u7121\u6cd5\u6aa2\u67e5\u79c1\u4eba\u6392\u7a0b\u662f\u5426\u5df2\u66ab\u505c\uff1a{0} +SchedulerAdminUIComponentProxy.ERROR_0007_PRIVATE_UNABLE_TO_RESUME_ALL_JOBS=\u7121\u6cd5\u7e7c\u7e8c\u6240\u6709\u79c1\u4eba\u6392\u7a0b\uff1a{0} +SchedulerAdminUIComponentProxy.ERROR_0008_PRIVATE_UNABLE_TO_PAUSE_ALL_JOBS=\u300c\u7121\u6cd5\u64f7\u53d6\u6240\u6709\u79c1\u4eba\u6392\u7a0b\uff1a{0} +SchedulerAdminUIComponentProxy.ERROR_0009_PRIVATE_UNABLE_TO_PAUSE_SHCEDULER=\u7121\u6cd5\u66ab\u505c\u79c1\u4eba\u6392\u7a0b\u5668\uff1a{0} +SchedulerAdminUIComponentProxy.ERROR_0010_PRIVATE_UNABLE_TO_RESUME_SCHEDULER=\u7121\u6cd5\u7e7c\u7e8c\u79c1\u4eba\u6392\u7a0b\u5668\uff1a{0} +SchedulerAdminUIComponentProxy.ERROR_0011_PRIVATE_UNABLE_TO_CREATE_CRON_SCHEDULE=\u7121\u6cd5\u5efa\u7acb\u79c1\u4eba cron \u6392\u7a0b\uff1a{0} +SchedulerAdminUIComponentProxy.ERROR_0012_PRIVATE_UNABLE_TO_UPDATE_CRON_SCHEDULE=\u7121\u6cd5\u66f4\u65b0\u79c1\u4eba cron \u6392\u7a0b\uff1a{0} +SchedulerAdminUIComponentProxy.ERROR_0013_PRIVATE_UNABLE_TO_CREATE_REPEATING_SCHEDULE=\u7121\u6cd5\u5efa\u7acb\u79c1\u4eba\u91cd\u8907\u6392\u7a0b\uff1a{0} +SchedulerAdminUIComponentProxy.ERROR_0014_PRIVATE_UNABLE_TO_UPDATE_REPEATING_SCHEDULE=\u7121\u6cd5\u66f4\u65b0\u79c1\u4eba\u91cd\u8907\u6392\u7a0b\uff1a{0} +SchedulerAdminUIComponentProxy.ERROR_0015_PRIVATE_UNABLE_TO_RETRIEVE_SHCEDULE_LIST=\u7121\u6cd5\u64f7\u53d6\u79c1\u4eba\u6392\u7a0b\u6e05\u55ae\uff1a{0} + +HibernateConfigurationService.ERROR_0001_SOLUTION_PATH_IS_NULL=\u65b9\u6848\u8def\u5f91\u662f Null +HibernateConfigurationService.ERROR_0002_NO_CONFIGURATION_FILES_FOUND_IN_PATH=\u672a\u5728\u8def\u5f91\u4e2d\u627e\u5230\u4efb\u4f55\u4f11\u7720\u8a2d\u5b9a\u6a94 +HibernateConfigurationService.ERROR_0003_UNABLE_TO_INITIALIZE_CONFIGURATION=\u7121\u6cd5\u521d\u59cb\u5316\u8a2d\u5b9a +JdbcDriverDiscoveryService.ERROR_0003_UNABLE_TO_INITIALIZE_CONFIGURATION=\u7121\u6cd5\u521d\u59cb\u5316\u8a2d\u5b9a diff --git a/extensions/src/main/resources/org/pentaho/platform/config/messages/messages_CN.properties b/extensions/src/main/resources/org/pentaho/platform/config/messages/messages_CN.properties new file mode 100644 index 00000000000..aa93c5c4426 --- /dev/null +++ b/extensions/src/main/resources/org/pentaho/platform/config/messages/messages_CN.properties @@ -0,0 +1,43 @@ +# +# Copyright 2006 - 2017 Hitachi Vantara. All rights reserved. +# +# Copyright 2006 - 2017 Hitachi Vantara. All rights reserved. +# This program is free software; you can redistribute it and/or modify it under the +# terms of the GNU General Public License, version 2 as published by the Free Software +# Foundation. +# +# You should have received a copy of the GNU General Public License along with this +# program; if not, you can obtain a copy at http://www.gnu.org/licenses/gpl-2.0.html +# or from the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# +# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; +# without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU General Public License for more details. + +AuthorizationPolicyBasedUserRoleWebService.ERROR_0001_MISSING_AUTHZ_POLICY=\u7121 IAuthorizationPolicy \u5be6\u4f5c +UserRoleDaoUserDetailsService.ERROR_0001_USER_NOT_FOUND=\u627e\u4e0d\u5230\u4f7f\u7528\u8005 +UserRoleDaoUserDetailsService.ERROR_0002_NO_AUTHORITIES=\u4f7f\u7528\u8005\u6c92\u6709 GrantedAuthority +UserRoleDaoUserDetailsService.ERROR_0003_DATA_ACCESS_EXCEPTION=\u8cc7\u6599\u5b58\u53d6\u4f8b\u5916\u72c0\u6cc1 +HibernateUserRoleDao.ERROR_0001_USER_CANNOT_BE_NULL=\u4f7f\u7528\u8005\u4e0d\u80fd\u662f Null +HibernateUserRoleDao.ERROR_0002_USERNAME_CANNOT_BE_BLANK=\u4f7f\u7528\u8005\u540d\u7a31\u4e0d\u80fd\u662f Null \u6216\u7a7a\u767d +HibernateUserRoleDao.ERROR_0003_PASSWORD_CANNOT_BE_NULL=\u4f7f\u7528\u8005\u7684\u5bc6\u78bc\u4e0d\u80fd\u662f Null +HibernateUserRoleDao.ERROR_0004_DATA_ACCESS_EXCEPTION=\u8cc7\u6599\u5b58\u53d6\u4f8b\u5916\u72c0\u6cc1 +HibernateUserRoleDao.ERROR_0005_ROLE_CANNOT_BE_NULL=\u89d2\u8272\u4e0d\u80fd\u662f Null +HibernateUserRoleDao.ERROR_0006_ROLE_NAME_CANNOT_BE_BLANK=\u89d2\u8272\u540d\u7a31\u4e0d\u80fd\u662f Null \u6216\u7a7a\u767d +HibernateUserRoleDao.ERROR_0007_ALL_USERS_QUERY_CANNOT_BE_BLANK=allUsersQuery \u4e0d\u80fd\u662f Null \u6216\u7a7a\u767d +HibernateUserRoleDao.ERROR_0008_ALL_ROLES_QUERY_CANNOT_BE_BLANK=allRolesQuery \u4e0d\u80fd\u662f Null \u6216\u7a7a\u767d +SampleUsersAndRolesInitHandler.ERROR_0001_COULD_NOT_INSERT_SAMPLES=\u7121\u6cd5\u63d2\u5165\u7bc4\u4f8b\u4f7f\u7528\u8005\u8207\u89d2\u8272 + +UserRoleWebService.ERROR_0001_NOT_ADMIN=\u4f7f\u7528\u8005\u6c92\u6709\u53ef\u7ba1\u7406\u4f7f\u7528\u8005\u8207\u89d2\u8272\u7684\u7cfb\u7d71\u7ba1\u7406\u6b0a\u9650\u3002 +UserRoleWebService.ERROR_0002_IUSERROLEDAO_NOT_AVAILABLE=IUserRoleDao \u5be6\u4f5c\u7121\u6cd5\u4f7f\u7528\u3002 +UserRoleWebService.ERROR_0003_USER_DELETION_FAILED_NO_USER=\u522a\u9664\u4f7f\u7528\u8005\u5931\u6557\uff0c\u4f7f\u7528\u8005\u4e0d\u5b58\u5728\uff1a{0} +UserRoleWebService.ERROR_0004_FAILED_TO_FIND_USER=\u7121\u6cd5\u5c0b\u627e\u4f7f\u7528\u8005\uff1a{0} +UserRoleWebService.ERROR_0005_FAILED_TO_FIND_ROLE=\u7121\u6cd5\u5c0b\u627e\u89d2\u8272\uff1a{0} +UserRoleWebService.ERROR_0006_ROLE_UPDATE_FAILED=\u7121\u6cd5\u66f4\u65b0\u89d2\u8272\uff1a{0} +UserRoleWebService.ERROR_0007_ROLE_DELETION_FAILED_NO_ROLE=\u522a\u9664\u89d2\u8272\u5931\u6557\uff0c\u89d2\u8272\u4e0d\u5b58\u5728\uff1a{0} +UserRoleWebService.ERROR_0008_ROLE_UPDATE_FAILED_DOES_NOT_EXIST=\u8981\u66f4\u65b0\u7684\u89d2\u8272\u4e0d\u5b58\u5728\uff1a{0} +DefaultChartBeansGenerator.ERROR_0001_SECURITY_ERROR=\u57f7\u884c\u5716\u8868\u6642\u767c\u751f\u5b89\u5168\u6027\u932f\u8aa4\u3002\u8acb\u9023\u7d61\u60a8\u7684\u7cfb\u7d71\u7ba1\u7406\u54e1\u3002 +DefaultChartBeansGenerator.ERROR_0002_UNKNOWN_ERROR=\u57f7\u884c\u5716\u8868\u6642\u767c\u751f\u672a\u77e5\u7684\u932f\u8aa4\u3002 +Olap4jSystemListener.ERROR_00001_ADD_ERROR=\u7121\u6cd5\u65b0\u589e Olap4j \u76ee\u9304 {0} +Olap4jSystemListener.ERROR_00002_REMOVE_ERROR=\u7121\u6cd5\u79fb\u9664 Olap4j \u76ee\u9304 {0} diff --git a/extensions/src/main/resources/org/pentaho/platform/plugin/action/messages/messages_cn.properties b/extensions/src/main/resources/org/pentaho/platform/plugin/action/messages/messages_cn.properties index a64ebe5b301..d2c5e909cad 100644 --- a/extensions/src/main/resources/org/pentaho/platform/plugin/action/messages/messages_cn.properties +++ b/extensions/src/main/resources/org/pentaho/platform/plugin/action/messages/messages_cn.properties @@ -12,260 +12,497 @@ # without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # See the GNU Lesser General Public License for more details. #Wed Jun 04 18:58:15 EDT 2008 -JFreeReport.ERROR_0021_DATA_COMPONENT_FAILED=[cn_205] Could not create data component -UtilityComponent.ERROR_0002_MESSAGE_LOG_ERROR=[cn_90] Error printing message to log -Email.USER_SETTINGS_HELP=[cn_141] Could not send email because the email server settings have not been configured properly. Contact your system administrator or CIO to resolve this issue, or consult your Pentaho Enterprise Edition Administrator's Guide for instructions on configuring email settings in the Pentaho Enterprise Console. -Kettle.DEBUG_GETTING_TRANSFORMATION_METADATA=[cn_221] Finding transformation metadata -TestComponent.DEBUG_RESOURCE_CONTENTS=[cn_91] Resource contents\: {0} -UtilityComponent.ERROR_0004_PARAMETER_NOT_MAP=[cn_24] Invalid parameter - "{0}" is not a Map -SettingsPublisher.USER_SYSTEM_SETTINGS=[cn_37] System Settings -ResultSetCompareComponent.ERROR_0010_MISMATCH_OUTPUT=[cn_225] Mismatch \= {0} -BIRT.DEBUG_EXECUTING_REPORT=[cn_17] executing reportDefinition {0} of type {1} -JavascriptRule.ERROR_0006_NO_MAPPED_OUTPUTS=[cn_9] {0} action-outputs are defined. There needs to be an input or component setting to map output{1} to one of the action-outputs -Base.WARNING_LOGGING_LEVEL_UNKNOWN=[cn_29] Logging level unknown\: setting to debug -Kettle.DEBUG_FINDING_REPOSITORY=[cn_227] Finding repository metadata -Kettle.DEBUG_TRANSFORMATION=[cn_228] Transformation\={0} -JasperReport.DEBUG_ADDING_PARAMETER=[cn_67] Adding parameter {0} with value {1} -JasperReport.ERROR_0001_IMAGE_URL_NOT_DEFINED=[cn_150] Image URL is null, cannot continue... -BIRT.DEBUG_BIRT_HOME=[cn_16] birtHome set to {0} -CATEGORYSETCOLL.USER_ERROR_CATEGORY_NOT_COMPARABLE=[cn_232] \#ERROR\# -MDXBaseComponent.DEBUG_RUNNING_QUERY=[cn_42] Running query - {0} -Kettle.DEBUG_STARTING_JOB=[cn_10] Starting job -Kettle.ERROR_0007_BAD_META_REPOSITORY=[cn_233] Could not create meta repository -SecureFilterComponent.ERROR_0001_INVALID_SELECTION="[cn_0] {0}" is not a valid selection for "{1}" for this user -Kettle.ERROR_0016_COULD_NOT_GET_REPOSITORY_INSTANCE=[cn_234] Could not create repository from metadata -JSRULE.ERROR_0001_SCRIPT_NOT_DEFINED=[cn_144] script is not defined for {0} -Base.WARN_NO_OUTPUT_STREAM=[cn_235] No output was specified, using default output stream. This usage will not be supported in the future. Please modify this action sequence -Kettle.ERROR_0005_LOGIN_FAILED=[cn_236] Unable to login with the specified user and password -Template.ERROR_0004_COULD_NOT_FORMAT_TEMPLATE=[cn_119] Could not format template -Kettle.ERROR_0021_BAD_JOB_METADATA=[cn_11] Could not create a job from the metadata -Kettle.DEBUG_SETTING_OUTPUT=[cn_238] Setting output -Kettle.DEBUG_GETTING_REPOSITORY=[cn_240] Getting repository instance -XQueryBaseComponent.ERROR_0005_INVALID_CONNECTION=[cn_59] Database connection could not be established -ComponentBase.ERROR_0004_OUTPUT_PARAM_MISSING=[cn_241] The required output parameter "{0}" was not specified in the action-outputs -HelloWorld.ERROR_0001_COULDNOTWRITE=[cn_15] Could not write message -MondrianModel.ERROR_0004_CUBE_NOT_SPECIFIED=[cn_85] getInitialQuery()\: Cube not specified\: {0} -UtilityComponent.ERROR_0005_GET_MAP_VALUES_ERROR=[cn_87] Error pulling values from property-map -CATEGORYSETCOLL.USER_DEBUG_GROUP_STARTED=[cn_234] Group Started -BIRT.ERROR_0008_INVALID_CONFIGURATION=[cn_4] Could not configure BIRT Engine -ResultSetFlattenerComponent.ERROR_0003_INVALID_FLATTEN_COLUMN=[cn_243] The column to flatten the IPentahoResultSet by has not been specified or is not valid -ResultSetFlattenerComponent.ERROR_0001_DATA_INPUT_INVALID_OBJECT=[cn_244] The result-set provided is not an IPentahoResultSet object -JFreeReport.ERROR_0011_REPORT_LOCATION_MISSING=[cn_186] report-location missing in component definition. -JasperReport.ERROR_0007_REPORT_DEFINITION_NOT_SPECIFIED=[cn_133] Report definition for report was not provided -Email.ERROR_0005_NULL_SUBJECT=[cn_66] 'subject' is null for {0} -Kettle.ERROR_0002_DIR_OR_FILE__NOT_DEFINED=[cn_247] The repository directory is not specified and a transform-file resource is not defined -BIRT.ERROR_0003_REPORT_TYPE_NOT_VALID=[cn_0] Input {0}, is not valid, should be html, pdf, fo, or fop -Base.ERROR_0003_INVALID_FEEDBACK_STREAM=[cn_71] Output stream for feedback was not provided -ResultSetCompareComponent.ERROR_0008_COLUMN_NOT_FOUND=[cn_248] Source resultset doesn't have column -Kettle.ERROR_0014_ERROR_DURING_EXECUTE=[cn_249] Error occurred during transformation execution -Message.USER_DEBUG=[cn_116] Debug\: {0} ({1}) -Email.ERROR_0009_SERVER_SETTINGS_NOT_SET=[cn_32] Email server settings have not been set -Kettle.DEBUG_JOB=[cn_18] Job\={0} -ResultSetCompareComponent.ERROR_0005_INPUT_RS2_NOT_RS=[cn_254] Input result-set-2 is not a resultset. -MondrianModel.ERROR_0008_NO_DEFAULT_MEMBER=[cn_84] getInitialQuery()\: Hierarchy has no default member\: {0} in {1} in {2} -SettingsPublisher.USER_SYSTEM_SETTINGS_UPDATED=[cn_109] The System Settings have been updated -JFreeReport.ERROR_0010_REPORT_JAR_MISSING=[cn_197] Report Jar file can not be found. -SQLBaseComponent.ERROR_0007_NO_CONNECTION=[cn_258] Connection to data source is not valid -JasperReport.ERROR_0005_JDBC_USER_NOT_SPECIFIED=[cn_124] JDBC user not specified. -Kettle.ERROR_0004_REPOSITORY_NOT_FOUND=[cn_260] The repository specified was not found ({0}) -JasperReport.DEBUG_LOADING_REPORT_DESIGN=[cn_33] Loading report design -JFreeReport.ERROR_0020_INVALID_FEEDBACK_STREAM=[cn_211] Output stream for feedback was not provided -Kettle.DEBUG_DIRECTORY=[cn_261] Directory\={0} -Email.DEBUG_PLAIN_MESSAGE=[cn_135] Execute messagePlain{0} -Kettle.ERROR_0017_XML_REPOSITORY_NOT_SUPPORTED=[cn_262] Sorry, specifying the repositories.xml file is for future use, taking the default file for now. -SQLBaseComponent.DEBUG_WAITING_FOR_CONNECTION=[cn_60] Waiting {0}ms for connection -JasperReport.DEBUG_OUTPUT_TYPE=[cn_63] output type is set to {0} -JFreeReport.ERROR_0009_REPORT_JAR_UNREADABLE=[cn_203] Report Jar file was not specified. -Email.ERROR_0002_SUBJECT_NOT_DEFINED=[cn_23] 'subject' is not defined for {0} -Email.USER_COULD_NOT_SEND_EMAIL=[cn_113] Could not send email -JFreeReport.ERROR_0008_INVALID_OUTPUT_STREAM=[cn_192] Invalid output stream for report -Kettle.DEBUG_GETTING_STEP_METADATA=[cn_266] Getting step metadata -JFreeReport.ERROR_0024_COULD_NOT_READ_PROPERTIES=[cn_269] Could not read locale properties from {0} -Kettle.ERROR_0015_BAD_RESOURCE=[cn_270] Could not load transformation {0} from resource {1} -JasperReport.ERROR_0009_REPORT_DEFINITION_MISSING=[cn_21] Report definition file "{0}" does not exist -MDXBaseComponent.ERROR_0001_QUERY_NOT_SPECIFIED=[cn_47] The query was not specified for {0} -PIESETCOLL.USER_DEBUG_ITEMS_ADVANCED=[cn_272] Items advanced -Kettle.DEBUG_GETTING_JOB_METADATA=[cn_28] Finding job metadata -PivotView.ERROR_0002_MODEL_NOT_DEFIEND=[cn_220] Required output 'model' is not defined -CATEGORYSETCOLL.USER_DEBUG_GROUPS_FINISHED=[cn_237] Groups finished -SettingsPublisher.ERROR_0001_PUBLISH_FAILED=[cn_106] Could not publish System Settings -Template.ERROR_0005_COULD_NOT_DETERMINE_COLUMN=[cn_274] Column in result set could not be determined. To format using a result set, make sure the column name and input name are the same, or make sure the result set has only one column. -MDXBaseComponent.DEBUG_WAITING_FOR_CONNECTION=[cn_74] Waiting {0}ms for connection -ContentOutputComponent.ERROR_0003_WRITING_OUTPUT=[cn_275] Error occurred while writing to the output -SQLBaseComponent.ERROR_0005_INVALID_CONNECTION=[cn_82] Database connection could not be established -MondrianModel.ERROR_0002_INVALID_SCHEMA=[cn_83] getInitialQuery()\: Mondrian schema is null\: {0} -CATEGORICALCHARTEXPRESSION.USER_NOT_A_DATASET=[cn_277] Not a CategoryDataset, skipping chart creation. -PivotView.ERROR_0008_URL_NOT_DEFINED=[cn_278] Required output 'url' is not defined -PivotView.ERROR_0001_OPTIONS_NOT_DEFINED=[cn_216] Required output 'options' is not defined -XQueryBaseComponent.ERROR_0001_QUERY_NOT_SPECIFIED=[cn_48] The query was not specified for {0} -PIESETCOLL.USER_DEBUG_GROUP_STARTED=[cn_282] Group Started -JasperReport.DEBUG_RUNNING_REPORT=[cn_132] Running report "{0}" -BIRT.ERROR_0009_PARAMETER_NOT_PROVIDED=[cn_20] parameter {0} required by the report has not been provided -JasperReport.DEBUG_IMAGE_URL=[cn_26] imageUrl is "{0}" -JasperReport.DEBUG_COMPILED_REPORT_LOCATION=[cn_34] compiled report will be at {0} -Kettle.ERROR_0020_JOB_METADATA_NOT_FOUND=[cn_34] The job metadata could not be found\: {0} -Email.ERROR_0011_SEND_FAILED=[cn_83] SMTP send failed\: {0} -MDXBaseComponent.ERROR_0005_INVALID_CONNECTION=[cn_52] Database connection could not be established -JasperReport.ERROR_0013_OUTPUT_STREAM_INVALID=[cn_142] Could not get output stream -Message.USER_ERROR=[cn_161] Error\: {0} ({1}) -Kettle.ERROR_0009_TRANSFROMATION_METADATA_NOT_FOUND=[cn_286] The transformation metadata could not be found\: -JasperReport.DEBUG_COMPILED_OK=[cn_77] done compiling -MondrianModel.ERROR_0007_NO_HIERARCHIES=[cn_88] getInitialQuery()\: Dimension has no hierarchy\: {0} in {1} in {2} -ComponentBase.ERROR_0003_INPUT_PARAM_MISSING=[cn_293] The required input parameter "{0}" was not specified in the action-inputs -SQLBaseComponent.ERROR_0006_EXECUTE_FAILED=[cn_122] Could not execute {0} -SQLBaseComponent.ERROR_0001_QUERY_NOT_SPECIFIED=[cn_88] The query was not specified for {0} -JasperReport.DEBUG_PARAMETER_NEEDED=[cn_56] Need to prompt for value of parameter {0} +JFreeReport.ERROR_0021_DATA_COMPONENT_FAILED=[cn_205] \u7121\u6cd5\u5efa\u7acb\u8cc7\u6599\u5143\u4ef6 +UtilityComponent.ERROR_0002_MESSAGE_LOG_ERROR=[cn_90] \u5c07\u8a0a\u606f\u5217\u5370\u5230\u8a18\u9304\u6642\u767c\u751f\u932f\u8aa4 +Email.USER_SETTINGS_HELP=[cn_141] \u7121\u6cd5\u50b3\u9001\u96fb\u5b50\u90f5\u4ef6\uff0c\u56e0\u70ba\u672a\u6b63\u78ba\u8a2d\u5b9a\u96fb\u5b50\u90f5\u4ef6\u4f3a\u670d\u5668\u8a2d\u5b9a\u3002\u8acb\u9023\u7d61\u60a8\u7684\u7cfb\u7d71\u7ba1\u7406\u54e1\u6216 CIO \u4ee5\u89e3\u6c7a\u6b64\u554f\u984c\uff0c\u6216\u8aee\u8a62\u60a8\u7684 Pentaho \u4f01\u696d\u7248\u672c\u7cfb\u7d71\u7ba1\u7406\u54e1\u6307\u5357\u4ee5\u53d6\u5f97\u5728 Pentaho \u4f01\u696d\u4e3b\u63a7\u53f0\u4e2d\u8a2d\u5b9a\u96fb\u5b50\u90f5\u4ef6\u8a2d\u5b9a\u7684\u6307\u793a\u3002 +Kettle.DEBUG_GETTING_TRANSFORMATION_METADATA=[cn_221] \u6b63\u5728\u5c0b\u627e\u8f49\u63db\u5f8c\u8a2d\u8cc7\u6599 +TestComponent.DEBUG_RESOURCE_CONTENTS=[cn_91] \u8cc7\u6e90\u5167\u5bb9\uff1a{0} +UtilityComponent.ERROR_0004_PARAMETER_NOT_MAP=[cn_24] \u7121\u6548\u7684\u53c3\u6578 - "{0}" \u4e0d\u662f Map +SettingsPublisher.USER_SYSTEM_SETTINGS=[cn_37] \u7cfb\u7d71\u8a2d\u5b9a +ResultSetCompareComponent.ERROR_0010_MISMATCH_OUTPUT=[cn_225] \u4e0d\u76f8\u7b26 = {0} +BIRT.DEBUG_EXECUTING_REPORT=[cn_17] \u6b63\u5728\u57f7\u884c\u985e\u578b\u70ba {1} \u7684 reportDefinition {0} +JavascriptRule.ERROR_0006_NO_MAPPED_OUTPUTS=[cn_9] \u5df2\u5b9a\u7fa9 {0} action-outputs\u3002\u5fc5\u9808\u8981\u6709\u8f38\u5165\u6216\u5143\u4ef6\u8a2d\u5b9a\uff0c\u4ee5\u5c07\u8f38\u51fa {1} \u5c0d\u61c9\u5230\u5176\u4e2d\u4e00\u500b action-outputs +Base.WARNING_LOGGING_LEVEL_UNKNOWN=[cn_29] \u672a\u77e5\u7684\u8a18\u9304\u5c64\u7d1a\uff1a\u6b63\u5728\u8a2d\u5b9a\u70ba\u5075\u932f +Kettle.DEBUG_FINDING_REPOSITORY=[cn_227] \u6b63\u5728\u5c0b\u627e\u5b58\u653e\u5eab\u5f8c\u8a2d\u8cc7\u6599 +Kettle.DEBUG_TRANSFORMATION=[cn_228] \u8f49\u63db={0} +JasperReport.DEBUG_ADDING_PARAMETER=[cn_67] \u6b63\u5728\u65b0\u589e\u5177\u6709\u503c {1} \u7684\u53c3\u6578 {0} +JasperReport.ERROR_0001_IMAGE_URL_NOT_DEFINED=[cn_150] \u5f71\u50cf URL \u662f Null\uff0c\u7121\u6cd5\u7e7c\u7e8c... +BIRT.DEBUG_BIRT_HOME=[cn_16] birtHome \u5df2\u8a2d\u5b9a\u70ba {0} +CATEGORYSETCOLL.USER_ERROR_CATEGORY_NOT_COMPARABLE=[cn_232] #ERROR# +MDXBaseComponent.DEBUG_RUNNING_QUERY=[cn_42] \u6b63\u5728\u57f7\u884c\u67e5\u8a62 - {0} +Kettle.DEBUG_STARTING_JOB=[cn_10] \u6b63\u5728\u958b\u59cb\u4f5c\u696d +Kettle.ERROR_0007_BAD_META_REPOSITORY=[cn_233] \u7121\u6cd5\u5efa\u7acb\u5f8c\u8a2d\u5b58\u653e\u5eab +SecureFilterComponent.ERROR_0001_INVALID_SELECTION="[cn_0] {0}" \u4e0d\u662f\u6b64\u4f7f\u7528\u8005\u4e4b "{1}" \u7684\u6709\u6548\u9078\u64c7\u9805\u76ee +Kettle.ERROR_0016_COULD_NOT_GET_REPOSITORY_INSTANCE=[cn_234] \u7121\u6cd5\u5f9e\u5f8c\u8a2d\u8cc7\u6599\u5efa\u7acb\u5b58\u653e\u5eab +JSRULE.ERROR_0001_SCRIPT_NOT_DEFINED=[cn_144] \u672a\u91dd\u5c0d {0} \u5b9a\u7fa9\u6307\u4ee4\u78bc +Base.WARN_NO_OUTPUT_STREAM=[cn_235] \u672a\u6307\u5b9a\u4efb\u4f55\u8f38\u51fa\uff0c\u6b63\u5728\u4f7f\u7528\u9810\u8a2d\u8f38\u51fa\u4e32\u6d41\u3002\u672a\u4f86\u5c07\u4e0d\u518d\u652f\u63f4\u6b64\u4f7f\u7528\u65b9\u5f0f\u3002\u8acb\u4fee\u6539\u6b64\u52d5\u4f5c\u5e8f\u5217 +Kettle.ERROR_0005_LOGIN_FAILED=[cn_236] \u7121\u6cd5\u4f7f\u7528\u6307\u5b9a\u7684\u4f7f\u7528\u8005\u8207\u5bc6\u78bc\u767b\u5165 +Template.ERROR_0004_COULD_NOT_FORMAT_TEMPLATE=[cn_119] \u7121\u6cd5\u8a2d\u5b9a\u7bc4\u672c\u683c\u5f0f +Kettle.ERROR_0021_BAD_JOB_METADATA=[cn_11] \u7121\u6cd5\u5f9e\u5f8c\u8a2d\u8cc7\u6599\u5efa\u7acb\u4f5c\u696d +Kettle.DEBUG_SETTING_OUTPUT=[cn_238] \u6b63\u5728\u8a2d\u5b9a\u8f38\u51fa +Kettle.DEBUG_GETTING_REPOSITORY=[cn_240] \u6b63\u5728\u53d6\u5f97\u5b58\u653e\u5eab\u57f7\u884c\u500b\u9ad4 +XQueryBaseComponent.ERROR_0005_INVALID_CONNECTION=[cn_59] \u7121\u6cd5\u5efa\u7acb\u8cc7\u6599\u5eab\u9023\u7dda +ComponentBase.ERROR_0004_OUTPUT_PARAM_MISSING=[cn_241] \u672a\u5728 action-outputs \u4e2d\u6307\u5b9a\u5fc5\u8981\u8f38\u51fa\u53c3\u6578 "{0}" +HelloWorld.ERROR_0001_COULDNOTWRITE=[cn_15] \u7121\u6cd5\u5beb\u5165\u8a0a\u606f +MondrianModel.ERROR_0004_CUBE_NOT_SPECIFIED=[cn_85] getInitialQuery()\uff1a\u672a\u6307\u5b9a\u591a\u7dad\u8cc7\u6599\u96c6\uff1a{0} +UtilityComponent.ERROR_0005_GET_MAP_VALUES_ERROR=[cn_87] \u5f9e property-map \u63d0\u53d6\u503c\u6642\u767c\u751f\u932f\u8aa4 +CATEGORYSETCOLL.USER_DEBUG_GROUP_STARTED=[cn_234] \u7fa4\u7d44\u5df2\u555f\u52d5 +BIRT.ERROR_0008_INVALID_CONFIGURATION=[cn_4] \u7121\u6cd5\u8a2d\u5b9a BIRT \u5f15\u64ce +ResultSetFlattenerComponent.ERROR_0003_INVALID_FLATTEN_COLUMN=[cn_243] \u8981\u7528\u4f86\u5c07 IPentahoResultSet \u6241\u5e73\u5316\u7684\u8cc7\u6599\u884c\u5c1a\u672a\u6307\u5b9a\u6216\u7121\u6548 +ResultSetFlattenerComponent.ERROR_0001_DATA_INPUT_INVALID_OBJECT=[cn_244] \u6240\u63d0\u4f9b\u7684 result-set \u4e0d\u662f IPentahoResultSet \u7269\u4ef6 +JFreeReport.ERROR_0011_REPORT_LOCATION_MISSING=[cn_186] \u5143\u4ef6\u5b9a\u7fa9\u4e2d\u7684 report-location \u907a\u5931\u3002 +JasperReport.ERROR_0007_REPORT_DEFINITION_NOT_SPECIFIED=[cn_133] \u672a\u63d0\u4f9b\u5831\u544a\u7684\u5831\u544a\u5b9a\u7fa9 +Email.ERROR_0005_NULL_SUBJECT=[cn_66] 'subject' \u91dd\u5c0d {0} \u662f Null +Kettle.ERROR_0002_DIR_OR_FILE__NOT_DEFINED=[cn_247] \u672a\u6307\u5b9a\u5b58\u653e\u5eab\u76ee\u9304\u4e14\u672a\u5b9a\u7fa9 transform-file \u8cc7\u6e90 +BIRT.ERROR_0003_REPORT_TYPE_NOT_VALID=[cn_0] {0} \u8f38\u5165\u7121\u6548\uff0c\u61c9\u8a72\u8981\u662f html\u3001pdf\u3001fo \u6216 fop +Base.ERROR_0003_INVALID_FEEDBACK_STREAM=[cn_71] \u672a\u63d0\u4f9b\u53cd\u994b\u7684\u8f38\u51fa\u4e32\u6d41 +ResultSetCompareComponent.ERROR_0008_COLUMN_NOT_FOUND=[cn_248] \u4f86\u6e90\u7d50\u679c\u96c6\u6c92\u6709\u8cc7\u6599\u884c +Kettle.ERROR_0014_ERROR_DURING_EXECUTE=[cn_249] \u8f49\u63db\u57f7\u884c\u671f\u9593\u767c\u751f\u932f\u8aa4 +Message.USER_DEBUG=[cn_116] \u5075\u932f\uff1a{0} ({1}) +Email.ERROR_0009_SERVER_SETTINGS_NOT_SET=[cn_32] \u5c1a\u672a\u8a2d\u5b9a\u96fb\u5b50\u90f5\u4ef6\u4f3a\u670d\u5668\u8a2d\u5b9a +Kettle.DEBUG_JOB=[cn_18] \u4f5c\u696d={0} +ResultSetCompareComponent.ERROR_0005_INPUT_RS2_NOT_RS=[cn_254] result-set-2 \u8f38\u5165\u4e0d\u662f\u7d50\u679c\u96c6\u3002 +MondrianModel.ERROR_0008_NO_DEFAULT_MEMBER=[cn_84] getInitialQuery()\uff1a\u968e\u5c64\u6c92\u6709\u9810\u8a2d\u6210\u54e1\uff1a{2} \u4e2d\u7684 {0} \u4e2d\u7684 {1} +SettingsPublisher.USER_SYSTEM_SETTINGS_UPDATED=[cn_109] \u5df2\u66f4\u65b0\u7cfb\u7d71\u8a2d\u5b9a +JFreeReport.ERROR_0010_REPORT_JAR_MISSING=[cn_197] \u627e\u4e0d\u5230\u5831\u544a Jar \u6a94\u6848\u3002 +SQLBaseComponent.ERROR_0007_NO_CONNECTION=[cn_258] \u91dd\u5c0d\u8cc7\u6599\u4f86\u6e90\u7684\u9023\u7dda\u7121\u6548 +JasperReport.ERROR_0005_JDBC_USER_NOT_SPECIFIED=[cn_124] \u672a\u6307\u5b9a JDBC \u4f7f\u7528\u8005\u3002 +Kettle.ERROR_0004_REPOSITORY_NOT_FOUND=[cn_260] \u627e\u4e0d\u5230\u6240\u6307\u5b9a\u7684\u5b58\u653e\u5eab ({0}) +JasperReport.DEBUG_LOADING_REPORT_DESIGN=[cn_33] \u6b63\u5728\u8f09\u5165\u5831\u544a\u8a2d\u8a08 +JFreeReport.ERROR_0020_INVALID_FEEDBACK_STREAM=[cn_211] \u672a\u63d0\u4f9b\u53cd\u994b\u7684\u8f38\u51fa\u4e32\u6d41 +Kettle.DEBUG_DIRECTORY=[cn_261] \u76ee\u9304={0} +Email.DEBUG_PLAIN_MESSAGE=[cn_135] \u57f7\u884c messagePlain{0} +Kettle.ERROR_0017_XML_REPOSITORY_NOT_SUPPORTED=[cn_262] \u62b1\u6b49\uff0c\u6307\u5b9a repositories.xml \u6a94\u6848\u662f\u7528\u65bc\u672a\u4f86\uff0c\u76ee\u524d\u5c07\u63a1\u7528\u9810\u8a2d\u6a94\u6848\u3002 +SQLBaseComponent.DEBUG_WAITING_FOR_CONNECTION=[cn_60] \u6b63\u5728\u91dd\u5c0d\u9023\u7dda\u7b49\u5f85 {0} \u6beb\u79d2 +JasperReport.DEBUG_OUTPUT_TYPE=[cn_63] \u8f38\u51fa\u985e\u578b\u5df2\u8a2d\u5b9a\u70ba {0} +JFreeReport.ERROR_0009_REPORT_JAR_UNREADABLE=[cn_203] \u672a\u6307\u5b9a\u5831\u544a Jar \u6a94\u6848\u3002 +Email.ERROR_0002_SUBJECT_NOT_DEFINED=[cn_23] 'subject' \u672a\u91dd\u5c0d {0} \u5b9a\u7fa9 +Email.USER_COULD_NOT_SEND_EMAIL=[cn_113] \u7121\u6cd5\u50b3\u9001\u96fb\u5b50\u90f5\u4ef6 +JFreeReport.ERROR_0008_INVALID_OUTPUT_STREAM=[cn_192] \u5831\u544a\u7684\u8f38\u51fa\u4e32\u6d41\u7121\u6548 +Kettle.DEBUG_GETTING_STEP_METADATA=[cn_266] \u6b63\u5728\u53d6\u5f97\u6b65\u9a5f\u5f8c\u8a2d\u8cc7\u6599 +JFreeReport.ERROR_0024_COULD_NOT_READ_PROPERTIES=[cn_269] \u7121\u6cd5\u5f9e {0} \u8b80\u53d6\u5730\u5340\u8a2d\u5b9a\u5c6c\u6027 +Kettle.ERROR_0015_BAD_RESOURCE=[cn_270] \u7121\u6cd5\u5f9e\u8cc7\u6e90 {1} \u8f09\u5165\u8f49\u63db {0} +JasperReport.ERROR_0009_REPORT_DEFINITION_MISSING=[cn_21] \u5831\u544a\u5b9a\u7fa9\u6a94 "{0}" \u4e0d\u5b58\u5728 +MDXBaseComponent.ERROR_0001_QUERY_NOT_SPECIFIED=[cn_47] \u672a\u91dd\u5c0d {0} \u6307\u5b9a\u67e5\u8a62 +PIESETCOLL.USER_DEBUG_ITEMS_ADVANCED=[cn_272] \u9805\u76ee\u5df2\u63a8\u9032 +Kettle.DEBUG_GETTING_JOB_METADATA=[cn_28] \u6b63\u5728\u5c0b\u627e\u4f5c\u696d\u5f8c\u8a2d\u8cc7\u6599 +PivotView.ERROR_0002_MODEL_NOT_DEFIEND=[cn_220] \u672a\u5b9a\u7fa9\u5fc5\u8981\u7684\u8f38\u51fa 'model' +CATEGORYSETCOLL.USER_DEBUG_GROUPS_FINISHED=[cn_237] \u7fa4\u7d44\u5df2\u5b8c\u6210 +SettingsPublisher.ERROR_0001_PUBLISH_FAILED=[cn_106] \u7121\u6cd5\u767c\u884c\u7cfb\u7d71\u8a2d\u5b9a +Template.ERROR_0005_COULD_NOT_DETERMINE_COLUMN=[cn_274] \u7121\u6cd5\u5224\u65b7\u7d50\u679c\u96c6\u4e2d\u7684\u8cc7\u6599\u884c\u3002\u82e5\u8981\u4f7f\u7528\u7d50\u679c\u96c6\u9032\u884c\u683c\u5f0f\u8a2d\u5b9a\uff0c\u8acb\u78ba\u5b9a\u8cc7\u6599\u884c\u540d\u7a31\u8207\u8f38\u5165\u540d\u7a31\u76f8\u540c\uff0c\u6216\u78ba\u8a8d\u7d50\u679c\u96c6\u53ea\u6709\u4e00\u500b\u8cc7\u6599\u884c\u3002 +MDXBaseComponent.DEBUG_WAITING_FOR_CONNECTION=[cn_74] \u6b63\u5728\u91dd\u5c0d\u9023\u7dda\u7b49\u5f85 {0} \u6beb\u79d2 +ContentOutputComponent.ERROR_0003_WRITING_OUTPUT=[cn_275] \u5beb\u5165\u5230\u8f38\u51fa\u6642\u767c\u751f\u932f\u8aa4 +SQLBaseComponent.ERROR_0005_INVALID_CONNECTION=[cn_82] \u7121\u6cd5\u5efa\u7acb\u8cc7\u6599\u5eab\u9023\u7dda +MondrianModel.ERROR_0002_INVALID_SCHEMA=[cn_83] getInitialQuery()\uff1aMondrian \u7db1\u8981\u662f Null\uff1a{0} +CATEGORICALCHARTEXPRESSION.USER_NOT_A_DATASET=[cn_277] \u4e0d\u662f CategoryDataset\uff0c\u6b63\u5728\u8df3\u904e\u5716\u8868\u5efa\u7acb\u3002 +PivotView.ERROR_0008_URL_NOT_DEFINED=[cn_278] \u672a\u5b9a\u7fa9\u5fc5\u8981\u7684\u8f38\u51fa 'url' +PivotView.ERROR_0001_OPTIONS_NOT_DEFINED=[cn_216] \u672a\u5b9a\u7fa9\u5fc5\u8981\u7684\u8f38\u51fa 'options' +XQueryBaseComponent.ERROR_0001_QUERY_NOT_SPECIFIED=[cn_48] \u672a\u91dd\u5c0d {0} \u6307\u5b9a\u67e5\u8a62 +PIESETCOLL.USER_DEBUG_GROUP_STARTED=[cn_282] \u7fa4\u7d44\u5df2\u555f\u52d5 +JasperReport.DEBUG_RUNNING_REPORT=[cn_132] \u6b63\u5728\u57f7\u884c\u5831\u544a "{0}" +BIRT.ERROR_0009_PARAMETER_NOT_PROVIDED=[cn_20] \u672a\u63d0\u4f9b\u5831\u544a\u6240\u8981\u6c42\u7684\u53c3\u6578 {0} +JasperReport.DEBUG_IMAGE_URL=[cn_26] imageUrl \u662f "{0}" +JasperReport.DEBUG_COMPILED_REPORT_LOCATION=[cn_34] \u7de8\u8b6f\u7684\u5831\u544a\u5c07\u4f4d\u65bc {0} +Kettle.ERROR_0020_JOB_METADATA_NOT_FOUND=[cn_34] \u627e\u4e0d\u5230\u4f5c\u696d\u5f8c\u8a2d\u8cc7\u6599\uff1a{0} +Email.ERROR_0011_SEND_FAILED=[cn_83] SMTP \u50b3\u9001\u5931\u6557\uff1a{0} +MDXBaseComponent.ERROR_0005_INVALID_CONNECTION=[cn_52] \u7121\u6cd5\u5efa\u7acb\u8cc7\u6599\u5eab\u9023\u7dda +JasperReport.ERROR_0013_OUTPUT_STREAM_INVALID=[cn_142] \u7121\u6cd5\u53d6\u5f97\u8f38\u51fa\u4e32\u6d41 +Message.USER_ERROR=[cn_161] \u932f\u8aa4\uff1a{0} ({1}) +Kettle.ERROR_0009_TRANSFROMATION_METADATA_NOT_FOUND=[cn_286] \u627e\u4e0d\u5230\u8f49\u63db\u5f8c\u8a2d\u8cc7\u6599\uff1a +JasperReport.DEBUG_COMPILED_OK=[cn_77] \u5df2\u5b8c\u6210\u7de8\u8b6f +MondrianModel.ERROR_0007_NO_HIERARCHIES=[cn_88] getInitialQuery()\uff1a\u7dad\u5ea6\u6c92\u6709\u968e\u5c64\uff1a{2} \u4e2d\u7684 {1} \u4e2d\u7684 {0} +ComponentBase.ERROR_0003_INPUT_PARAM_MISSING=[cn_293] \u672a\u5728 action-inputs \u4e2d\u6307\u5b9a\u5fc5\u8981\u8f38\u5165\u53c3\u6578 "{0}" +SQLBaseComponent.ERROR_0006_EXECUTE_FAILED=[cn_122] \u7121\u6cd5\u57f7\u884c {0} +SQLBaseComponent.ERROR_0001_QUERY_NOT_SPECIFIED=[cn_88] \u672a\u91dd\u5c0d {0} \u6307\u5b9a\u67e5\u8a62 +JasperReport.DEBUG_PARAMETER_NEEDED=[cn_56] \u9700\u8981\u63d0\u793a\u8f38\u5165\u53c3\u6578 {0} \u7684\u503c SQLExecute.USER_AFFECTED_ROWS_COLUMN_NAME=[cn_38] AffectedRows -JFreeReport.ERROR_0016_REPORT_RESOURCE_INVALID=[cn_189] report-location {0} in jar {1} could not be loaded. -Kettle.ERROR_0010_BAD_TRANSFORMATION_METADATA=[cn_298] Could not create a transformation from the metadata -JFreeReport.ERROR_0004_REPORT_DEFINITION_UNREADABLE=[cn_187] Report definition could not be read -ResultSetCompareComponent.ERROR_0003_COLUMN_UNDEFINED=[cn_300] Column to compare was not supplied -PivotView.ERROR_0003_CONNECTION_NOT_DEFINED=[cn_222] Required output 'connection' is not defined -XQueryBaseComponent.DEBUG_RUNNING_QUERY=[cn_126] Running query - {0} -Message.USER_INFO=[cn_122] Info\: {0} ({1}) -TestComponent.ERROR_0003_PARAMETER_MISSING=[cn_116] Missing parameter(s) {0} - "{1}" required "{2}" found. -JasperReport.DEBUG_IMAGE_DIRECTORY=[cn_128] imageDir is "{0}" -Email.DEBUG_ATTACHMENT_SOURCE=[cn_93] Attachment dataSource name \={0} -Kettle.DEBUG_START=[cn_304] Start of execute -BIRT.ERROR_0012_CANT_COMPLETE_PURGE=[cn_6] Purging directory {0} - could not complete clean up. -UtilityComponent.ERROR_0001_FORMAT_ERROR=[cn_54] Error formatting Message -BIRT.ERROR_0005_INVALID_REPORT_PARAMETERS=[cn_19] The report parameters could not be set up -ResultSetCompareComponent.ERROR_0004_INPUT_RS1_NOT_RS=[cn_309] Input result-set-1 is not a resultset. -MondrianModel.ERROR_0001_INVALID_CONNECTION=[cn_82] getInitialQuery()\: Connection is not valid\: {0} -Kettle.ERROR_0013_TRANSFORMATION_START_FAILED=[cn_312] Could not start transformation -JasperReport.ERROR_0011_OUTPUT_TYPE_INVALID=[cn_41] Report output type is not 'html' or 'pdf' -MDXBaseComponent.ERROR_0007_CATALOG_NOT_DEFINED=[cn_314] Catalog Not Defined for - {0} -Kettle.ERROR_0022_JOB_START_FAILED=[cn_43] Could not start transformation -Email.ERROR_0001_TO_NOT_DEFINED=[cn_101] 'to' address not defined for {0} -Kettle.ERROR_0012_ROW_LISTENER_CREATE_FAILED=[cn_315] Could not set up row listener -Kettle.ERROR_0012_ERROR_INIT_STEP=[cn_315] Error initializing step {0} -MDXBaseComponent.ERROR_0006_EXECUTE_FAILED=[cn_38] Could not execute {0} -XQueryBaseComponent.ERROR_0008_SOURCE_NOT_DEFINED=[cn_318] Source document not defined {0} -TestComponent.ERROR_0004_P1_P2_WRONG_TYPE=[cn_45] Invalid parameters - p1 must be a property map and p2 must be a property-map-list -JasperReport.ERROR_0003_JDBC_DRIVER_NOT_SPECIFIED=[cn_148] JDBC driver not specified. -SecureFilterComponent.ERROR_0001_PARAM_MISSING=[cn_12] Unable to find or create a filter list for the action input parameter "{0}" -Kettle.DEBUG_FOUND_STEP_IMPORTER=[cn_320] Found import step in transformation -JFreeReport.ERROR_0027_REPORT_CONFIGURATION_PARAMETER_IGNORED=[cn_322] Ignored report configuration setting because the name was not supplied or the value was null or empty. -JasperReport.ERROR_0008_REPORT_DEFINITION_UNREADABLE=[cn_50] Report definition could not be read -SQLExecute.USER_AFFECTED_ROW_STATUS=[cn_44] Status -Kettle.ERROR_0023_NO_META=[cn_45] Unable to create Job Meta Data {0} -ResultSetCompareComponent.ERROR_0009_COMPARISON_COLUMN_NOT_FOUND=[cn_325] Comparison resultset doesn't have column -JFreeReport.ERROR_0026_UNKNOWN_REPORT_CONFIGURATION_PARAMETERS=[cn_326] Invalid data type for report configuration parameters. Only ResultSet supported. -BIRT.ERROR_0007_REPORT_ERRORS_ENCOUNTERED=[cn_2] error running report {0} -TestComponent.DEBUG_INPUT_DESCRIPTION=[cn_151] There is an input called {0} of type {1} -Message.USER_WARNING=[cn_140] Warning\: {0} ({1}) -Kettle.ERROR_0006_DIRECTORY_NOT_FOUND=[cn_329] Unable to find the specified directory {0} -PivotView.ERROR_0006_VIEWER_NOT_DEFINED=[cn_218] Required output 'viewer' is not defined -JasperReport.ERROR_0006_OUTPUT_TYPE_NOT_SPECIFIED=[cn_39] Ouput type for report was not provided -Kettle.ERROR_0018_META_REPOSITORY_NOT_POPULATED=[cn_332] Could not populate meta repository -JasperReport.DEBUG_REMOVE_EMPTRY_ROWS=[cn_92] removeEmptyRows is {0} -JSRULE.ERROR_0003_EXECUTION_FAILED=[cn_89] Javascript rule execution failed -MDXBaseComponent.ERROR_0004_VALIDATION_FAILED=[cn_111] Could not validate {0} -PivotView.ERROR_0005_MODE_NOT_DEFINED=[cn_219] Required input 'mode' is not defined -Email.DEBUG_SUBJECT=[cn_139] Execute subject{0} -SQLBaseComponent.ERROR_0002_CONNECTION_NOT_SPECIFIED=[cn_123] The connection information was not specified for {0} -Kettle.ERROR_0011_TRANSFORMATION_PREPARATION_FAILED=[cn_335] Could not prepare transformation for execution -ContentOutputComponent.ERROR_0002_EMPTY_OUTPUT=[cn_338] No html data for component to write -ContentRepositoryCleaner.INFO_0003=[cn_56] days old. -ContentRepositoryCleaner.INFO_0002=[cn_57] file(s) more than -ContentRepositoryCleaner.INFO_0001=[cn_58] Action Successful\! Found and deleted -Base.ERROR_0002_EXECUTION_FAILED=[cn_58] Component execution failed -JasperReport.DEBUG_REPORT_FILE_FOUND=[cn_22] Found report file -Kettle.DEBUG_POPULATING_META=[cn_340] populating meta-repository -JasperReport.ERROR_0002_IMAGE_DIRECTORY_INVALID=[cn_64] Image Directory is null, cannot continue... -JFreeReport.DEBUG_OUTPUT_TYPE=[cn_196] Output type is {0} -CATEGORYSETCOLL.USER_DEBUG_REPORT_INITIALIZED=[cn_235] Report initialized -BIRT.ERROR_0002_REPORT_DEFINITION_NOT_SPECIFIED=[cn_12] Report definition is not defined -PIESETCOLL.USER_DEBUG_REPORT_INITIALIZED=[cn_342] Report initialized -JasperReport.ERROR_0010_UNABLE_TO_COMPILE=[cn_25] Unable to compile report {0} to file {1} -PivotView.ERROR_0007_TITLE_NOT_DEFINED=[cn_217] Required output 'title' is not defined -SQLExecute.USER_SUCCESS=[cn_61] Success -JasperReport.ERROR_0012_REPORT_DESIGN_NO_LOADABLE=[cn_57] Can not load report design from file -Email.ERROR_0013_CONFIG_FILE_INVALID=[cn_106] Could not load configuration file -TestComponent.ERROR_0003_PARAMETER_NOT_MAP=[cn_99] Invalid parameters - "{0}" is not a Map -JasperReport.DEBUG_COMPILING_REPORT=[cn_28] report needs compiling... -Email.DEBUG_EMAIL_SUCCESS=[cn_86] Mail was sent successfully. -JFreeReport.ERROR_0022_DATA_INPUT_INVALID_OBJECT=[cn_198] The data object is not an IPentahoResultSet object -ContentOutputComponent.ERROR_0001_CONTENTOUTPUT_NOT_DEFINED=[cn_351] Required input 'CONTENTOUTPUT' is not defined -Kettle.DEBUG_DISCONNECTING=[cn_353] Disconnecting -Kettle.DEBUG_CONNECTING=[cn_358] Connecting to repository -Kettle.ERROR_0001_SERVER_SETTINGS_NOT_SET=[cn_359] The Kettle repository settings have not been set -Kettle.DEBUG_FINDING_STEP_IMPORTER=[cn_360] Looking for step importHandler -ContentOutputComponent.ERROR_0004_CONTENTOUTPUT_NULL=[cn_362] Expected input 'CONTENTOUTPUT' was null -ResultSetCompareComponent.ERROR_0006_RESULTSETS_ROWCOUNT_WRONG=[cn_363] Resultsets have different number of rows -PIESETCOLL.USER_ERROR_SERIES_NOT_COMPARABLE=[cn_365] \#ERROR\# -TestComponent.ERROR_0001_TEST_NODE_NOT_FOUND=[cn_105] Node 'test' not found -Kettle.DEBUG_JOB_RUNNING=[cn_67] Job running +JFreeReport.ERROR_0016_REPORT_RESOURCE_INVALID=[cn_189] \u7121\u6cd5\u8f09\u5165 jar {1} \u4e2d\u7684 report-location {0}\u3002 +Kettle.ERROR_0010_BAD_TRANSFORMATION_METADATA=[cn_298] \u7121\u6cd5\u5f9e\u5f8c\u8a2d\u8cc7\u6599\u5efa\u7acb\u8f49\u63db +JFreeReport.ERROR_0004_REPORT_DEFINITION_UNREADABLE=[cn_187] \u7121\u6cd5\u8b80\u53d6\u5831\u544a\u5b9a\u7fa9 +ResultSetCompareComponent.ERROR_0003_COLUMN_UNDEFINED=[cn_300] \u672a\u63d0\u4f9b\u8981\u6bd4\u8f03\u7684\u8cc7\u6599\u884c +PivotView.ERROR_0003_CONNECTION_NOT_DEFINED=[cn_222] \u672a\u5b9a\u7fa9\u5fc5\u8981\u7684\u8f38\u51fa 'connection' +XQueryBaseComponent.DEBUG_RUNNING_QUERY=[cn_126] \u6b63\u5728\u57f7\u884c\u67e5\u8a62 - {0} +Message.USER_INFO=[cn_122] \u8cc7\u8a0a\uff1a{0} ({1}) +TestComponent.ERROR_0003_PARAMETER_MISSING=[cn_116] \u907a\u5931\u53c3\u6578 {0} - \u9700\u8981 "{1}"\uff0c\u627e\u5230 "{2}"\u3002 +JasperReport.DEBUG_IMAGE_DIRECTORY=[cn_128] imageDir \u662f "{0}" +Email.DEBUG_ATTACHMENT_SOURCE=[cn_93] \u9644\u4ef6 dataSource \u540d\u7a31 ={0} +Kettle.DEBUG_START=[cn_304] \u57f7\u884c\u7684\u958b\u59cb +BIRT.ERROR_0012_CANT_COMPLETE_PURGE=[cn_6] \u6b63\u5728\u6e05\u9664\u76ee\u9304 {0} - \u7121\u6cd5\u5b8c\u6210\u6e05\u7406\u3002 +UtilityComponent.ERROR_0001_FORMAT_ERROR=[cn_54] \u5c0d\u8a0a\u606f\u9032\u884c\u683c\u5f0f\u8a2d\u5b9a\u6642\u767c\u751f\u932f\u8aa4 +BIRT.ERROR_0005_INVALID_REPORT_PARAMETERS=[cn_19] \u7121\u6cd5\u8a2d\u5b9a\u5831\u544a\u53c3\u6578 +ResultSetCompareComponent.ERROR_0004_INPUT_RS1_NOT_RS=[cn_309] \u8f38\u5165 result-set-1 \u4e0d\u662f\u7d50\u679c\u96c6\u3002 +MondrianModel.ERROR_0001_INVALID_CONNECTION=[cn_82] getInitialQuery()\uff1a\u9023\u7dda\u7121\u6548\uff1a{0} +Kettle.ERROR_0013_TRANSFORMATION_START_FAILED=[cn_312] \u7121\u6cd5\u958b\u59cb\u8f49\u63db +JasperReport.ERROR_0011_OUTPUT_TYPE_INVALID=[cn_41] \u5831\u544a\u8f38\u51fa\u985e\u578b\u4e0d\u662f 'html' \u6216 'pdf' +MDXBaseComponent.ERROR_0007_CATALOG_NOT_DEFINED=[cn_314] \u672a\u91dd\u5c0d\u4e0b\u5217\u9805\u76ee\u5b9a\u7fa9\u76ee\u9304 - {0} +Kettle.ERROR_0022_JOB_START_FAILED=[cn_43] \u7121\u6cd5\u958b\u59cb\u8f49\u63db +Email.ERROR_0001_TO_NOT_DEFINED=[cn_101] \u672a\u91dd\u5c0d {0} \u5b9a\u7fa9 'to' \u4f4d\u5740 +Kettle.ERROR_0012_ROW_LISTENER_CREATE_FAILED=[cn_315] \u7121\u6cd5\u8a2d\u5b9a\u8cc7\u6599\u5217\u63a5\u807d\u7a0b\u5f0f +Kettle.ERROR_0012_ERROR_INIT_STEP=[cn_315] \u5c07\u6b65\u9a5f {0} \u521d\u59cb\u5316\u6642\u767c\u751f\u932f\u8aa4 +MDXBaseComponent.ERROR_0006_EXECUTE_FAILED=[cn_38] \u7121\u6cd5\u57f7\u884c {0} +XQueryBaseComponent.ERROR_0008_SOURCE_NOT_DEFINED=[cn_318] \u672a\u5b9a\u7fa9\u4f86\u6e90\u6587\u4ef6 {0} +TestComponent.ERROR_0004_P1_P2_WRONG_TYPE=[cn_45] \u7121\u6548\u7684\u53c3\u6578 - p1 \u5fc5\u9808\u662f\u5c6c\u6027\u5c0d\u61c9\uff0c\u4e14 p2 \u5fc5\u9808\u662f property-map-list +JasperReport.ERROR_0003_JDBC_DRIVER_NOT_SPECIFIED=[cn_148] \u672a\u6307\u5b9a JDBC \u9a45\u52d5\u7a0b\u5f0f\u3002 +SecureFilterComponent.ERROR_0001_PARAM_MISSING=[cn_12] \u7121\u6cd5\u627e\u5230\u6216\u5efa\u7acb\u52d5\u4f5c\u8f38\u5165\u53c3\u6578 "{0}" \u7684\u7be9\u9078\u6e05\u55ae +Kettle.DEBUG_FOUND_STEP_IMPORTER=[cn_320] \u5728\u8f49\u63db\u4e2d\u627e\u5230\u532f\u5165\u6b65\u9a5f +JFreeReport.ERROR_0027_REPORT_CONFIGURATION_PARAMETER_IGNORED=[cn_322] \u5df2\u5ffd\u7565\u5831\u544a\u7d44\u614b\u8a2d\u5b9a\uff0c\u56e0\u70ba\u672a\u63d0\u4f9b\u540d\u7a31\u6216\u503c\u662f Null \u6216\u7a7a\u7684\u3002 +JasperReport.ERROR_0008_REPORT_DEFINITION_UNREADABLE=[cn_50] \u7121\u6cd5\u8b80\u53d6\u5831\u544a\u5b9a\u7fa9 +SQLExecute.USER_AFFECTED_ROW_STATUS=[cn_44] \u72c0\u614b +Kettle.ERROR_0023_NO_META=[cn_45] \u7121\u6cd5\u5efa\u7acb\u4f5c\u696d\u5f8c\u8a2d\u8cc7\u6599 {0} +ResultSetCompareComponent.ERROR_0009_COMPARISON_COLUMN_NOT_FOUND=[cn_325] \u6bd4\u8f03\u7d50\u679c\u96c6\u6c92\u6709\u8cc7\u6599\u884c +JFreeReport.ERROR_0026_UNKNOWN_REPORT_CONFIGURATION_PARAMETERS=[cn_326] \u5831\u544a\u8a2d\u5b9a\u53c3\u6578\u7684\u8cc7\u6599\u985e\u578b\u7121\u6548\u3002\u50c5\u652f\u63f4\u7d50\u679c\u96c6\u3002 +BIRT.ERROR_0007_REPORT_ERRORS_ENCOUNTERED=[cn_2] \u57f7\u884c\u5831\u544a {0} \u6642\u767c\u751f\u932f\u8aa4 +TestComponent.DEBUG_INPUT_DESCRIPTION=[cn_151] \u6709\u4e00\u500b\u985e\u578b\u70ba {1} \u4e14\u540d\u70ba {0} \u7684\u8f38\u5165 +Message.USER_WARNING=[cn_140] \u8b66\u544a\uff1a{0} ({1}) +Kettle.ERROR_0006_DIRECTORY_NOT_FOUND=[cn_329] \u627e\u4e0d\u5230\u6307\u5b9a\u7684\u76ee\u9304 {0} +PivotView.ERROR_0006_VIEWER_NOT_DEFINED=[cn_218] \u672a\u5b9a\u7fa9\u5fc5\u8981\u7684\u8f38\u51fa 'viewer' +JasperReport.ERROR_0006_OUTPUT_TYPE_NOT_SPECIFIED=[cn_39] \u672a\u63d0\u4f9b\u5831\u544a\u7684\u8f38\u51fa\u985e\u578b +Kettle.ERROR_0018_META_REPOSITORY_NOT_POPULATED=[cn_332] \u7121\u6cd5\u586b\u5165\u5f8c\u8a2d\u5b58\u653e\u5eab +JasperReport.DEBUG_REMOVE_EMPTRY_ROWS=[cn_92] removeEmptyRows \u662f {0} +JSRULE.ERROR_0003_EXECUTION_FAILED=[cn_89] JavaScript \u898f\u5247\u57f7\u884c\u5931\u6557 +MDXBaseComponent.ERROR_0004_VALIDATION_FAILED=[cn_111] \u7121\u6cd5\u9a57\u8b49 {0} +PivotView.ERROR_0005_MODE_NOT_DEFINED=[cn_219] \u672a\u5b9a\u7fa9\u5fc5\u8981\u7684\u8f38\u5165 'mode' +Email.DEBUG_SUBJECT=[cn_139] \u57f7\u884c\u4e3b\u65e8 {0} +SQLBaseComponent.ERROR_0002_CONNECTION_NOT_SPECIFIED=[cn_123] \u672a\u91dd\u5c0d {0} \u6307\u5b9a\u9023\u7dda\u8cc7\u8a0a +Kettle.ERROR_0011_TRANSFORMATION_PREPARATION_FAILED=[cn_335] \u7121\u6cd5\u91dd\u5c0d\u57f7\u884c\u6e96\u5099\u8f49\u63db +ContentOutputComponent.ERROR_0002_EMPTY_OUTPUT=[cn_338] \u6c92\u6709\u53ef\u4f9b\u5143\u4ef6\u5beb\u5165\u7684 html \u8cc7\u6599 +ContentRepositoryCleaner.INFO_0003=[cn_56] \u5929\u4e4b\u4e45\u3002 +ContentRepositoryCleaner.INFO_0002=[cn_57] \u500b\u6a94\u6848\u591a\u65bc +ContentRepositoryCleaner.INFO_0001=[cn_58] \u52d5\u4f5c\u6210\u529f\uff01\u5df2\u627e\u5230\u4e26\u522a\u9664 +Base.ERROR_0002_EXECUTION_FAILED=[cn_58] \u5143\u4ef6\u57f7\u884c\u5931\u6557 +JasperReport.DEBUG_REPORT_FILE_FOUND=[cn_22] \u5df2\u627e\u5230\u5831\u544a\u6a94\u6848 +Kettle.DEBUG_POPULATING_META=[cn_340] \u6b63\u5728\u586b\u5165 meta-repository +JasperReport.ERROR_0002_IMAGE_DIRECTORY_INVALID=[cn_64] \u5f71\u50cf\u76ee\u9304\u662f Null\uff0c\u7121\u6cd5\u7e7c\u7e8c... +JFreeReport.DEBUG_OUTPUT_TYPE=[cn_196] \u8f38\u51fa\u985e\u578b\u662f {0} +CATEGORYSETCOLL.USER_DEBUG_REPORT_INITIALIZED=[cn_235] \u5831\u544a\u5df2\u521d\u59cb\u5316 +BIRT.ERROR_0002_REPORT_DEFINITION_NOT_SPECIFIED=[cn_12] \u672a\u5b9a\u7fa9\u5831\u544a\u5b9a\u7fa9 +PIESETCOLL.USER_DEBUG_REPORT_INITIALIZED=[cn_342] \u5831\u544a\u5df2\u521d\u59cb\u5316 +JasperReport.ERROR_0010_UNABLE_TO_COMPILE=[cn_25] \u7121\u6cd5\u5c07\u5831\u544a {0} \u7de8\u8b6f\u5230\u6a94\u6848 {1} +PivotView.ERROR_0007_TITLE_NOT_DEFINED=[cn_217] \u672a\u5b9a\u7fa9\u5fc5\u8981\u7684\u8f38\u51fa 'title' +SQLExecute.USER_SUCCESS=[cn_61] \u6210\u529f +JasperReport.ERROR_0012_REPORT_DESIGN_NO_LOADABLE=[cn_57] \u7121\u6cd5\u5f9e\u6a94\u6848\u8f09\u5165\u5831\u544a\u8a2d\u8a08 +Email.ERROR_0013_CONFIG_FILE_INVALID=[cn_106] \u7121\u6cd5\u8f09\u5165\u8a2d\u5b9a\u6a94 +TestComponent.ERROR_0003_PARAMETER_NOT_MAP=[cn_99] \u7121\u6548\u7684\u53c3\u6578 - "{0}" \u4e0d\u662f Map +JasperReport.DEBUG_COMPILING_REPORT=[cn_28] \u5831\u544a\u9700\u8981\u7de8\u8b6f... +Email.DEBUG_EMAIL_SUCCESS=[cn_86] \u5df2\u6210\u529f\u50b3\u9001\u90f5\u4ef6\u3002 +JFreeReport.ERROR_0022_DATA_INPUT_INVALID_OBJECT=[cn_198] \u8cc7\u6599\u7269\u4ef6\u4e0d\u662f IPentahoResultSet \u7269\u4ef6 +ContentOutputComponent.ERROR_0001_CONTENTOUTPUT_NOT_DEFINED=[cn_351] \u672a\u5b9a\u7fa9\u5fc5\u8981\u7684\u8f38\u5165 'CONTENTOUTPUT' +Kettle.DEBUG_DISCONNECTING=[cn_353] \u6b63\u5728\u4e2d\u65b7\u9023\u7dda +Kettle.DEBUG_CONNECTING=[cn_358] \u6b63\u5728\u9023\u7dda\u5230\u5b58\u653e\u5eab +Kettle.ERROR_0001_SERVER_SETTINGS_NOT_SET=[cn_359] \u5c1a\u672a\u8a2d\u5b9a Kettle \u5b58\u653e\u5eab\u8a2d\u5b9a +Kettle.DEBUG_FINDING_STEP_IMPORTER=[cn_360] \u6b63\u5728\u5c0b\u627e\u6b65\u9a5f importHandler +ContentOutputComponent.ERROR_0004_CONTENTOUTPUT_NULL=[cn_362] \u9810\u671f\u7684\u8f38\u5165 'CONTENTOUTPUT' \u662f Null +ResultSetCompareComponent.ERROR_0006_RESULTSETS_ROWCOUNT_WRONG=[cn_363] \u7d50\u679c\u96c6\u5177\u6709\u4e0d\u540c\u7684\u8cc7\u6599\u5217\u6578\u76ee +PIESETCOLL.USER_ERROR_SERIES_NOT_COMPARABLE=[cn_365] #ERROR# +TestComponent.ERROR_0001_TEST_NODE_NOT_FOUND=[cn_105] \u627e\u4e0d\u5230 'test' \u7bc0\u9ede +Kettle.DEBUG_JOB_RUNNING=[cn_67] \u4f5c\u696d\u6b63\u5728\u57f7\u884c HelloWorld.USER_HELLO_WORLD_TEXT=[cn_125] \nHello World. {0}\n -BIRT.ERROR_0010_REPORT_COULD_NOT_BE_RUN=[cn_8] Error running report {0} -TestComponent.ERROR_0002_PARAMETER_MISSING=[cn_152] Invalid parameters - "{0}" not found -Email.DEBUG_TO_FROM=[cn_145] Execute to\={0}, from\={1} -Kettle.ERROR_0019_REPOSITORY_TYPE_FILES=[cn_368] RDBMS access to transformation not allowed when repository type is 'files'. -Kettle.ERROR_0003_TRANS_NOT_DEFINED=[cn_370] The transformation name is not specified on an input or provided as a resource -JasperReport.ERROR_0015_JDBC_DRIVER_LOAD_FAILED=[cn_30] Can not load JDBC driver -ContentOutputComponent.ERROR_0005_OUTPUT_CONTENT_ITEM=[cn_371] Could not obtain the ouput content item -Kettle.DEBUG_STARTING_TRANSFORMATION=[cn_372] Starting transformation -JFreeReport.ERROR_0025_INVALID_REPORT_CONFIGURATION_PARAMETERS=[cn_374] Invalid input for report configuration parameters. Must have at least 2 columns. -JSRULE.ERROR_0006_INVALID_JS_VARIABLE=[cn_69] Input "{0}" is an invalid javascript identifier because it has a "-" in it. -XQueryBaseComponent.ERROR_0003_OUTPUT_NOT_SPECIFIED=[cn_43] lookup-result output is not defined for {0} -BIRT.ERROR_0001_REPORT_TYPE_NOT_SPECIFIED=[cn_5] Report output type is not specified -UtilityComponent.ERROR_0003_ERROR_COPYING_PARAMETER=[cn_114] Error copying Parameter -Kettle.DEBUG_CREATING_RESULTSET_METADATA=[cn_380] Creating result set metadata -Kettle.ERROR_0008_ERROR_RUNNING=[cn_383] An unexpected error occurred running the transformation {0} -KettleSystemListener.ERROR_0003_PROPERTY_FILE_READ_FAILED=[cn_71] Unable to read "pentaho-solutions/system/kettle/kettle.properties" file\: -TestComponent.DEBUG_EXECUTING_TEST=[cn_78] Executing TestComponent -JFreeReport.ERROR_0007_COULD_NOT_PARSE=[cn_185] Could not parse report {0} -PivotView.ERROR_0009_QUERY_NOT_DEFINED=[cn_386] Required input 'query' is not defined -Base.DEBUG_VALIDATING_COMPONENT=[cn_75] Validating component for action {0} -SettingsPublisher.USER_ERROR_PUBLISH_FAILED=[cn_103] The System Settings publisher encountered errors\: -ResultSetCompareComponent.ERROR_0007_RESULTSETS_COLUMNCOUNT_WRONG=[cn_388] Results have different number of columns -BIRT.ERROR_0006_INVALID_OUTPUT_STREAM=[cn_1] Output stream for content was not provided -JasperReport.ERROR_0016_DATABASE_CONNECTION_FAILED=[cn_108] Error connecting to the database -Email.ERROR_0003_BODY_NOT_DEFINED=[cn_84] email body is not defined in either 'message-plain' or 'message-html' for {0} -Kettle.DEBUG_META_REPOSITORY=[cn_396] creating meta-repository -JFreeReport.ERROR_0012_CLASS_LOCATION_MISSING=[cn_199] class-location missing in component definition. -ContentOutputComponent.ERROR_0007_UNKNOWN_TYPE=[cn_397] Unknown input type ({0}) -Email.DEBUG_ADDING_ATTACHMENT=[cn_46] Adding attachment {0} -XQueryBaseComponent.ERROR_0006_EXECUTE_FAILED=[cn_110] Could not execute {0} -JasperReport.ERROR_0004_JDBC_CONNECTION_NOT_SPECIFIED=[cn_79] JDBC connection string not specified. -Email.ERROR_0006_NULL_BODY=[cn_102] 'message-plain' and 'message-html' are null for {0} -KettleSystemListener.ERROR_0002_JOB_ENTRY_LOAD_FAILED=[cn_77] Unable To initialize Job Entry Loader -KettleSystemListener.ERROR_0001_PLUGIN_LOAD_FAILED=[cn_77] Unable To Load Kettle Plugins from {0} -MDXBaseComponent.ERROR_0003_OUTPUT_NOT_SPECIFIED=[cn_134] lookup-result output is not defined for {0} -SettingsPublisher.USER_DESCRIPTION=[cn_68] Refresh all of the system settings from the documents in {0} -Email.ERROR_0012_FROM_NOT_DEFINED=[cn_153] 'from' address not defined -TestComponent.ERROR_0005_RESOURCE_NOT_LOADED=[cn_53] Resource could not be loaded\: {1} -Kettle.DEBUG_TRANSFORMATION_RUNNING=[cn_402] Transformation running -Kettle.DEBUG_FINDING_DIRECTORY=[cn_403] Finding directory -TestComponent.DEBUG_OUTPUT_DESCRIPTION=[cn_76] There is an output called {0} of type {1} -JasperReport.ERROR_0014_REPORT_EXECUTION_FAILED=[cn_69] Report execution failed -Kettle.DEBUG_PREPARING_TRANSFORMATION=[cn_409] Preparing transformation -ComponentBase.ERROR_0005_RESOURCE_PARAM_MISSING=[cn_411] The required resource "{0}" was not specified in the action-resources -SQLBaseComponent.DEBUG_RUNNING_QUERY=[cn_136] Running query - {0} -Email.ERROR_0014_AUTHENTICATION_FAILED=[cn_81] Email authentication failed -Base.DEBUG_VALIDATION_RESULT=[cn_94] execute validation\= -PIESETCOLL.USER_DEBUG_GROUPS_FINISHED=[cn_413] Groups finished -Template.ERROR_0001_TEMPLATE_NOT_DEFINED=[cn_100] Template not defined as input or resource -ComponentBase.ERROR_0006_COMPONENT_SETTING_PARAM_MISSING=[cn_416] The required setting "{0}" was not specified in the component-definition -MondrianModel.ERROR_0006_NO_DIMENSIONS=[cn_80] getInitialQuery()\: Cube has no dimensions\: {0} in {1} -Email.DEBUG_CC_BCC=[cn_72] Execute cc\={0}, bcc\={1} -CATEGORYSETCOLL.USER_DEBUG_ITEMS_ADVANCED=[cn_236] Items advanced +BIRT.ERROR_0010_REPORT_COULD_NOT_BE_RUN=[cn_8] \u57f7\u884c\u5831\u544a {0} \u6642\u767c\u751f\u932f\u8aa4 +TestComponent.ERROR_0002_PARAMETER_MISSING=[cn_152] \u7121\u6548\u7684\u53c3\u6578 - \u627e\u4e0d\u5230 "{0}" +Email.DEBUG_TO_FROM=[cn_145] \u57f7\u884c\u81f3={0}\uff0c\u81ea={1} +Kettle.ERROR_0019_REPOSITORY_TYPE_FILES=[cn_368] \u7576\u5b58\u653e\u5eab\u985e\u578b\u662f 'files' \u6642\uff0c\u4e0d\u5141\u8a31 RDBMS \u5b58\u53d6\u8f49\u63db\u3002 +Kettle.ERROR_0003_TRANS_NOT_DEFINED=[cn_370] \u8f49\u63db\u540d\u7a31\u672a\u5728\u8f38\u5165\u4e0a\u6307\u5b9a\u6216\u4ee5\u8cc7\u6e90\u5f62\u5f0f\u63d0\u4f9b +JasperReport.ERROR_0015_JDBC_DRIVER_LOAD_FAILED=[cn_30] \u7121\u6cd5\u8f09\u5165 JDBC \u9a45\u52d5\u7a0b\u5f0f +ContentOutputComponent.ERROR_0005_OUTPUT_CONTENT_ITEM=[cn_371] \u7121\u6cd5\u53d6\u5f97\u8f38\u51fa\u5167\u5bb9\u9805\u76ee +Kettle.DEBUG_STARTING_TRANSFORMATION=[cn_372] \u6b63\u5728\u555f\u52d5\u8f49\u63db +JFreeReport.ERROR_0025_INVALID_REPORT_CONFIGURATION_PARAMETERS=[cn_374] \u5831\u544a\u8a2d\u5b9a\u53c3\u6578\u7684\u8f38\u5165\u7121\u6548\u3002\u5fc5\u9808\u6709\u81f3\u5c11 2 \u500b\u8cc7\u6599\u884c\u3002 +JSRULE.ERROR_0006_INVALID_JS_VARIABLE=[cn_69] \u8f38\u5165 "{0}" \u662f\u7121\u6548\u7684 JavaScript \u8b58\u5225\u78bc\uff0c\u56e0\u70ba\u5b83\u5177\u6709 "-"\u3002 +XQueryBaseComponent.ERROR_0003_OUTPUT_NOT_SPECIFIED=[cn_43] \u672a\u91dd\u5c0d {0} \u5b9a\u7fa9 lookup-result \u8f38\u51fa +BIRT.ERROR_0001_REPORT_TYPE_NOT_SPECIFIED=[cn_5] \u672a\u6307\u5b9a\u5831\u544a\u8f38\u51fa\u985e\u578b +UtilityComponent.ERROR_0003_ERROR_COPYING_PARAMETER=[cn_114] \u8907\u88fd\u53c3\u6578\u6642\u767c\u751f\u932f\u8aa4 +Kettle.DEBUG_CREATING_RESULTSET_METADATA=[cn_380] \u6b63\u5728\u5efa\u7acb\u7d50\u679c\u96c6\u5f8c\u8a2d\u8cc7\u6599 +Kettle.ERROR_0008_ERROR_RUNNING=[cn_383] \u57f7\u884c\u8f49\u63db {0} \u6642\u767c\u751f\u975e\u9810\u671f\u7684\u932f\u8aa4 +KettleSystemListener.ERROR_0003_PROPERTY_FILE_READ_FAILED=[cn_71] \u7121\u6cd5\u8b80\u53d6 "pentaho-solutions/system/kettle/kettle.properties" \u6a94\u6848\uff1a +TestComponent.DEBUG_EXECUTING_TEST=[cn_78] \u6b63\u5728\u57f7\u884c TestComponent +JFreeReport.ERROR_0007_COULD_NOT_PARSE=[cn_185] \u7121\u6cd5\u5256\u6790\u5831\u544a {0} +PivotView.ERROR_0009_QUERY_NOT_DEFINED=[cn_386] \u672a\u5b9a\u7fa9\u5fc5\u8981\u7684\u8f38\u5165 'query' +Base.DEBUG_VALIDATING_COMPONENT=[cn_75] \u6b63\u5728\u9a57\u8b49\u52d5\u4f5c {0} \u7684\u5143\u4ef6 +SettingsPublisher.USER_ERROR_PUBLISH_FAILED=[cn_103] \u7cfb\u7d71\u8a2d\u5b9a\u767c\u884c\u8005\u9047\u5230\u932f\u8aa4\uff1a +ResultSetCompareComponent.ERROR_0007_RESULTSETS_COLUMNCOUNT_WRONG=[cn_388] \u7d50\u679c\u5177\u6709\u4e0d\u540c\u7684\u8cc7\u6599\u884c\u6578\u76ee +BIRT.ERROR_0006_INVALID_OUTPUT_STREAM=[cn_1] \u672a\u63d0\u4f9b\u5167\u5bb9\u7684\u8f38\u51fa\u4e32\u6d41 +JasperReport.ERROR_0016_DATABASE_CONNECTION_FAILED=[cn_108] \u9023\u7dda\u5230\u8cc7\u6599\u5eab\u6642\u767c\u751f\u932f\u8aa4 +Email.ERROR_0003_BODY_NOT_DEFINED=[cn_84] \u672a\u91dd\u5c0d {0} \u5728 'message-plain' \u6216 'message-html' \u4e2d\u5b9a\u7fa9\u96fb\u5b50\u90f5\u4ef6\u672c\u6587 +Kettle.DEBUG_META_REPOSITORY=[cn_396] \u6b63\u5728\u5efa\u7acb meta-repository +JFreeReport.ERROR_0012_CLASS_LOCATION_MISSING=[cn_199] \u5143\u4ef6\u5b9a\u7fa9\u4e2d\u7684 class-location \u907a\u5931\u3002 +ContentOutputComponent.ERROR_0007_UNKNOWN_TYPE=[cn_397] \u672a\u77e5\u7684\u8f38\u5165\u985e\u578b ({0}) +Email.DEBUG_ADDING_ATTACHMENT=[cn_46] \u6b63\u5728\u65b0\u589e\u9644\u4ef6 {0} +XQueryBaseComponent.ERROR_0006_EXECUTE_FAILED=[cn_110] \u7121\u6cd5\u57f7\u884c {0} +JasperReport.ERROR_0004_JDBC_CONNECTION_NOT_SPECIFIED=[cn_79] \u672a\u6307\u5b9a JDBC \u9023\u7dda\u5b57\u4e32\u3002 +Email.ERROR_0006_NULL_BODY=[cn_102] {0} \u7684 'message-plain' \u548c 'message-html' \u662f Null +KettleSystemListener.ERROR_0002_JOB_ENTRY_LOAD_FAILED=[cn_77] \u7121\u6cd5\u5c07\u4f5c\u696d\u9805\u76ee\u8f09\u5165\u5668\u521d\u59cb\u5316 +KettleSystemListener.ERROR_0001_PLUGIN_LOAD_FAILED=[cn_77] \u7121\u6cd5\u5f9e {0} \u8f09\u5165 Kettle \u5916\u639b\u7a0b\u5f0f +MDXBaseComponent.ERROR_0003_OUTPUT_NOT_SPECIFIED=[cn_134] \u672a\u91dd\u5c0d {0} \u5b9a\u7fa9 lookup-result \u8f38\u51fa +SettingsPublisher.USER_DESCRIPTION=[cn_68] \u5f9e {0} \u4e2d\u7684\u6587\u4ef6\u91cd\u65b0\u6574\u7406\u6240\u6709\u7cfb\u7d71\u8a2d\u5b9a +Email.ERROR_0012_FROM_NOT_DEFINED=[cn_153] \u672a\u5b9a\u7fa9 'from' \u4f4d\u5740 +TestComponent.ERROR_0005_RESOURCE_NOT_LOADED=[cn_53] \u7121\u6cd5\u8f09\u5165\u8cc7\u6e90\uff1a{1} +Kettle.DEBUG_TRANSFORMATION_RUNNING=[cn_402] \u8f49\u63db\u6b63\u5728\u57f7\u884c +Kettle.DEBUG_FINDING_DIRECTORY=[cn_403] \u6b63\u5728\u5c0b\u627e\u76ee\u9304 +TestComponent.DEBUG_OUTPUT_DESCRIPTION=[cn_76] \u6709\u4e00\u500b\u540d\u70ba {0} \u4e14\u985e\u578b\u70ba {1} \u7684\u8f38\u51fa +JasperReport.ERROR_0014_REPORT_EXECUTION_FAILED=[cn_69] \u5831\u544a\u57f7\u884c\u5931\u6557 +Kettle.DEBUG_PREPARING_TRANSFORMATION=[cn_409] \u6b63\u5728\u6e96\u5099\u8f49\u63db +ComponentBase.ERROR_0005_RESOURCE_PARAM_MISSING=[cn_411] \u672a\u5728 action-resources \u4e2d\u6307\u5b9a\u5fc5\u8981\u8cc7\u6e90 "{0}" +SQLBaseComponent.DEBUG_RUNNING_QUERY=[cn_136] \u6b63\u5728\u57f7\u884c\u67e5\u8a62 - {0} +Email.ERROR_0014_AUTHENTICATION_FAILED=[cn_81] \u96fb\u5b50\u90f5\u4ef6\u9a57\u8b49\u5931\u6557 +Base.DEBUG_VALIDATION_RESULT=[cn_94] \u57f7\u884c\u9a57\u8b49= +PIESETCOLL.USER_DEBUG_GROUPS_FINISHED=[cn_413] \u7fa4\u7d44\u5df2\u5b8c\u6210 +Template.ERROR_0001_TEMPLATE_NOT_DEFINED=[cn_100] \u7bc4\u672c\u672a\u5b9a\u7fa9\u70ba\u8f38\u5165\u6216\u8cc7\u6e90 +ComponentBase.ERROR_0006_COMPONENT_SETTING_PARAM_MISSING=[cn_416] \u672a\u5728 component-definition \u4e2d\u6307\u5b9a\u5fc5\u8981\u8a2d\u5b9a "{0}" +MondrianModel.ERROR_0006_NO_DIMENSIONS=[cn_80] getInitialQuery()\uff1a\u591a\u7dad\u8cc7\u6599\u96c6\u6c92\u6709\u7dad\u5ea6\uff1a{1} \u4e2d\u7684 {0} +Email.DEBUG_CC_BCC=[cn_72] \u57f7\u884c cc={0}\uff0cbcc={1} +CATEGORYSETCOLL.USER_DEBUG_ITEMS_ADVANCED=[cn_236] \u9805\u76ee\u5df2\u63a8\u9032 KettleSystemListener.ERROR_0001_STEP_LOAD_FAILED=[cn_84] Kettle Step_Load_Failed -PivotView.ERROR_0004_MDX_NOT_DEFINED=[cn_221] Required output 'mdx' is not defined -TestComponent.DEBUG_RESOURCE_DESCRIPTION=[cn_115] There is a resource called {0} of type {1} at location {2} -ResultSetCompareComponent.ERROR_0001_INPUT_RS1_UNDEFINED=[cn_420] Input name result-set-1 is undefined -ContentOutputComponent.ERROR_0006_MIME_TYPE_REQUIRED=[cn_422] 'mime-type' is required in component definition -MDXBaseComponent.ERROR_0002_CONNECTION_NOT_SPECIFIED=[cn_49] The connection information was not specified for {0} -MDXBaseComponent.ERROR_0008_NO_CONNECTION=[cn_426] Connection to data source is not valid -MondrianModel.ERROR_0003_NO_CUBES=[cn_86] getInitialQuery()\: Schema has no cubes\: {0} -TestComponent.DEBUG_INITIALIZING_TEST=[cn_55] Initializing TestComponent -JasperReport.DEBUG_LOADED_DESIGN=[cn_112] Loaded design with {0} parameters -MondrianModel.ERROR_0005_CUBE_NOT_FOUND=[cn_81] getInitialQuery()\: Specified cube not found\: {0} in {1} -Email.USER_ENTER_EMAIL_ADDRESS=[cn_44] Enter a destination email address\: -ResultSetCompareComponent.ERROR_0002_INPUT_RS2_UNDEFINED=[cn_431] Input name result-set-2 is undefined -BIRT.ERROR_0011_DIRECTORY_CREATION_FAILED=[cn_18] BIRT Initialization\: Directory {0} could not be created... report images may not be available. -Base.ERROR_0001_INVALID_SESSION=[cn_61] Invalid session -XQueryBaseComponent.ERROR_0007_FILE_NOT_FOUND=[cn_89] File not found\: {0} -ResultSetFlattenerComponent.ERROR_0002_INVALID_OUTPUT=[cn_435] The output parameter was not provided or is not valid -Email.DEBUG_HTML_MESSAGE=[cn_85] Execute messageHtml{0} -Template.ERROR_0002_OUTPUT_COUNT_WRONG=[cn_149] Expecting only one output, but got none or more than one +PivotView.ERROR_0004_MDX_NOT_DEFINED=[cn_221] \u672a\u5b9a\u7fa9\u5fc5\u8981\u7684\u8f38\u51fa 'mdx' +TestComponent.DEBUG_RESOURCE_DESCRIPTION=[cn_115] \u5728\u4f4d\u7f6e {2} \u6709\u4e00\u500b\u540d\u70ba {0} \u4e14\u985e\u578b\u70ba {1} \u7684\u8cc7\u6e90 +ResultSetCompareComponent.ERROR_0001_INPUT_RS1_UNDEFINED=[cn_420] \u672a\u5b9a\u7fa9\u8f38\u5165\u540d\u7a31 result-set-1 +ContentOutputComponent.ERROR_0006_MIME_TYPE_REQUIRED=[cn_422] 'mime-type' \u5728\u5143\u4ef6\u5b9a\u7fa9\u4e2d\u70ba\u5fc5\u8981\u9805\u76ee +MDXBaseComponent.ERROR_0002_CONNECTION_NOT_SPECIFIED=[cn_49] \u672a\u91dd\u5c0d {0} \u6307\u5b9a\u9023\u7dda\u8cc7\u8a0a +MDXBaseComponent.ERROR_0008_NO_CONNECTION=[cn_426] \u91dd\u5c0d\u8cc7\u6599\u4f86\u6e90\u7684\u9023\u7dda\u7121\u6548 +MondrianModel.ERROR_0003_NO_CUBES=[cn_86] getInitialQuery()\uff1a\u7db1\u8981\u6c92\u6709\u4efb\u4f55\u591a\u7dad\u8cc7\u6599\u96c6\uff1a{0} +TestComponent.DEBUG_INITIALIZING_TEST=[cn_55] \u6b63\u5728\u5c07 TestComponent \u521d\u59cb\u5316 +JasperReport.DEBUG_LOADED_DESIGN=[cn_112] \u5df2\u642d\u914d {0} \u53c3\u6578\u8f09\u5165\u8a2d\u8a08 +MondrianModel.ERROR_0005_CUBE_NOT_FOUND=[cn_81] getInitialQuery()\uff1a\u627e\u4e0d\u5230\u6307\u5b9a\u7684\u591a\u7dad\u8cc7\u6599\u96c6\uff1a{1} \u4e2d\u7684 {0} +Email.USER_ENTER_EMAIL_ADDRESS=[cn_44] \u8f38\u5165\u76ee\u7684\u5730\u96fb\u5b50\u90f5\u4ef6\u5730\u5740\uff1a +ResultSetCompareComponent.ERROR_0002_INPUT_RS2_UNDEFINED=[cn_431] \u672a\u5b9a\u7fa9\u8f38\u5165\u540d\u7a31 result-set-2 +BIRT.ERROR_0011_DIRECTORY_CREATION_FAILED=[cn_18] BIRT \u521d\u59cb\u5316\uff1a\u7121\u6cd5\u5efa\u7acb\u76ee\u9304 {0}... \u5831\u544a\u5f71\u50cf\u53ef\u80fd\u7121\u6cd5\u4f7f\u7528\u3002 +Base.ERROR_0001_INVALID_SESSION=[cn_61] \u7121\u6548\u7684\u5de5\u4f5c\u968e\u6bb5 +XQueryBaseComponent.ERROR_0007_FILE_NOT_FOUND=[cn_89] \u627e\u4e0d\u5230\u6a94\u6848\uff1a{0} +ResultSetFlattenerComponent.ERROR_0002_INVALID_OUTPUT=[cn_435] \u8f38\u51fa\u53c3\u6578\u672a\u63d0\u4f9b\u6216\u7121\u6548 +Email.DEBUG_HTML_MESSAGE=[cn_85] \u57f7\u884c messageHtml{0} +Template.ERROR_0002_OUTPUT_COUNT_WRONG=[cn_149] \u50c5\u9810\u671f\u4e00\u500b\u8f38\u51fa\uff0c\u4f46\u6c92\u6709\u6536\u5230\u8f38\u51fa\u6216\u6536\u5230\u8d85\u904e\u4e00\u500b\u8f38\u51fa +ABSTRACTCHARTEXPRESSION.ERROR_0007_ERROR_RETRIEVING_PLOT_IMAGE=\u64f7\u53d6\u7e6a\u5716\u80cc\u666f\u5f71\u50cf\u6642\u767c\u751f\u932f\u8aa4\u3002 +ABSTRACTCHARTEXPRESSION.ERROR_0008_ERROR_IMAGEURL_FIELD_DEPRECATION=\u91dd\u5c0d\u5728 imageurl-field \u6a19\u8a18\u4e2d\u4f7f\u7528\u5716\u8868\u904b\u7b97\u5f0f\u7684\u652f\u63f4\u5df2\u6dd8\u6c70\uff0c\u4e14\u5df2\u7121\u6cd5\u6b63\u5e38\u904b\u4f5c\u3002 +ABSTRACTCHARTEXPRESSION.ERROR_0009_ERROR_USE_DRAWABLE=\u8b8a\u66f4\u60a8\u7684\u5831\u544a\u4ee5\u4f7f\u7528 drawable-field\uff0c\u4e26\u5728\u5716\u8868\u904b\u7b97\u5f0f\u4e2d\u5c07 useDrawable \u5c6c\u6027\u8a2d\u5b9a\u70ba true\u3002 +ABSTRACTCHARTEXPRESSION.ERROR_0010_ERROR_IMAGEURL_USE_DRAWABLE2=imageurl-field \u4e0d\u652f\u63f4\u5f9e\u904b\u7b97\u5f0f\u8f49\u8b6f\u5716\u8868\u3002\u8acb\u6539\u70ba\u4f7f\u7528 drawable-field\u3002 +CHART.USER_NO_DATA_AVAILABLE=\u6c92\u6709\u53ef\u8b93\u5716\u8868\u986f\u793a\u7684\u8cc7\u6599\u3002 +ANALYSISSAVER.ERROR_0000_UNKNOWN=\u767c\u751f\u672a\u77e5\u7684\u932f\u8aa4\uff0c\u7d50\u679c\u52d5\u4f5c\u5e8f\u5217\u53ef\u80fd\u7121\u6548 -- \u8acb\u6aa2\u67e5\u932f\u8aa4\u8a18\u9304 +ANALYSISSAVER.ERROR_0001_MISSING_ACTION_REFERENCE=\u5206\u6790\u4f86\u6e90\u7684\u8def\u5f91\u8207\u6a94\u6848\u540d\u7a31\u907a\u5931 (actionreference \u53c3\u6578)\u3002\u7121\u6cd5\u5132\u5b58\u3002 +ANALYSISSAVER.ERROR_0004_INVALID_ORIGIN_DOCUMENT=\u4f86\u6e90\u6587\u4ef6\u4e0d\u662f\u6709\u6548\u7684\u52d5\u4f5c\u5e8f\u5217\u3002\u7121\u6cd5\u5132\u5b58\u5206\u6790\u3002 +ANALYSISSAVER.ERROR_0006_SAVE_IS_DISABLED=\u5132\u5b58\u5df2\u505c\u7528\u3002 +BarLineChartExpression.DEBUG_FUNCTION_NOT_SUITABLE=\u4e0d\u61c9\u8a72\u5728 BarLineChartExpression.java \u4e2d\u547c\u53eb getChart\uff1b\u51fd\u5f0f\u4e0d\u9069\u7528\u65bc\u6b64\u985e\u5225\u3002 +BIRTReportComponent.ERROR_0016_ENGINE_NOT_INITIALIZED=BIRT \u7cfb\u7d71\u63a5\u807d\u7a0b\u5f0f\u672a\u5c07\u5831\u544a\u5f15\u64ce\u521d\u59cb\u5316\u3002\u9a57\u8b49 pentaho.xml \u5177\u6709\u4e0b\u5217\u9805\u76ee\u7684\u9805\u76ee (Entry)\uff1a +Base.CODE_COMPONENT_ID={0}\uff1a{1} +Base.CODE_LOG_ID={0}\uff1a\u5143\u4ef6\uff1a{1}\uff1a{2} +XYCHARTEXPRESSION.USER_NOT_A_DATASET=\u4e0d\u662f XYDataset \u7684\u57f7\u884c\u500b\u9ad4\uff0c\u6b63\u5728\u8df3\u904e\u5716\u8868\u5efa\u7acb\u3002 +CHART.WARN_PROPERTY_WILL_NOT_VALIDATE=\u4f7f\u7528\u7684\u5c6c\u6027 {0} \u5c07\u4e0d\u6703\u91dd\u5c0d pentaho-chart XML \u7db1\u8981\u9032\u884c\u9a57\u8b49\uff01 +CHART.WARN_DEPRECATED_CHILD=\u5143\u7d20 {0} \u5728\u6c92\u6709\u7236 {1} \u5143\u7d20\u7684\u60c5\u6cc1\u4e0b\u662f\u4e0d\u5141\u8a31\u7684\u3002 +ChartBeansSystemListener.ERROR_0001_CONFIG_MISSING=Chartbeans \u8a2d\u5b9a\u907a\u5931\uff1a\u672a\u5728\u4e0b\u5217\u4f4d\u7f6e\u4e2d\u5b9a\u7fa9\u5716\u8868\u5f15\u64ce\u985e\u5225\uff1a +ChartBeansSystemListener.ERROR_0002_PLUGINMANAGER_BEAN_MISSING=PluginManager\uff1a\u5df2\u8a3b\u518a\u5177\u6709\u8b58\u5225\u78bc {0} \u7684 Bean\uff0c\u4f46\u662f\u7121\u6cd5\u52a0\u4ee5\u64f7\u53d6\u3002 +ChartBeansSystemListener.ERROR_0003_CLASS_CREATION_PROBLEM=Chartbeans \u521d\u59cb\u5316\uff1a\u5c07\u985e\u5225\u5177\u73fe\u5316\u6642\u767c\u751f\u932f\u8aa4 +ChartBeansSystemListener.ERROR_0004_LOAD_FAILED=\u56b4\u91cd\u932f\u8aa4\uff1a\u7121\u6cd5\u8f09\u5165\u9810\u8a2d\u5716\u8868\u5916\u639b\u7a0b\u5f0f\u985e\u5225\u3002 +ChartComponent.ERROR_0001_CANT_WRITE_MAP=\u7121\u6cd5\u5beb\u5165\u5716\u8868\u5c0d\u61c9\uff1a{0} +ChartComponent.ERROR_0003_CANT_CREATE_TEMP_FILES=\u7121\u6cd5\u5efa\u7acb\u5fc5\u8981\u7684\u66ab\u5b58\u6a94 +ChartComponent.ERROR_0004_CANT_CREATE_IMAGE=\u7121\u6cd5\u5efa\u7acb\u5716\u8868\u5f71\u50cf\u3002 +ChartComponent.ERROR_0005_CANT_DOCUMENT_FROM_STRING=\u7121\u6cd5\u5f9e\u5b57\u4e32\u8b80\u53d6\u6587\u4ef6 +ChartComponent.ERROR_0006_PARAM_NOT_SET=\u672a\u8a2d\u5b9a\u5fc5\u8981\u7684\u53c3\u6578\uff1a{0} +ChartComponent.ERROR_0007_PARAM_VALUE_CANNOT_BE_NEGATIVE=\u91dd\u5c0d\u4e0b\u5217\u5716\u8868\u985e\u578b\uff0c{0} \u4e0d\u80fd\u5c0f\u65bc 0\uff1a{2} +ChartComponent.TOO_MANY_DATA_POINTS=\u8cc7\u6599\u9ede\u904e\u591a\u3002 +ChartComponent.MAX_ALLOWED_DATA_POINTS=\u55ae\u4e00\u5716\u8868\u4e0a\u6700\u591a\u53ef\u4ee5\u7e6a\u88fd {0} \u500b\u9ede\u3002 +ChartComponent.TOO_MANY_DATA_POINTS_HTML=\u5716\u8868\u8cc7\u6599\u67e5\u8a62\u50b3\u56de\u904e\u591a\u8cc7\u6599\u9ede\u3002 +ComponentBase.ERROR_0001_UNKNOWN_ACTION_TYPE=\u672a\u77e5\u7684\u52d5\u4f5c\u5b9a\u7fa9\u985e\u578b\uff1a{0} +ContentOutputComponent.ERROR_0008_CONTENT_OUTPUT_REQUIRED=\u672a\u5b9a\u7fa9\u8f38\u51fa 'content' +Email.ERROR_0010_INVALID_CONFIGURATION=\u8f09\u5165\u96fb\u5b50\u90f5\u4ef6\u8a2d\u5b9a\u6a94\u6642\u767c\u751f\u932f\u8aa4\uff1a{0} +Email.ERROR_0015_ATTACHMENT_FAILED=\u7121\u6cd5\u9644\u52a0\u5167\u5bb9\uff0c\u8acb\u6aa2\u67e5\u60a8\u91dd\u5c0d EmailComponent \u7684\u9644\u4ef6\u8f38\u5165 +IPreparedComponent.ERROR_0001_INVALID_CONNECTION_TYPE=\u932f\u8aa4\uff0c{0} \u52d5\u4f5c\u4e2d\u6709\u7121\u6548\u7684\u9023\u7dda\u985e\u578b +IPreparedComponent.ERROR_0002_CONNECTION_NOT_AVAILABLE=\u932f\u8aa4\uff0c{0} \u52d5\u4f5c\u4e2d\u7684\u5171\u7528\u9023\u7dda\u7121\u6cd5\u4f7f\u7528 +IPreparedComponent.ERROR_0003_INVALID_PARAMETER_STATE=\u932f\u8aa4\uff0c\u7121\u6548\u7684\u53c3\u6578\u72c0\u614b\uff1a\u5df2\u5728\u975e preparedcomponent \u4e2d\u6307\u5b9a PREPARELATER\u3002 +IPreparedComponent.ERROR_0004_NO_CONNECTION_INFO=\u672a\u6307\u5b9a\u4efb\u4f55\u9023\u7dda\u8cc7\u8a0a\uff0c\u6216\u7121\u6cd5\u91dd\u5c0d\u8cc7\u6599\u5eab\u5efa\u7acb\u9023\u7dda - {0} +JFreeReportAllContentComponent.WARN_NO_PRINTER_GIVEN=\u672a\u6307\u5b9a\u5370\u8868\u6a5f\u540d\u7a31\uff0c\u4e5f\u672a\u6307\u5b9a output-type\u3002 +JFreeReportAllContentComponent.DEBUG_EXECUTING_COMPONENT=\u6b63\u5728\u57f7\u884c\u5143\u4ef6 {0} +JFreeReportAllContentComponent.DEBUG_NO_COMPONENT=\u6c92\u6709\u4efb\u4f55\u5143\u4ef6\u3002 +JFreeReportAllContentComponent.WARN_HEADLESSMODE_ACTIVE=\u7121 UI \u6a21\u5f0f\u4f5c\u7528\u4e2d\uff0c\u56e0\u6b64 Swing \u9810\u89bd\u7121\u6cd5\u4f7f\u7528\u3002 +JFreeReportComponent.ERROR_0025_COULD_NOT_VALIDATE=\u9a57\u8b49\u52d5\u4f5c\u5931\u6557 +FreeReportSystemListener.ERROR_0001_JFREEREPORT_INITIALIZATION_FAILED=JFreeReport \u521d\u59cb\u5316\u5931\u6557\u3002 +JFreeReportParametersComponent.ERROR_0033_NO_REPORT_BOUND=\u6c92\u6709\u4efb\u4f55\u7e6b\u7d50\u7684 report-object\uff1a +JFreeReportParametersComponent.ERROR_0034_NO_REPORT_DEFINITION=\u6c92\u6709\u5831\u544a\u5b9a\u7fa9\u3002 +JFreeReportHtmlComponent.ERROR_0046_FAILED_TO_PROCESS_REPORT=\u7121\u6cd5\u8655\u7406\u5831\u544a +JFreeReportLoadComponent.ERROR_0035_COULD_NOT_CREATE_CLASSLOADER=\u7121\u6cd5\u5efa\u7acb\u985e\u5225\u8f09\u5165\u5668 +JFreeReportLoadComponent.WARN_COULD_NOT_CREATE_URL=\u7121\u6cd5\u91dd\u5c0d ReportGenerator \u5efa\u7acb URL +JFreeReportDataComponent.ERROR_0035_COULD_NOT_CREATE_CLASSLOADER=\u7121\u6cd5\u5efa\u7acb\u985e\u5225\u8f09\u5165\u5668 +JFreeReportHtmlComponent.DEBUG_045_PROCESSING_WITH_CONTENT_REPOS=\u6b63\u5728\u642d\u914d\u5167\u5bb9\u5b58\u653e\u5eab\u9032\u884c\u8655\u7406 +JFreeReportExcelComponent.ERROR_0037_ERROR_READING_REPORT_INPUT=\u8b80\u53d6\u5831\u544a\u8f38\u5165\u6642\u767c\u751f\u932f\u8aa4 +JFreeReportHtmlComponent.DEBUG_0044_PROCESSING_WITHOUT_CONTENT_REPOS=\u6b63\u5728\u6c92\u6709\u5167\u5bb9\u5b58\u653e\u5eab\u7684\u60c5\u6cc1\u4e0b\u9032\u884c\u8655\u7406 +JFreeReportDirectoryComponent.ERROR_0001_INVALID_DIR=DataDirectory \u7121\u6548\uff1a{0} +JFreeReportPdfComponent.ERROR_0001_WRITING_PDF_FAILED=\u5beb\u5165 PDF \u5931\u6557\uff1a{0} +JFreeReportGeneratorComponent.ERROR_0001_UNKNOWN_ACTION_TYPE=\u672a\u77e5\u7684\u52d5\u4f5c\u985e\u578b\uff1a{0} +JFreeReportXmlComponent.ERROR_0046_FAILED_TO_PROCESS_REPORT=\u7121\u6cd5\u8655\u7406\u5831\u544a\uff1a{0} +JFreeReportZipHtmlComponent.ERROR_0046_FAILED_TO_PROCESS_REPORT=\u7121\u6cd5\u8655\u7406\u5831\u544a\uff1a{0} +JasperReport.GETTING_REPORT_PATH=\u6b63\u5728\u53d6\u5f97\u5831\u544a\u8def\u5f91\uff1a{0} +JasperReport.ERROR_0017_UNABLE_TO_FACTORY_OBJECT=Factoring \u7269\u4ef6\u4e2d\u767c\u751f\u932f\u8aa4 +Kettle.ERROR_0024_BAD_LOGGING_LEVEL=\u8a18\u9304\u5c64\u7d1a {0} \u7121\u6548 +Kettle.ERROR_0025_TRANSFORMATION_NOT_LOADED=\u672a\u8f09\u5165\u8f49\u63db +Kettle.ERROR_0026_JOB_NOT_LOADED=\u672a\u8f09\u5165\u4f5c\u696d +Kettle.ERROR_0027_ERROR_INIT_STEP=\u627e\u4e0d\u5230\u8f49\u63db\u6b65\u9a5f {0} +Kettle.ERROR_0028_CUSTOMIZATION_FUNCITON_FAILED=\u81ea\u8a02\u51fd\u5f0f\u5931\u6557 +Kettle.ERROR_0029_ERROR_CONVERTING_EXECUTION_LOG=\u7121\u6cd5\u5256\u6790\u57f7\u884c\u8a18\u9304\u4e26\u7522\u751f HTML\uff1a{0} +Kettle.ERROR_0030_INVALID_ARGUMENT_MAPPING=\u91dd\u5c0d\u547d\u4ee4\u5217\u5f15\u6578\u7684\u5c0d\u61c9\u4e0d\u5b8c\u6574 +Kettle.ERROR_0031_NAME_ELEMENT_MISSING_FROM_MAPPING=\u5c0d\u61c9\u5143\u7d20\u300c\u5fc5\u9808\u300d\u5305\u542b [name] \u5143\u7d20 +Kettle.ERROR_0032_MAPPING_ELEMENT_MISSING_FROM_MAPPING=\u5c0d\u61c9\u5143\u7d20\u300c\u5fc5\u9808\u300d\u5305\u542b [mapping] \u5143\u7d20 +Kettle.ERROR_0033_MAPPING_NOT_FOUND_IN_ACTION_INPUTS=\u5728 action-inputs \u4e2d\u627e\u4e0d\u5230\u5c0d\u61c9 [{0}] +LineChartExpression.ERROR_0001_INVALID_LINE_WIDTH=\u7dda\u689d\u5bec\u5ea6\u4e0d\u80fd\u662f\u8ca0\u503c +HQLBaseComponent.DEBUG_RUNNING_QUERY=\u6b63\u5728\u57f7\u884c\u67e5\u8a62\uff1a{0} +HQLBaseComponent.ERROR_0001_CLASS_NAMES_INFO_NOT_SPECIFIED=\u672a\u6307\u5b9a\u985e\u5225\u540d\u7a31\u8cc7\u8a0a\u3002\u8acb\u900f\u904e Xaction XML \u4e2d\u7684 "classNames" \u6a19\u8a18\u6307\u5b9a\u985e\u5225\u540d\u7a31\u3002 +HQLBaseComponent.ERROR_0002_HIBERNATE_CONFIG_INFO_NOT_SPECIFIED=\u672a\u6307\u5b9a\u4f11\u7720\u8a2d\u5b9a\u8cc7\u8a0a\u3002\u8acb\u5728\u8cc7\u6e90\u5340\u6bb5\u4e2d\u6307\u5b9a\u4f11\u7720\u8a2d\u5b9a\u6a94\u3002 +HQLBaseComponent.ERROR_0003_CONNECTION_INFO_NOT_SPECIFIED=\u672a\u5b8c\u6574\u6307\u5b9a\u9023\u7dda\u8cc7\u8a0a\u3002\u672a\u6307\u5b9a\u985e\u5225\u540d\u7a31\u3001\u4f11\u7720\u8a2d\u5b9a\u6216\u5df2\u6e96\u5099\u7684\u5143\u4ef6\u3002 +HQLBaseComponent.ERROR_0004_QUERY_NOT_SPECIFIED=\u672a\u91dd\u5c0d {0} \u6307\u5b9a\u67e5\u8a62 +HQLBaseComponent.ERROR_0005_OUTPUT_NOT_SPECIFIED=\u672a\u91dd\u5c0d {0} \u5b9a\u7fa9 lookup-result \u8f38\u51fa +HQLBaseComponent.ERROR_0006_VALIDATION_FAILED=\u7121\u6cd5\u91dd\u5c0d {0} \u9a57\u8b49 XAction +HQLBaseComponent.ERROR_0007_QUERY_EXECUTION_FAILED=\u7121\u6cd5\u91dd\u5c0d {0} \u57f7\u884c\u67e5\u8a62 +HQLBaseComponent.ERROR_0008_COULD_NOT_RETRIEVE_CLASS_NAMES=\u7121\u6cd5\u64f7\u53d6 {0} \u7684\u985e\u5225\u540d\u7a31 +HQLBaseComponent.ERROR_0009_COULD_NOT_ESTABLISH_CONNECTION=\u7121\u6cd5\u5efa\u7acb\u8cc7\u6599\u5eab\u9023\u7dda +HQLBaseComponent.ERROR_00010_CATALOG_INFO_NOT_SPECIFIED=\u672a\u91dd\u5c0d {0} \u5728\u4f11\u7720\u8a2d\u5b9a\u4e2d\u6307\u5b9a\u76ee\u9304\u8cc7\u8a0a +HQLBaseComponent.ERROR_00011_INVALID_HQL_COMPONENT={0} \u7684 HQL \u5143\u4ef6\u7121\u6548 +HQLBaseComponent.ERROR_00012_EXECUTE_FAILED=\u7121\u6cd5\u57f7\u884c {0} +HQLBaseComponent.ERROR_00013_NO_CONNECTION=\u91dd\u5c0d\u8cc7\u6599\u4f86\u6e90\u7684\u9023\u7dda\u7121\u6548 +HQLBaseComponent.ERROR_00014_COULD_NOT_PREPARE_QUERY=\u7121\u6cd5\u91dd\u5c0d {0} \u6e96\u5099\u67e5\u8a62 +HQLBaseComponent.ERROR_00016_QUERY_NOT_SPECIFIED=\u672a\u6307\u5b9a\u67e5\u8a62 +PIESETCOLL.USER_ERROR_CATEGORY_NOT_COMPARABLE=#ERROR# +PentahoTableDataFactory.ERROR_0001_CLONE_SHOULD_NOT_FAIL=\u8907\u88fd\u54c1\u4e0d\u61c9\u8a72\u5931\u6557\u3002 +PentahoTableModel.ERROR_0001_GET_VALUE_AT=PentahoTableModel.GetValueAt() \u5931\u6557 +ReportUtils.ERROR_0036_PENTAHO_SYSTEM_NOT_OK=Pentaho \u7cfb\u7d71\u4e0d\u6b63\u5e38 +ResultSetCrosstabComponent.ERROR_0001_PIVOT_COLUMN_IS_REQUIRED=\u300c\u8981\u9032\u884c\u6a1e\u7d10\u5206\u6790\u8655\u7406\u7684\u8cc7\u6599\u884c\u300d\u662f\u5fc5\u8981\u9805\u76ee\u3002 +ResultSetCrosstabComponent.ERROR_0002_MEASURES_COLUMN_IS_REQUIRED=\u300c\u91cf\u503c\u8cc7\u6599\u884c\u300d\u662f\u5fc5\u8981\u9805\u76ee\u3002 +ResultSetCrosstabComponent.ERROR_0003_FORMAT_PARAMETERS_BAD=\u7121\u6548\u7684\u53c3\u6578 - +ResultSetCrosstabComponent.ERROR_0004_SORT_FORMAT_PARAMETERS_BAD=\u7121\u6548\u7684\u53c3\u6578 - +ResultSetCrosstabComponent.WARN_DEPRECATED=\u8b66\u544a - \u60a8\u6b63\u5728\u4f7f\u7528\u7684 crosstab \u6f14\u7b97\u6cd5\u7248\u672c\u6709\u5df2\u77e5\u932f\u8aa4\u3002 +SQLBaseComponent.DEBUG_RUNNING_QUERY_TIMEOUT=\u6b63\u5728\u57f7\u884c\u67e5\u8a62 - \u903e\u6642 [{1} \u79d2] - {0} +SQLBaseComponent.DEBUG_UPDATED_QUERY=\u5df2\u66f4\u65b0\u67e5\u8a62 {0} +SQLBaseComponent.ERROR_0008_UNSUPPORTED_CURSOR_TYPE=\u5617\u8a66\u5728\u4e0d\u652f\u63f4\u50c5\u9650\u8f49\u9001\u7d50\u679c\u96c6\u7684\u9023\u7dda\u4e0a\u57f7\u884c\u8a72\u52d5\u4f5c +SQLBaseComponent.WARN_FALL_BACK_TO_NONSCROLLABLE=\u5728 scrollable \u8a2d\u70ba true \u7684\u60c5\u6cc1\u4e0b\u9032\u884c\u67e5\u8a62\u5931\u6557\u3002\u6b63\u5728\u56de\u5fa9\u70ba\u50c5\u9650\u8f49\u9001\u7684\u975e\u5373\u6642\u7d50\u679c\u96c6\uff0c\u4e26\u518d\u6b21\u5617\u8a66\u67e5\u8a62\u3002 +SQLExecute.USER_FAILED=\u5931\u6557 +TestComponent.CODE_PRINT_DELIM=** +XQueryBaseComponent.ERROR_0009_ERROR_BUILDING_COLUMN_TYPES=\u5efa\u7f6e\u8cc7\u6599\u884c\u985e\u578b\u6642\u767c\u751f\u932f\u8aa4 +XQueryBaseComponent.ERROR_0010_ERROR_RUNNING_QUERY=\u57f7\u884c\u67e5\u8a62\u6642\u767c\u751f\u932f\u8aa4 +XQueryBaseComponent.ERROR_0011_ERROR_CREATING_TEMP_FILE=\u5efa\u7acb\u66ab\u5b58\u6a94\u6642\u767c\u751f\u932f\u8aa4 +XQueryBaseComponent.ERROR_0012_NO_CONNECTION=\u7121\u6cd5\u5efa\u7acb\u9023\u7dda {0} +XQueryBaseComponent.ERROR_0013_INVALID_ORDER_OF_OPERATION=\u7121\u6cd5\u5728\u586b\u5165\u7d50\u679c\u96c6\u5f8c\u8a2d\u5b9a maxRows\u3002 +AbstractGenerateStreamContentComponent.JFreeReport.ERROR_0038_NO_OUTPUT_DEFINED=\u672a\u5b9a\u7fa9\u4efb\u4f55\u8f38\u51fa\u3002 +AbstractGenerateContentComponent.JFreeReport.ERROR_0038_NO_REPORT_OBJECT_INPUT=\u6c92\u6709\u4efb\u4f55 'report-object' \u8f38\u5165\u53c3\u6578\u3002 +AbstractGenerateContentComponent.JFreeReport.ERROR_0040_YIELD_RATE_POSITIVE='yield-rate' \u5fc5\u9808\u662f\u975e\u96f6\u6b63\u503c +AbstractGenerateContentComponent.JFreeReport.ERROR_0041_YIELD_RATE_NUMERIC='yield-rate' \u5fc5\u9808\u662f\u6578\u503c +AbstractGenerateContentComponent.JFreeReport.ERROR_0042_PRIORITY_MUST_BE=\u512a\u5148\u9806\u5e8f\u5fc5\u9808\u662f 'normal'\u3001'lower'\u3001'lowest' \u5176\u4e2d\u4e4b\u4e00 +AbstractGenerateContentComponent.JFreeReport.ERROR_0043_NO_REPORT_FOR_ACTION=\u6c92\u6709\u52d5\u4f5c\u7684\u5831\u544a\u3002 +AbstractGenerateContentComponent.JFreeReport.ERROR_0044_UNABLE_T0_SET_THREAD_PRIORITY=\u7121\u6cd5\u8a2d\u5b9a thread-priority\u3002\u5831\u544a\u7a0b\u5e8f\u5c07\u6539\u70ba\u4f7f\u7528\u9810\u8a2d\u512a\u5148\u9806\u5e8f\u57f7\u884c\u3002 +XMLABaseComponent.ERROR_0001_CONNECTION_NOT_SPECIFIED=\u672a\u6307\u5b9a\u9023\u7dda URI +XMLABaseComponent.DEBUG_0005_DISCOVER_DATASOURCE_FOUND= +XMLABaseComponent.ERROR_0011_NO_EXECUTE_RESPONSE_ELEMENT=\u57f7\u884c\u7d50\u679c\u6c92\u6709 ExecuteResponse \u5143\u7d20 +XMLABaseComponent.ERROR_0012_NO_RESPONSE_ROOT_ELEMENT=\u57f7\u884c\u7d50\u679c\u6c92\u6709 root \u5143\u7d20 +XMLABaseComponent.ERROR_0015_NO_DISCOVER_RESPONSE_ELEMENT=\u63a2\u7d22\u7d50\u679c\u6c92\u6709 DiscoverResponse \u5143\u7d20 +XMLABaseComponent.ERROR_0016_NO_RESULT_RETURN_ELEMENT=\u63a2\u7d22\u7d50\u679c\u6c92\u6709 return \u5143\u7d20 +XMLABaseComponent.ERROR_0019_NO_RESULT_DISCOVER_RESPONSE=\u63a2\u7d22\u7d50\u679c\u6c92\u6709 DiscoverResponse/return \u5143\u7d20 +XMLABaseComponent.ERROR_0020_NO_RESULT_DISCOVER_RETURN_ROOT=\u63a2\u7d22\u7d50\u679c\u6c92\u6709 DiscoverResponse/return/root \u5143\u7d20 +XMLABaseComponent.ERROR_0021_NO_DISCOVER_RESPONSE_ROW=\u63a2\u7d22\u7d50\u679c\u6c92\u6709 DiscoverResponse/return/root/row \u5143\u7d20 +XMLABaseComponent.ERROR_0022_NO_PROVIDER_NAME_ELEMENT=\u63a2\u7d22\u7d50\u679c\u5177\u6709\u7a7a\u7684 DiscoverResponse/return/root/row/ProviderName \u5143\u7d20 +XMLABaseComponent.ERROR_0023_CANNOT_DETERMINE_PROVIDER=\u5224\u65b7\u4f86\u81ea\u4e0b\u5217\u4f4d\u7f6e\u7684\u63d0\u4f9b\u8005\u6642\u767c\u751f\u932f\u8aa4\uff1a +XMLABaseComponent.ERROR_0025_NO_RETURN_DISCOVER_ELEMENT=\u63a2\u7d22\u7d50\u679c\u6c92\u6709 return \u5143\u7d20 +XMLABaseComponent.ERROR_0026_NO_ROOT_DISCOVER_ELEMENT=\u63a2\u7d22\u7d50\u679c\u6c92\u6709 root \u5143\u7d20 +XMLABaseComponent.ERROR_0002_USER_NOT_SPECIFIED=\u672a\u6307\u5b9a\u4f7f\u7528\u8005 +XMLABaseComponent.ERROR_0010_NO_DATASOURCE_NAME=\u6c92\u6709\u4f86\u81ea\u63a2\u7d22\u8cc7\u6599\u4f86\u6e90\u7684 DataSourceName +XMLABaseComponent.DEBUG_0009_DETERMINE_PROVIDER=\u4f86\u81ea dataSourceString \u7684 determineProvider\uff1a +XMLABaseComponent.DEBUG_0011_MICROSOFT_PROVIDER=\u63d0\u4f9b\u8005\u662f Microsoft +XMLABaseComponent.ERROR_0003_PASSWORD_NOT_SPECIFIED=\u672a\u6307\u5b9a\u5bc6\u78bc +XMLABaseComponent.DEBUG_0004_DISCOVER_DATASOURCE_SET=\u5df2\u8a2d\u5b9a\u63a2\u7d22\u8cc7\u6599\u4f86\u6e90\uff1a +XMLABaseComponent.ERROR_0017_NO_RESULT_ROOT_ELEMENT=\u63a2\u7d22\u7d50\u679c\u6c92\u6709 root \u5143\u7d20 +XMLABaseComponent.ERROR_0018_NOT_A_DISCOVER_RESPONSE=\u4e0d\u662f DiscoverResponse \u5143\u7d20\u3002\u5148\u524d\u662f\uff1a +XMLABaseComponent.ERROR_0027_NO_DISCOVER_ROW_ELEMENT=\u63a2\u7d22\u7d50\u679c\u6c92\u6709 row \u5143\u7d20 +XMLABaseComponent.ERROR_0004_CATALOG_NOT_SPECIFIED=\u672a\u6307\u5b9a\u76ee\u9304 +XMLABaseComponent.ERROR_0005_QUERY_NOT_SPECIFIED=\u672a\u6307\u5b9a\u67e5\u8a62 +XMLABaseComponent.ERROR_0023_NO_DATASOURCE_GIVEN=\u672a\u6307\u5b9a\u4efb\u4f55\u7528\u4f86\u5224\u65b7 XML/A OLAP \u63d0\u4f9b\u8005\u7684\u8cc7\u6599\u4f86\u6e90 +XMLABaseComponent.ERROR_0006_OUTPUT_NOT_SPECIFIED=\u672a\u6307\u5b9a\u8f38\u51fa +XMLABaseComponent.ERROR_0013_NO_DISCOVER_RESPONSE=\u63a2\u7d22\u7d50\u679c\u6c92\u6709 DiscoverResponse \u5143\u7d20 +XMLABaseComponent.ERROR_0024_MALFORMED_DATASOURCE=\u91dd\u5c0d\u5224\u65b7 XML/A \u63d0\u4f9b\u8005\uff0c\u6307\u5b9a\u7684\u8cc7\u6599\u4f86\u6e90\u683c\u5f0f\u4e0d\u6b63\u78ba +XMLABaseComponent.ERROR_0024_UNSUPPORTED_PROVIDER=\u91dd\u5c0d\u5224\u65b7 XML/A \u63d0\u4f9b\u8005\uff0c\u63d0\u4f9b\u7684\u662f\u975e\u9810\u671f\u7684\u8cc7\u6599\u4f86\u6e90 +XMLABaseComponent.ERROR_0007_VALIDATION_FAILED=\u672a\u77e5\u7684\u9a57\u8b49\u932f\u8aa4 +XMLABaseComponent.ERROR_0008_NO_RESOURCE_MAP=\u6c92\u6709\u4f86\u81ea\u63a2\u7d22\u8cc7\u6599\u4f86\u6e90\u7684\u8cc7\u6e90\u5c0d\u61c9 +XMLABaseComponent.ERROR_0009_NO_PROVIDER_NAME=\u6c92\u6709\u4f86\u81ea\u63a2\u7d22\u8cc7\u6599\u4f86\u6e90\u7684 ProviderName +XMLABaseComponent.DEBUG_0001_PROVIDER_ID=\u63d0\u4f9b\u8005\u8b58\u5225\u78bc\uff1a +XMLABaseComponent.DEBUG_0002_DATASOURCE_NAME=DataSourceName\uff1a +XMLABaseComponent.DEBUG_0003_DATASOURCE_INFO=DataSourceInfo\uff1a +XMLABaseComponent.DEBUG_0006_DISCOVER_REQUEST=\u91dd\u5c0d\u4e0b\u5217\u9805\u76ee\u7684\u63a2\u7d22\u8981\u6c42\uff1a +XMLABaseComponent.DEBUG_0007_DISCOVER_RESPONSE=\u91dd\u5c0d\u4e0b\u5217\u9805\u76ee\u7684\u63a2\u7d22\u56de\u61c9\uff1a +XMLABaseComponent.ERROR_0014_NO_PROVIDER_SPEC=\u4e0d\u662f\u6709\u6548\u7684\u63d0\u4f9b\u8005\u898f\u683c +XMLABaseComponent.DEBUG_0008_FOUND_PROVIDER=\u627e\u5230\u5177\u6709\u4e0b\u5217\u503c\u7684 ProviderName\uff1a +XMLABaseComponent.DEBUG_0009_SAP_PROVIDER=\u63d0\u4f9b\u8005\u662f SAP +XMLABaseComponent.DEBUG_0010_MONDRIAN_PROVIDER=\u63d0\u4f9b\u8005\u662f Mondrian +XMLABaseComponent.DEBUG_0012_ESSBASE_PROVIDER=\u63d0\u4f9b\u8005\u662f Essbase +VersionCheck.VERSION_CHECK_DISABLED=\u5df2\u505c\u7528\u7248\u672c\u6aa2\u67e5\u3002 +MQLRelationalDataComponent.ERROR_0001_QUERY_XML_EMPTY=\u91dd\u5c0d {0} \u52d5\u4f5c\u7684 MQL \u67e5\u8a62 XML \u662f Null\u3002 +MQLRelationalDataComponent.WARN_0001_NO_DIALECT_DETECTED=\u91dd\u5c0d\u8cc7\u6599\u5eab\u985e\u578b {0} \u672a\u5075\u6e2c\u5230\u4efb\u4f55\u65b9\u8a00\u3002 +MQLRelationalDataComponent.WARN_0002_DIALECT_EXCEPTION=\u641c\u5c0b\u6709\u6548\u65b9\u8a00\u6642\u767c\u751f\u4f8b\u5916\u72c0\u6cc1 +MQLRelationalDataComponent.DEBUG_DISPLAY_MQL=MQL \u67e5\u8a62 XML\uff1a{0} +MQLRelationalDataComponent.DEBUG_DISPLAY_SQL=\u5df2\u5f9e MQL \u67e5\u8a62\u7522\u751f SQL\uff1a{0} +MondrianSystemListener.ERROR_0001_PROPERTY_SET_FAILED=\u7121\u6cd5\u8a2d\u5b9a Mondrian \u5c6c\u6027 +MondrianSystemListener.ERROR_0002_PROPERTY_FILE_READ_FAILED=\u7121\u6cd5\u8b80\u53d6 Mondrian \u5c6c\u6027\u6a94 {0} +MondrianSystemListener.PROPERTY_FILE_LOADED=\u5df2\u6210\u529f\u8f09\u5165 Mondrian \u5c6c\u6027\u6a94 {0} +MondrianSystemListener.PROPERTY_FILE_NOT_FOUND=\u627e\u4e0d\u5230 Mondrian \u5c6c\u6027\u6a94 {0} +ReportContentLocation.ERROR_0001_NO_ITEM=\u6c92\u6709\u4efb\u4f55\u5df2\u77e5\u7684\u6b64\u985e\u9805\u76ee\uff1a{0} +ReportContentLocation.ERROR_0002_CANT_CREATE_CONTENT_LOCATION=\u7121\u6cd5\u5efa\u7acb content-location\uff1a{0} +ReportContentLocation.GENERATED_REPORT_CONTENT=\u7522\u751f\u7684\u5831\u544a\u5167\u5bb9 +MondrianCatalogPublisher.ERROR_0005_PUBLISH_EXCEPTION=\u767c\u884c\u6642\u767c\u751f\u4f8b\u5916\u72c0\u6cc1 +MondrianCatalogHelper.WARN_SKIPPING_DATASOURCE_DEF=\u8b66\u544a\uff0cOLAP \u8cc7\u6599\u4f86\u6e90 {0} \u7121\u6cd5\u4f9b\u5206\u6790\u6aa2\u8996\u4f7f\u7528\uff0c\u8cc7\u6599\u4f86\u6e90\u5fc5\u9808\u4ee5 vfs \u65b9\u6848\u958b\u59cb\uff1aURL +MondrianCatalogHelper.WARN_PARSE_NULL_INPUT=parseDataSources: Null \u8f38\u5165 +MondrianCatalogHelper.WARN_NO_CATALOG_DATASOURCE_INFO=\u6c92\u6709\u9069\u7528\u65bc {0} \u76ee\u9304\u7684 DataSourceInfo\u3002 +MondrianCatalogHelper.ERROR_0001_INVALID_DATASOURCE_CONFIG=dataSourcesConfig {0} \u4e0d\u662f\u6709\u6548\u7684 URL \u6216\u4e0d\u5b58\u5728 +MondrianCatalogHelper.ERROR_0002_FAILED_TO_PARSE_DATASOURCE_CONFIG=\u7121\u6cd5\u5256\u6790\u8cc7\u6599\u4f86\u6e90\u8a2d\u5b9a {0} +MondrianCatalogHelper.ERROR_0003_INSUFFICIENT_PERMISSION=\u6b0a\u9650\u4e0d\u8db3 +MondrianCatalogHelper.ERROR_0004_ALREADY_EXISTS=\u5df2\u5b58\u5728 +MondrianCatalogHelper.ERROR_0005_RESOURCE_NOT_AVAILABLE=\u8a72\u8cc7\u6e90\u5728\u6a94\u6848\u7cfb\u7d71\u4e2d\u7121\u6cd5\u4f7f\u7528 +MondrianCatalogHelper.ERROR_0006_IO_PROBLEM=IO \u554f\u984c +MondrianCatalogHelper.ERROR_0007_FILE_NOT_FOUND=\u627e\u4e0d\u5230\u6a94\u6848 +MondrianCatalogHelper.ERROR_0008_ERROR_OCCURRED=\u767c\u751f\u932f\u8aa4 +MondrianCatalogHelper.ERROR_0009_WHILE_PARSING_CATALOG=\u5256\u6790\u985e\u5225\u76ee\u9304 {0} \u6642 +MondrianCatalogHelper.ERROR_0010_PATH_NOT_FOUND=\u627e\u4e0d\u5230\u8def\u5f91 {0} +MondrianCatalogHelper.ERROR_0011_REPOSITORY_ERROR={0} \u4f3c\u4e4e\u5b58\u5728\u65bc\u78c1\u789f\u4e0a\uff0c\u4f46\u5c1a\u672a\u5b58\u5728\u65bc DB \u5b58\u653e\u5eab\u4e2d\uff1b\u8acb\u91cd\u65b0\u6574\u7406\u5b58\u653e\u5eab +MondrianCatalogHelper.ERROR_0012_FILESYSTEM_PROBLEM=\u6a94\u6848\u7cfb\u7d71\u767c\u751f\u554f\u984c +MondrianCatalogHelper.ERROR_0013_FAILED_TO_LOAD_SCHEMA=\u7121\u6cd5\u8f09\u5165\u7db1\u8981 {0} +MondrianCatalogHelper.ERROR_0014_SOLUTION_REPOSITORY_REQUIRED=\u6b64\u4f5c\u696d\u9700\u8981\u65b9\u6848\u5b58\u653e\u5eab\u3002 +MondrianCatalogHelper.ERROR_0015_CATALOG_NOT_FOUND=\u627e\u4e0d\u5230\u76ee\u9304 {0} +MondrianCatalogHelper.ERROR_0016_REMOVE_SOLUTION_DEFS_ONLY=\u53ea\u80fd\u79fb\u9664\u65b9\u6848\u5b58\u653e\u5eab\u578b\u76ee\u9304 {0} +MondrianCatalogHelper.ERROR_0017_UNABLE_TO_FACTORY_OBJECT=Factoring \u7269\u4ef6\u4e2d\u767c\u751f\u932f\u8aa4 +MondrianCatalogHelper.ERROR_0018_IMPORT_SCHEMA_ERROR=\u63d0\u4f9b\u7684\u6a94\u6848\u4f3c\u4e4e\u4e0d\u662f\u6709\u6548\u7684 Mondrian \u7db1\u8981\u3002 +MondrianCatalogHelper.ERROR_0019_FAILED_TO_FLUSH=\u7121\u6cd5\u6392\u6e05\u7db1\u8981 {0} +MondrianCatalogPublisher.ERROR_0006_UNABLE_TO_FACTORY_OBJECT=\u7121\u6cd5\u5c0d\u7269\u4ef6\u9032\u884c\u8655\u7406\u7ad9\u8655\u7406 {0} +MondrianCatalogPublisher.ERROR_0001_JNDI_NAMING_ERROR=\u627e\u4e0d\u5230 JNDI \u9805\u76ee {0} +MondrianCatalogPublisher.ERROR_0002_EXCEPTION_OCCURRED=\u767c\u751f\u4f8b\u5916\u72c0\u6cc1 +OpenFlashChartComponent.ERROR_0001_CANT_DOCUMENT_FROM_STRING=\u7121\u6cd5\u5256\u6790\u5716\u8868\u5c6c\u6027 +OpenFlashChartComponent.ERROR_0002_CHART_DEFINITION_NOT_FOUND=\u627e\u4e0d\u5230\u5716\u8868\u5b9a\u7fa9 +PentahoOFC4JChartHelper.ERROR_0001_FACTORY_INIT=\u7121\u6cd5\u91dd\u5c0d\u5716\u8868\u985e\u578b {0} \u627e\u5230\u8655\u7406\u7ad9 {1} +PentahoOFC4JChartHelper.WARN_NO_CHART_FACTORY_PROPERTIES_BUNDLE=\u627e\u4e0d\u5230\u4efb\u4f55\u5716\u8868\u8655\u7406\u7ad9\u5c6c\u6027\u7d44\u5408 +PentahoOFC4JChartHelper.WARN_NO_CHART_FACTORY_PROPERTIES=\u5f9e\u65b9\u6848\u8f09\u5165\u5716\u8868\u8655\u7406\u7ad9\u5c6c\u6027\u6642\u64f2\u56de FileNotFoundException +PentahoOFC4JChartHelper.WARN_BAD_CHART_FACTORY_PROPERTIES=\u5f9e\u65b9\u6848\u8f09\u5165\u5716\u8868\u8655\u7406\u7ad9\u5c6c\u6027\u6642\u64f2\u56de IOException +DotChartFactory.ERROR_0001_XY_COLUMN_COUNT=XY \u8cc7\u6599\u884c\u8a08\u6578\u5c0f\u65bc 2 +BubbleChartFactory.ERROR_0001_XYZ_COLUMN_COUNT=XYZ \u8cc7\u6599\u884c\u8a08\u6578\u5c0f\u65bc 3 +AbstractChartFactory.ERROR_0001_ROW_COUNT=\u8cc7\u6599\u5217\u8a08\u6578\u5c0f\u65bc 1 +AbstractChartFactory.ERROR_0002_COLUMN_COUNT=\u8cc7\u6599\u884c\u8a08\u6578\u5c0f\u65bc 1 +AbstractChartFactory.ERROR_0003_INVALID_TYPE=\u7d50\u679c\u96c6\u5305\u542b\u975e\u6578\u503c +MetadataQueryComponent.ERROR_0001_NO_EXECUTOR=\u7121\u6cd5\u91dd\u5c0d\u5be6\u9ad4\u985e\u578b {0} \u5efa\u7acb\u67e5\u8a62\u57f7\u884c\u7a0b\u5f0f +MondrianOneToOneUserRoleListMapper.ERROR_001_NO_CORRESPONDENCE=\u5b58\u53d6\u906d\u62d2\uff0c\u56e0\u70ba\u6b64\u4f7f\u7528\u8005\u7684\u89d2\u8272\u672a\u5c0d\u61c9\u5230\u6240\u8981\u6c42 Mondrian \u7db1\u8981\u4e2d\u7684\u4efb\u4f55\u89d2\u8272\u3002 +ScriptableCondition.ERROR_0001_ENGINE_NOT_AVAILABLE=\u91dd\u5c0d\u689d\u4ef6\u5f0f\u8981\u6c42\u7684\u6307\u4ee4\u78bc\u5f15\u64ce {0} \u7121\u6cd5\u4f7f\u7528\u3002 +ScriptableCondition.INFO_DEFAULT_RESULT_RETURNED=\u6ce8\u610f - \u6307\u4ee4\u78bc\u689d\u4ef6\u6c92\u6709\u53ef\u7406\u89e3\u7684\u7d50\u679c - \u5df2\u4f7f\u7528\u9810\u8a2d\u50b3\u56de\u3002 +ScriptableCondition.INFO_IGNORED_INPUT=\u8f38\u5165 {0} \u6709\u6e1b\u865f - \u6b63\u5728\u5ffd\u7565\u3002 +ActionInvoker.ERROR_0001_NO_EE_LICENSE=\u7121\u6cd5\u5728\u6c92\u6709 EE \u6388\u6b0a\u7684\u60c5\u6cc1\u4e0b\u5f9e\u9060\u7aef\u53eb\u7528\u52d5\u4f5c +ActionInvoker.ERROR_0004_ACTION_FAILED=\u7121\u6cd5\u57f7\u884c\u52d5\u4f5c "{0}" +ActionInvoker.ERROR_0005_ACTION_NULL=\u52d5\u4f5c\u662f Null\uff0c\u7121\u6cd5\u53eb\u7528 +ActionInvoker.ERROR_0006_MAP_NULL=\u7121\u6cd5\u5728\u5c0d\u61c9\u662f Null \u7684\u60c5\u6cc1\u4e0b\u53eb\u7528\u52d5\u4f5c +ActionInvoker.ERROR_0007_RMEOTE_ENTPOINT_FAILURE=\u7121\u6cd5\u57f7\u884c\u9060\u7aef\u7aef\u9ede "{0}"\uff1a{1} +ActionInvoker.ERROR_0008_MAP_NULL_CANT_RETURN_SP=\u5c0d\u61c9\u662f Null\uff0c\u7121\u6cd5\u50b3\u56de\u4e32\u6d41\u63d0\u4f9b\u8005 +ActionInvoker.ERROR_0010_CANNOT_GET_REPO_FILE=\u7121\u6cd5\u53d6\u5f97\u5b58\u653e\u5eab\u6a94\u6848 "{0}"\uff1a{1} +ActionInvoker.ERROR_0011_COULD_NOT_CONVERT_CONTENT_TO_MAP=\u7121\u6cd5\u5c07\u5167\u5bb9\u8f49\u63db\u5230\u5c0d\u61c9\uff1a{0} +ActionInvoker.ERROR_0012_COULD_NOT_INVOKE_ACTION_LOCALLY=\u7121\u6cd5\u5728\u672c\u6a5f\u53eb\u7528\u52d5\u4f5c "{0}"\uff1a{1} +ActionInvoker.ERROR_0013_BAD_STATUS_CODE=\u63a5\u6536\u5230\u975e\u9810\u671f\u7684\u72c0\u614b\u4ee3\u78bc\uff1a{0} +ActionInvoker.WARN_0001_SKIP_REMOVING_OUTPUT_FILE=\u7531 XActions \u5beb\u5165\u7684\u6a94\u6848\u5fc5\u9808\u4ee5\u5916\u90e8\u65b9\u5f0f\u6e05\u9664\uff1a{0} +ActionInvoker.WARN_0002_MISSING_PARAMS_CANT_RETURN_SP=\u9700\u8981\u53c3\u6578\u4ee5\u5efa\u7acb\u4e32\u6d41\u63d0\u4f9b\u8005 ({0}) +ActionInvoker.INFO_0001_RUNNING_IN_BG_LOCALLY=\u6b63\u65bc\u672c\u6a5f\u80cc\u666f\u57f7\u884c\u52d5\u4f5c "{0}"\uff1a{1} +ActionInvoker.INFO_0002_RUNNING_IN_BG_REMOTELY=\u6b63\u5728\u5f9e\u9060\u7aef\u65bc\u80cc\u666f\u57f7\u884c\u52d5\u4f5c "{0}"\uff1a{1} +ActionInvoker.INFO_0003_POSTING_TO_RESOURCE=\u6b63\u5728\u5c0d\u8cc7\u6e90 "{0}" \u9032\u884c POST \u8655\u7406\uff1a{1} +ActionInvoker.INFO_0004_RESOURCE_RESPONDED=\u8cc7\u6e90 "{0}" \u50b3\u56de "{1}" \u56de\u61c9 +ActionInvoker.INFO_0005_RUNNING_IN_BG_LOCALLY_SUCCESS=\u672c\u6a5f\u52d5\u4f5c "{0}" \u5df2\u6210\u529f\u5728\u80cc\u666f\u57f7\u884c\uff1a{1} +ActionInvokerSystemListener.INFO_0001_READ_FILES_FROM_FOLDER=\u6b63\u5728\u5f9e "{1}" \u8b80\u53d6 "{0}" \u6a94\u6848 +ActionInvokerSystemListener.INFO_0002_NO_FILES_FOUND=\u627e\u4e0d\u5230\u4efb\u4f55 "{0}" \u6a94\u6848\u3002\u5373\u5c07\u7d50\u675f\u3002 +ActionInvokerSystemListener.INFO_0003_READ_DATA_FROM_FILE=\u6b63\u5728\u5617\u8a66\u5f9e "{0}" \u8b80\u53d6\u8cc7\u6599 +ActionInvokerSystemListener.INFO_0004_ISSUE_REQUEST=\u6b63\u5728\u767c\u51fa\u5de5\u4f5c\u9805\u76ee\u8981\u6c42\u3002 +ActionInvokerSystemListener.INFO_0005_REQUEST_SUCCEEDED=\u8981\u6c42\u6210\u529f\u3002 +ActionInvokerSystemListener_INFO_0006_NO_FILES_FOUND="{0}" \u627e\u4e0d\u5230\u4efb\u4f55 .json \u6a94\u6848\u3002 +ActionInvokerSystemListener.ERROR_0001_REQUEST_FAILED=\u5de5\u4f5c\u9805\u76ee\u8981\u6c42\u5931\u6557 +ActionInvokerSystemListener_ERROR_0002_ERROR_READING_FILES=\u8b80\u53d6\u6a94\u6848\u6642\u767c\u751f\u932f\u8aa4 +ActionInvokerSystemListener_ERROR_0003_COULD_NOT_PROCESS="{0}" \u7121\u6cd5\u91cd\u65b0\u5efa\u7acb\u916c\u8f09\u3002\u5c07\u4e0d\u6703\u8655\u7406\u3002 +ActionInvokerSystemListener.ERROR_0004_COULD_NOT_WRITE_STATUS=\u7121\u6cd5\u5c07\u5de5\u4f5c\u9805\u76ee\u57f7\u884c\u7684\u72c0\u614b\u5beb\u5165\u5230\u6a94\u6848\u7cfb\u7d71\uff0c\u9019\u53ef\u80fd\u6703\u5c0e\u81f4\u4f5c\u696d\u7121\u56de\u61c9\u3002 diff --git a/extensions/src/main/resources/org/pentaho/platform/plugin/services/messages/messages_cn.properties b/extensions/src/main/resources/org/pentaho/platform/plugin/services/messages/messages_cn.properties index 7ebb782bc7a..027f89307e2 100644 --- a/extensions/src/main/resources/org/pentaho/platform/plugin/services/messages/messages_cn.properties +++ b/extensions/src/main/resources/org/pentaho/platform/plugin/services/messages/messages_cn.properties @@ -12,12 +12,290 @@ # without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # See the GNU Lesser General Public License for more details. #Wed Jun 04 19:04:21 EDT 2008 -SQLResultSet.ERROR_0002_GET_VALUE=[cn_227] Could not get value from resultset. -ConnectFactory.ERROR_0001_INVALID_CONNECTION2=[cn_0] Database connection could not be established to\: {0} {1} -SQLResultSet.WARN_RESULTSET_TYPE_UNDETERMINED=[cn_2] ResultSet type could not be determined, assuming default table model. -SQLResultSet.ERROR_0004_GET_METADATA=[cn_225] Could not get SQL Metadata. -ConnectFactory.ERROR_0001_INVALID_CONNECTION=[cn_1] Database connection could not be established to\: {0} -SQLResultSet.ERROR_0005_NEXT=[cn_230] Could not get next row in resultset. -SQLResultSet.ERROR_0003_BEFORE_FIRST=[cn_228] Could not seek to beginning of resultset. -SQLResultSet.ERROR_0001_OBTAINING_ROWCOUNT=[cn_226] Could not obtain rowcount. -SQLResultSet.ERROR_0006_GET_COLUMNCOUNT=[cn_229] Could not get column count from metadata. +SQLResultSet.ERROR_0002_GET_VALUE=[cn_227] \u7121\u6cd5\u5f9e\u7d50\u679c\u96c6\u53d6\u5f97\u503c\u3002 +ConnectFactory.ERROR_0001_INVALID_CONNECTION2=[cn_0] \u7121\u6cd5\u91dd\u5c0d\u4e0b\u5217\u9805\u76ee\u5efa\u7acb\u8cc7\u6599\u5eab\u9023\u7dda\uff1a{0} {1} +SQLResultSet.WARN_RESULTSET_TYPE_UNDETERMINED=[cn_2] \u7121\u6cd5\u5224\u65b7\u7d50\u679c\u96c6\u985e\u578b\uff0c\u5c07\u5047\u8a2d\u70ba\u9810\u8a2d\u8cc7\u6599\u8868\u6a21\u578b\u3002 +SQLResultSet.ERROR_0004_GET_METADATA=[cn_225] \u7121\u6cd5\u53d6\u5f97 SQL \u5f8c\u8a2d\u8cc7\u6599\u3002 +ConnectFactory.ERROR_0001_INVALID_CONNECTION=[cn_1] \u7121\u6cd5\u91dd\u5c0d\u4e0b\u5217\u9805\u76ee\u5efa\u7acb\u8cc7\u6599\u5eab\u9023\u7dda\uff1a{0} +SQLResultSet.ERROR_0005_NEXT=[cn_230] \u7121\u6cd5\u53d6\u5f97\u7d50\u679c\u96c6\u4e2d\u7684\u4e0b\u4e00\u500b\u8cc7\u6599\u5217\u3002 +SQLResultSet.ERROR_0003_BEFORE_FIRST=[cn_228] \u7121\u6cd5\u5c0b\u627e\u7d50\u679c\u96c6\u7684\u958b\u982d\u3002 +SQLResultSet.ERROR_0001_OBTAINING_ROWCOUNT=[cn_226] \u7121\u6cd5\u53d6\u5f97\u8cc7\u6599\u5217\u8a08\u6578\u3002 +SQLResultSet.ERROR_0006_GET_COLUMNCOUNT=[cn_229] \u7121\u6cd5\u5f9e\u5f8c\u8a2d\u8cc7\u6599\u53d6\u5f97\u8cc7\u6599\u884c\u8a08\u6578\u3002 +ConnectFactory.ERROR_0002_UNABLE_TO_FACTORY_OBJECT=\u7121\u6cd5\u70ba\u7269\u4ef6\u9032\u884c\u8655\u7406\u7ad9\u8655\u7406 +SQLResultSet.ERROR_0007_BEFORE_FIRST_CONNECTION_CLOSED=\u7121\u6cd5\u5c0b\u627e\u7d50\u679c\u96c6\u7684\u958b\u982d\uff0c\u9023\u7dda\u5df2\u95dc\u9589\u3002 +SQLResultSet.ERROR_0008_FORWARDED_SQL_MSG=\u56e0\u767c\u751f SQL \u932f\u8aa4\u800c\u7121\u6cd5\u5b8c\u6210 +SQLResultSet.WARN_CONNECTION_NOT_CLOSED=\u7121\u6cd5\u95dc\u9589\u9023\u7dda\u3002 +SQLResultSet.INFO_IGNORE_BEFORE_FIRST_RESULTSET_NON_SCROLLABLE=\u5c07\u5ffd\u7565\u4e0d\u53ef\u6372\u52d5\u7d50\u679c\u96c6\u4e0a\u7684 beforeFirst +SQLConnection.ERROR_0001_TIMEOUT_NOT_SET=JDBC \u9a45\u52d5\u7a0b\u5f0f\u4e0d\u652f\u63f4\u8a2d\u5b9a timout\u3002\u7121\u6cd5\u5c07 timout \u8a2d\u5b9a\u70ba {0}\u3002 +SQLConnection.ERROR_0002_ROWLIMIT_NOT_SET=JDBC \u9a45\u52d5\u7a0b\u5f0f\u4e0d\u652f\u63f4\u8a2d\u5b9a rowlimit\u3002\u7121\u6cd5\u5c07 rowlimit \u8a2d\u5b9a\u70ba {0}\u3002 +SQLConnection.ERROR_0003_FETCHSIZE_NOT_SET=JDBC \u9a45\u52d5\u7a0b\u5f0f\u4e0d\u652f\u63f4\u8a2d\u5b9a fetchSize\u3002\u7121\u6cd5\u5c07 fetchSize \u8a2d\u5b9a\u70ba {0}\u3002 +RolePreprocessingMapper.WARN_TOKEN_NOT_FOUND=\u5728\u5c6c\u6027\u4e2d\u627e\u4e0d\u5230 "{0}"\uff1b\u6b63\u5728\u50b3\u56de Null +StringToGrantedAuthority.DEBUG_INPUT_TO_TRANSFORM=\u5c0d\u8f49\u63db\u7684\u8f38\u5165 = "{0}" +SearchResultToAttrValueList.DEBUG_LOOKING_FOR_SUBSTRING=\u6b63\u65bc "{1}" \u5b57\u4e32\u4e2d\u5c0b\u627e "{0}" +SearchResultToAttrValueList.DEBUG_EXTRACTED_TOKEN=\u5df2\u64f7\u53d6 "{0}" +SearchResultToAttrValueList.DEBUG_TOKEN_NOT_FOUND=\u5728 "{1}" \u4e2d\u627e\u4e0d\u5230 "{0}" +SearchResultToAttrValueList.DEBUG_ATTRIBUTES_FROM_SEARCHRESULT=\u4f86\u81ea\u4e0b\u5217\u9805\u76ee\u7684\u5c6c\u6027\uff1asearchResult = {0} +SearchResultToAttrValueList.DEBUG_ATTRIBUTE_VALUE="{0}" \u5c6c\u6027\u7684\u503c\uff1a{1} +SearchResultToAttrValueList.WARN_ATTRIBUTE_NOT_A_STRING=\u5c6c\u6027\u503c\u4e0d\u662f\u5b57\u4e32\u57f7\u884c\u500b\u9ad4 +SearchResultToAttrValueList.ERROR_0001_NAMING_EXCEPTION=\u7121\u6cd5\u91dd\u5c0d\u641c\u5c0b\u7d50\u679c\u9032\u884c\u4f5c\u696d +GrantedAuthorityToString.DEBUG_INPUT_TO_TRANSFORM=\u5c0d\u8f49\u63db\u7684\u8f38\u5165 = "{0}" +InMemoryUserRoleListService.ERROR_0001_PROPERTY_LIST_NOT_SPECIFIED=\u5fc5\u9808\u8a2d\u5b9a\u4f7f\u7528\u8005\u3001\u5bc6\u78bc\u3001\u5df2\u555f\u7528/\u5df2\u505c\u7528\u72c0\u614b\u53ca\u5176\u6388\u8207\u6388\u6b0a\u55ae\u4f4d\u7684\u6e05\u55ae +InMemoryUserRoleListService.ERROR_0002_ALL_AUTHORITIES_NOT_SPECIFIED=\u5fc5\u9808\u8a2d\u5b9a allAuthorities \u5c6c\u6027 +InMemoryUserRoleListService.ERROR_0003_USERDETAILSSERVICE_NOT_SPECIFIED=\u5fc5\u9808\u8a2d\u5b9a userDetailsService \u5c6c\u6027 +UnionizingLdapAuthoritiesPopulator.ERROR_0001_POPULATOR_NULL=\u586b\u5165\u5668\u4e0d\u80fd\u662f Null +JcrCmsOutputHandler.ERROR_0001_GETTING_CMSREPO=\u53d6\u5f97 CMS \u5b58\u653e\u5eab\u6642\u767c\u751f\u932f\u8aa4 +JcrCmsOutputHandler.ERROR_0002_GETTING_SESSION=\u53d6\u5f97 CMS \u5de5\u4f5c\u968e\u6bb5\u6642\u767c\u751f\u932f\u8aa4 +JcrCmsOutputHandler.ERROR_0003_GETTING_ROOT=\u53d6\u5f97 CMS \u6839\u76ee\u9304\u6642\u767c\u751f\u932f\u8aa4 +JcrCmsOutputHandler.ERROR_0004_NODE_LOCKED=\u7bc0\u9ede\u5df2\u9396\u5b9a\uff1a{0} +JcrCmsOutputHandler.ERROR_0005_NODE_CHECKED_OUT=\u7bc0\u9ede\u5df2\u7c3d\u51fa\uff1a{0} +JcrCmsOutputHandler.ERROR_0006_GETTING_OUTPUTHANDLER=\u53d6\u5f97 {0)} \u7684\u8f38\u51fa\u8655\u7406\u5e38\u5f0f\u6642\u767c\u751f\u932f\u8aa4 +JcrCmsOutputHandler.ERROR_0007_SAVING_CONTENT=\u7121\u6cd5\u5132\u5b58\u5230\u5167\u5bb9\u5b58\u653e\u5eab +JcrCmsOutputHandler.ERROR_0008_SEARCH_FAILED=\u641c\u5c0b\u5931\u6557\uff1a{0} +VersionCheck.UPDATE_MESSAGE=\u6709\u66f4\u65b0\u53ef\u7528\uff1a{0} {1} {2}\uff0c\u4e0b\u8f09\u9023\u7d50\uff1a{3} +VersionCheck.ERROR_MESSAGE=\u7248\u672c\u6aa2\u67e5\u932f\u8aa4\uff1a{0} +VersionCheck.NO_RESULT_MESSAGE=\u7248\u672c\u6aa2\u67e5\u932f\u8aa4\uff1a\u6c92\u6709\u53ef\u7528\u7684\u7d50\u679c +MondrianCatalogPublisher.ERROR_0005_PUBLISH_EXCEPTION=\u767c\u884c\u6642\u767c\u751f\u4f8b\u5916\u72c0\u6cc1 +MondrianCatalogPublisher.ERROR_0006_UNABLE_TO_FACTORY_OBJECT=\u7121\u6cd5\u70ba\u7269\u4ef6\u9032\u884c\u8655\u7406\u7ad9\u8655\u7406 +CacheManager.WARN_0001_CACHE_NOT_ENABLED=\u672a\u555f\u7528\u5feb\u53d6 +CacheManager.ERROR_0004_CACHE_PROVIDER_NOT_AVAILABLE=\u5feb\u53d6\u63d0\u4f9b\u8005\u7121\u6cd5\u4f7f\u7528 +CacheManager.ERROR_0005_UNABLE_TO_BUILD_CACHE=\u7121\u6cd5\u91dd\u5c0d\u6307\u5b9a\u5730\u5340\u5efa\u7f6e\u5feb\u53d6 +CacheManager.WARN_0002_REGION_ALREADY_EXIST=\u5feb\u53d6\u5730\u5340\u5df2\u5b58\u5728 +CacheManager.WARN_0003_REGION_DOES_NOT_EXIST=\u5feb\u53d6\u5730\u5340\u4e0d\u5b58\u5728 +CacheManager.WARN_0004_NO_CACHE_EXPIRATION_REGISTRY=\u6c92\u6709\u53ef\u7528\u7684\u5feb\u53d6\u5230\u671f\u767b\u9304 +CacheManager.INFO_0001_CACHE_DOES_NOT_EXIST=\u6240\u9078\u53d6\u5730\u5340\u7684\u5feb\u53d6\u4e0d\u5b58\u5728 +CacheManager.ERROR_0006_CACHE_EXCEPTION=\u5feb\u53d6\u932f\u8aa4\uff1a{0} +BaseMenuProvider.ERROR_0001_COULD_NOT_GET_MENU_CONTAINER=\u7121\u6cd5\u8f09\u5165\u529f\u80fd\u8868\u5bb9\u5668 +BaseMenuProvider.ERROR_0002_COULD_NOT_GET_MENUBAR=\u7121\u6cd5\u8f09\u5165\u529f\u80fd\u8868\u5217 +BaseMenuProvider.ERROR_0003_COULD_NOT_GET_POPUP_MENU=\u7121\u6cd5\u8f09\u5165\u5feb\u986f\u529f\u80fd\u8868 +BaseMenuProvider.ERROR_0004_COULD_NOT_CUSTOMIZE_MENU=\u7121\u6cd5\u65b0\u589e\u529f\u80fd\u8868\u81ea\u8a02\uff1a{0} - {1} +PluginAdapter.ERROR_0001_PLUGIN_MANAGER_NOT_CONFIGURED=\u672a\u8a2d\u5b9a IPluginManager +PluginManager.ERROR_0001_CANNOT_GET_CONTENT_GENERATOR=\u7121\u6cd5\u53d6\u5f97\u5167\u5bb9\u7522\u751f\u5668\uff1a{0} +PluginManager.ERROR_0002_CANNOT_GET_CONTENT_GENERATOR=\u7121\u6cd5\u53d6\u5f97\u5167\u5bb9\u7522\u751f\u5668\uff1a{0} +PluginManager.ERROR_0004_CANNOT_FIND_SYSTEM_FOLDER=\u627e\u4e0d\u5230\u7cfb\u7d71\u8cc7\u6599\u593e +PluginManager.ERROR_0005_CANNOT_PROCESS_PLUGIN_XML=\u7121\u6cd5\u8655\u7406 plugin.xml\uff1a{0} +PluginManager.USER_CONTENT_GENERATOR_NOT_REGISTERED=\u672a\u91dd\u5c0d\u5916\u639b\u7a0b\u5f0f\uff1a{1} \u8a3b\u518a\u5167\u5bb9\u7522\u751f\u5668\uff1a{0} +PluginManager.ERROR_0007_CANNOT_CREATE_FILEINFO_GENERATOR=\u7121\u6cd5\u5efa\u7acb\u6a94\u6848\u8cc7\u8a0a\u7522\u751f\u5668\uff1a{0} +PluginManager.ERROR_0008_CANNOT_GET_REPOSITORY=\u7121\u6cd5\u53d6\u5f97\u65b9\u6848\u5b58\u653e\u5eab\u7269\u4ef6 +PluginManager.ERROR_0009_MENU_CUSTOMIZATION_ERROR=\u7121\u6cd5\u8655\u7406\u529f\u80fd\u8868\u81ea\u8a02\uff1a{0} - {1} +PluginManager.ERROR_0010_FILE_TYPE_PLUGIN_ERROR=\u7121\u6cd5\u8655\u7406\u4e0b\u5217\u526f\u6a94\u540d\u7684\u6a94\u6848\u985e\u578b\u5916\u639b\u7a0b\u5f0f\uff1a{0} +PluginManager.FILE_TYPE_PLUGIN_ADDITION=\u6a94\u6848\u985e\u578b\u5916\u639b\u7a0b\u5f0f\u65b0\u589e\u9805\u76ee\uff1a{0} +PluginAdapter.USER_REFRESH_PLUGINS=\u91cd\u65b0\u6574\u7406\u6240\u6709\u5916\u639b\u7a0b\u5f0f\u8a2d\u5b9a +PluginManager.USER_MENU_ITEM_DELETE=\u529f\u80fd\u8868\u522a\u9664\u9805\u76ee\uff1a{0} +PluginManager.USER_MENU_ITEM_REPLACE=\u529f\u80fd\u8868\u53d6\u4ee3\u9805\u76ee\uff1a{0} - {1} +PluginManager.USER_MENU_ITEM_ADDITION=\u529f\u80fd\u8868\u65b0\u589e\u9805\u76ee\uff1a{0} - {1} +PluginAdapter.USER_PLUGIN_MANAGER=\u5916\u639b\u7a0b\u5f0f\u914d\u63a5\u5668 +PluginManager.ERROR_0003_SOLUTION_ROOT_IS_BAD=\u65b9\u6848\u6839\u76ee\u9304\u4e0d\u662f\u8cc7\u6599\u593e +PluginManager.USER_CONTENT_TYPE_REGISTERED=\u5df2\u8a3b\u518a\u5167\u5bb9\u985e\u578b\uff1a{0} - {1} +PluginManager.USER_CONTENT_TYPE_NOT_REGISTERED=\u672a\u8a3b\u518a\u5167\u5bb9\u985e\u578b\uff1a{0} - {1} +PluginManager.USER_CONTENT_GENERATOR_REGISTERED=\u5df2\u91dd\u5c0d\u5916\u639b\u7a0b\u5f0f\uff1a{1} \u8a3b\u518a\u5167\u5bb9\u7522\u751f\u5668\uff1a{0} +PluginManager.ERROR_0006_CANNOT_CREATE_CONTENT_GENERATOR_FACTORY=\u7121\u6cd5\u5efa\u7acb\u5167\u5bb9\u7522\u751f\u5668\u8655\u7406\u7ad9\uff1a{0} +PluginManager.ERROR_0011_FAILED_TO_REGISTER_PLUGIN=\u7121\u6cd5\u8a3b\u518a\u5916\u639b\u7a0b\u5f0f {0} +PluginManager.ERROR_0012_PLUGIN_DISCOVERY_FAILED=\u5916\u639b\u7a0b\u5f0f\u63a2\u7d22\u5931\u6557 +PluginManager.ERROR_0014_PLUGIN_FAILED_TO_PROPERLY_UNLOAD=\u5916\u639b\u7a0b\u5f0f {0} \u7121\u6cd5\u6b63\u78ba\u5378\u8f09 +PluginManager.ERROR_0015_PLUGIN_LOADED_HANDLING_FAILED=\u5df2\u8f09\u5165\u5916\u639b\u7a0b\u5f0f {0}\uff0c\u4f46\u8f09\u5165\u5f8c\u8655\u7406\u5931\u6557 +PluginManager.ERROR_0016_PLUGIN_LIFECYCLE_LISTENER_WRONG_TYPE=\u91dd\u5c0d {0} \u5916\u639b\u7a0b\u5f0f\u5b9a\u7fa9\u7684\u751f\u547d\u9031\u671f\u63a5\u807d\u7a0b\u5f0f ({1}) \u4e0d\u662f\u5be6\u969b\u7684\u751f\u547d\u9031\u671f\u63a5\u807d\u7a0b\u5f0f +PluginManager.ERROR_0017_COULD_NOT_LOAD_PLUGIN_LIFECYCLE_LISTENER=\u7121\u6cd5\u8f09\u5165\u5916\u639b\u7a0b\u5f0f {0} \u7684\u751f\u547d\u9031\u671f\u63a5\u807d\u7a0b\u5f0f [{1}] +PluginManager.ERROR_0018_BEAN_ALREADY_REGISTERED=\u5916\u639b\u7a0b\u5f0f {1} \u4e2d\u7684 Bean \u5df2\u7d93\u4ee5\u8b58\u5225\u78bc {0} \u8a3b\u518a\uff0c\u7121\u6cd5\u8a3b\u518a\u53e6\u4e00\u500b\u5177\u6709\u76f8\u540c\u8b58\u5225\u78bc\u7684 Bean\u3002 +PluginManager.ERROR_0020_NO_SERVICE_CLASS_REGISTERED=\u6c92\u6709\u5177\u6709\u8b58\u5225\u78bc "{0}" \u7684\u670d\u52d9\u985e\u5225\u5df2\u5411\u6b64\u5916\u639b\u7a0b\u5f0f\u8a3b\u518a\u3002 +PluginManager.ERROR_0021_SERVICE_CLASS_LOAD_FAILED=\u7121\u6cd5\u8f09\u5165\u7531 "{0}" \u8b58\u5225\u7684\u670d\u52d9\u985e\u5225\u3002 +PluginManager.ERROR_0022_SERVICE_INITIALIZATION_FAILED=\u7121\u6cd5\u5c07 Web \u670d\u52d9\u521d\u59cb\u5316\u3002 +PluginManager.ERROR_0023_SERVICE_TYPE_UNSPECIFIED=\u672a\u6307\u5b9a\u8b58\u5225\u78bc {0} \u7684\u670d\u52d9\u985e\u578b\u3002 +PluginManager.ERROR_0024_PLUGIN_ALREADY_LOADED_BY_SAME_NAME=\u5df2\u5b58\u5728\u4ee5 {0} \u540d\u7a31\u8a3b\u518a\u7684\u5916\u639b\u7a0b\u5f0f\u3002 +PluginManager.ERROR_0025_SERVICE_REGISTRATION_FAILED=\u7121\u6cd5\u91dd\u5c0d\u5916\u639b\u7a0b\u5f0f {1} \u8a3b\u518a\u670d\u52d9 {0} +PluginManager.ERROR_0026_PLUGIN_INVALID=\u5728 "{0}" \u627e\u5230\u7684\u5916\u639b\u7a0b\u5f0f\u5177\u6709\u7a7a\u767d\u6216\u907a\u5931\u7684\u540d\u7a31 +PluginManager.ERROR_0027_PLUGIN_DIR_UNAVAILABLE=\u5916\u639b\u7a0b\u5f0f\u76ee\u9304 {0} \u4e0d\u5b58\u5728\u6216\u7121\u6cd5\u8b80\u53d6 +PluginManager.PLUGIN_REGISTERED=\u5df2\u6210\u529f\u8a3b\u518a\u5916\u639b\u7a0b\u5f0f {0} +PluginManager.PLUGIN_LIFECYCLE_LISTENER_FAILED_TO_LOAD=\u7121\u6cd5\u8f09\u5165\u5916\u639b\u7a0b\u5f0f {0} ({1}) \u7684\u751f\u547d\u9031\u671f\u63a5\u807d\u7a0b\u5f0f +PluginManager.NO_SERVICE_CLASS_FOUND=\u7121\u6cd5\u8a3b\u518a Web \u670d\u52d9\u3002\u672a\u5b9a\u7fa9\u4efb\u4f55\u670d\u52d9\u985e\u5225\u3002 +PluginManager.WARN_CLASS_NOT_REGISTERED=\u6c92\u6709\u91dd\u5c0d\u8b58\u5225\u78bc {0} \u8a3b\u518a\u7684\u4efb\u4f55\u985e\u5225 +PluginManager.WARN_WRONG_BEAN_FACTORY_TYPE=\u60a8\u7684\u6e2c\u8a66 Bean \u8655\u7406\u7ad9\u672a\u5be6\u4f5c ConfigurableBeanFactory\uff0c\u9019\u8868\u793a\u6211\u5011\u7121\u6cd5\u70ba\u5b83\u63d0\u4f9b\u6b63\u78ba\u7684\u985e\u5225\u8f09\u5165\u5668\u3002\u8acb\u8003\u616e\u4f7f\u7528 DefaultListableBeanFactory +PluginResourceLoader.WARN_CLASS_LOADED_OUTSIDE_OF_PLUGIN_ENV=\u7cfb\u7d71\u7121\u6cd5\u5c07\u60a8\u63d0\u4f9b\u7684\u985e\u5225 [{0}] \u8fa8\u8b58\u70ba\u5916\u639b\u7a0b\u5f0f\u985e\u5225\uff0c\u56e0\u70ba\u5b83\u4e0d\u662f\u5f9e {1} \u8f09\u5165\u3002\u5982\u679c {0} \u78ba\u5be6\u662f\u60a8\u5916\u639b\u7a0b\u5f0f\u7684\u4e00\u90e8\u5206\uff0c\u53ef\u80fd\u662f\u56e0\u70ba\u60a8\u662f\u5728\u6e2c\u8a66\u74b0\u5883\u4e2d\u57f7\u884c\u3002\u5728\u6b64\u985e\u6848\u4f8b\u4e2d\uff0c\u5efa\u8b70\u505a\u6cd5\u662f\u4f7f\u7528\u80fd\u8986\u5beb getOverrideClassLoader() \u65b9\u6cd5\u7684 {2} \u6e2c\u8a66\u5b50\u985e\u5225\u4ee5\u50b3\u56de\u6b63\u78ba\u7684 {1}\u3002 +PluginClassLoader.WARN_COULD_NOT_LOAD_JAR=\u7121\u6cd5\u8f09\u5165 jar\uff1a{0} +PluginClassLoader.WARN_FAILED_TO_OPEN_RESOURCE=\u7121\u6cd5\u958b\u555f\u8cc7\u6e90 {0}\uff1a{1} +PluginClassLoader.WARN_FAILED_TO_ADD_PLUGIN_DIR_TO_CLASSPATH=\u7121\u6cd5\u5c07\u76ee\u9304 {0} \u6216 {1} \u65b0\u589e\u5230\u985e\u5225\u8def\u5f91 +PluginClassLoader.WARN_FAILED_TO_ADD_JAR_TO_CLASSPATH=\u7121\u6cd5\u5c07 jar \u6a94\u6848 {0} \u65b0\u589e\u5230\u985e\u5225\u8def\u5f91 +MDXConnection.ERROR_0002_INVALID_CONNECTION=\u7121\u6548\u7684\u9023\u7dda\u5c6c\u6027\uff1a{0} +HQLConnection.ERROR_0001_UNABLE_TO_CLOSE=\u95dc\u9589\u9023\u7dda\u6642\u767c\u751f\u4f8b\u5916\u72c0\u6cc1 +FileOutputHandler.ERROR_0001_COULD_NOT_CREATE_DIRECTORY=\u7121\u6cd5\u5efa\u7acb\u76ee\u9304 [{0}] +FileOutputHandler.ERROR_0002_COULD_NOT_CREATE_OUTPUT_FILE=\u7121\u6cd5\u5efa\u7acb\u8f38\u51fa\u6a94\u6848 [{0}] +SystemPathXmlPluginProvider.DISCOVERED_PLUGIN=\u5df2\u5728 {1} \u4e2d\u63a2\u7d22\u5230\u5916\u639b\u7a0b\u5f0f {0} +SystemPathXmlPluginProvider.ERROR_0001_FAILED_TO_PROCESS_PLUGIN=\u7121\u6cd5\u8655\u7406 {0} \u4e2d\u7684\u5916\u639b\u7a0b\u5f0f +SystemPathXmlPluginProvider.PLUGIN_PROVIDES=\u6b64\u5916\u639b\u7a0b\u5f0f\u63d0\u4f9b\uff1a{0} \u529f\u80fd\u8868\u81ea\u8a02\u3001{1} \u5167\u5bb9\u985e\u578b\u3001{2} \u5167\u5bb9\u7522\u751f\u5668\u3001{3} \u91cd\u758a\uff0c\u4ee5\u53ca{4} \u751f\u547d\u9031\u671f\u63a5\u807d\u7a0b\u5f0f +SystemPathXmlPluginProvider.ERROR_0002_PLUGIN_INVALID=\u5728 "{0}" \u627e\u5230\u7684\u5916\u639b\u7a0b\u5f0f\u5177\u6709\u7a7a\u767d\u6216\u907a\u5931\u7684\u540d\u7a31 +AbstractAxisConfigurator.ERROR_0001_COULD_NOT_LOAD_SERVICE=\u7121\u6cd5\u8f09\u5165 Web \u670d\u52d9\uff1a{0} +DefaultServiceManager.ERROR_0001_INVALID_SERVICE_TYPE=\u6b63\u5728\u5617\u8a66\u8a3b\u518a\u985e\u578b\u70ba "Null" \u7684\u670d\u52d9\u7ba1\u7406\u54e1\u3002\u8acb\u4f7f\u7528\u6709\u6548\u7684\u670d\u52d9\u985e\u578b +DefaultServiceManager.ERROR_0002_NO_SERVICE_MANAGER_FOR_TYPE=\u7121\u6cd5\u8a3b\u518a\u670d\u52d9 "{0}"\u3002\u627e\u4e0d\u5230\u670d\u52d9\u985e\u578b "{1}" \u7684\u670d\u52d9\u7ba1\u7406\u54e1\u3002\u53ef\u7528\u7684\u670d\u52d9\u985e\u578b\u70ba\uff1a[{2}]\u3002 +DefaultServiceManager.REGISTERED_SERVICE_TYPES=\u5df2\u8a3b\u518a\u670d\u52d9\u7ba1\u7406\u54e1\u4ee5\u8655\u7406\u985e\u578b\u70ba {0} \u7684\u670d\u52d9 +DefaultServiceManager.ERROR_0003_INVALID_SERVICE_CONFIG=\u7121\u6548\u7684\u670d\u52d9\u8a2d\u5b9a\uff1a\u672a\u8a2d\u5b9a "{0}" +AxisUtil.ERROR_0001_NO_CONTENT_GENERATOR_FOR_WS=\u672a\u8a2d\u5b9a\u5177\u6709\u8b58\u5225\u78bc "{0}" \u7684\u5167\u5bb9\u7522\u751f\u5668\u4ee5\u8655\u7406 Web \u670d\u52d9\u8981\u6c42 +AxisUtil.ERROR_0002_NO_CONTENT_GENERATOR_FOR_WSDL=\u672a\u8a2d\u5b9a\u5177\u6709\u8b58\u5225\u78bc "{0}" \u7684\u5167\u5bb9\u7522\u751f\u5668\u4ee5\u8655\u7406 WSDL \u8981\u6c42 +SqlMetadataQueryExec.ERROR_0001_ERROR_GENERATING_QUERY=\u67e5\u8a62\u7522\u751f\u5931\u6557\uff1a{0} +SqlMetadataQueryExec.ERROR_0002_ERROR_EXECUTING_QUERY=\u67e5\u8a62\u57f7\u884c\u5931\u6557\uff1a{0} +SecurityAwareCwmSchemaFactory.INFO_AUTH_NULL_CONTINUE=\u4f86\u81ea\u5de5\u4f5c\u968e\u6bb5\u7684\u9a57\u8b49\u662f Null\uff1b\u6b63\u5728\u4f7f\u7528\u56b4\u683c rls \u689d\u4ef6\u7d04\u675f\u7e7c\u7e8c +SessionAwareRowLevelSecurityHelper.WARN_0001_NULL_ATTRIBUTE=\u300c\u91dd\u5c0d {1} \u7684\u5de5\u4f5c\u968e\u6bb5\u5c6c\u6027 {0} \u662f Null\uff0c\u5c07\u91dd\u5c0d\u5f8c\u8a2d\u8cc7\u6599\u8cc7\u6599\u5217\u5c64\u7d1a\u5b89\u5168\u6027\u67e5\u8a62\u50b3\u56de FALSE()\u3002 +PentahoMetadataDomainRepository.ERROR_0001_DOMAIN_ID_NULL=\u63d0\u4f9b\u7684 Pentaho \u5f8c\u8a2d\u8cc7\u6599\u7db2\u57df\u672a\u5305\u542b\u6709\u6548\u7684\u7db2\u57df\u8b58\u5225\u78bc +PentahoMetadataDomainRepository.ERROR_0002_DOMAIN_ALREADY_EXISTS=\u5177\u6709\u6307\u5b9a\u7db2\u57df\u8b58\u5225\u78bc [{0}] \u7684 Pentaho \u5f8c\u8a2d\u8cc7\u6599\u7db2\u57df\u5df2\u5b58\u5728 +PentahoMetadataDomainRepository.ERROR_0003_ERROR_STORING_DOMAIN=\u5132\u5b58\u5177\u6709\u7db2\u57df\u8b58\u5225\u78bc [{0}] \u7684\u7db2\u57df\u6642\u767c\u751f\u932f\u8aa4 - {1} +PentahoMetadataDomainRepository.ERROR_0004_DOMAIN_ID_INVALID=\u7121\u6548\u7684\u7db2\u57df\u8b58\u5225\u78bc [{0}] +PentahoMetadataDomainRepository.ERROR_0005_ERROR_RETRIEVING_DOMAIN=\u64f7\u53d6\u5177\u6709\u8b58\u5225\u78bc [{0}] \u7684\u7db2\u57df\u6642\u767c\u751f\u932f\u8aa4 - {1} +PentahoMetadataDomainRepository.ERROR_0006_MODEL_ID_INVALID=\u63d0\u4f9b\u7684\u6a21\u578b\u8b58\u5225\u78bc\u7121\u6548 +PentahoMetadataDomainRepository.ERROR_0008_ERROR_IN_REPOSITORY=\u5b58\u653e\u5eab\u4e2d\u767c\u751f\u932f\u8aa4 - {0} +PentahoMetadataDomainRepository.ERROR_0009_LOCALE_ALREADY_EXISTS=\u9069\u7528\u65bc\u6b64\u7db2\u57df\u8207\u5730\u5340\u8a2d\u5b9a\u7684\u6a94\u6848\u5df2\u5b58\u5728 (\u8986\u5beb\u70ba false) - \u7db2\u57df={0} \u5730\u5340\u8a2d\u5b9a={1} +PentahoMetadataDomainRepository.ERROR_0010_ERROR_PARSING_XMI=\u5256\u6790 xmi \u6a94\u6848\u6642\u9047\u5230\u932f\u8aa4 +PentahoMetadataDomainRepository.WARN_0001_FILE_WITHOUT_METADATA=\u5728\u5f8c\u8a2d\u8cc7\u6599\u5b58\u653e\u5eab\u4e2d\u627e\u5230\u6c92\u6709\u7db2\u57df\u8cc7\u8a0a\u7684\u6a94\u6848\uff1a[{0}] +PentahoMetadataRepositoryLifecycleManager.USER_0001_VER_COMMENT_METADATA=[\u7cfb\u7d71] \u5df2\u5efa\u7acb\u5f8c\u8a2d\u8cc7\u6599\u8cc7\u6599\u593e +MetadataImportHandler.ERROR_0001_IMPORTING_METADATA=\u532f\u5165\u5f8c\u8a2d\u8cc7\u6599\u6a94\u6848\u6642\u767c\u751f\u932f\u8aa4 [\u7db2\u57df={0}] - {1} +MetadataImportHandler.ERROR_0002_IMPORTING_LOCALE_FILE=\u532f\u5165\u5f8c\u8a2d\u8cc7\u6599\u5730\u5340\u8a2d\u5b9a\u6a94\u6848\u6642\u767c\u751f\u932f\u8aa4 [\u6a94\u6848={0}\uff1a\u7db2\u57df={1}\uff1a\u5730\u5340\u8a2d\u5b9a={2}] - {3} +EmailService.SUBJECT=\u8a3a\u65b7\u9a57\u8b49\u96fb\u5b50\u90f5\u4ef6 +EmailService.MESSAGE=\u9019\u662f\u9a57\u8b49\u96fb\u5b50\u90f5\u4ef6\u5df2\u6b63\u78ba\u8a2d\u5b9a\u7684\u6e2c\u8a66\u8a0a\u606f\u3002 +EmailService.MESSAGE_SENT_TO=\u96fb\u5b50\u90f5\u4ef6\u5df2\u50b3\u9001\u5230 {0} +EmailService.NOT_CONFIGURED=\u7121\u6cd5\u50b3\u9001\uff0c\u96fb\u5b50\u90f5\u4ef6\u672a\u6b63\u78ba\u8a2d\u5b9a\u3002 +EmailService.ERROR_MESSAGE=\u932f\u8aa4\uff1a{0} +EmailService.ERROR_0001_INVALID_CONFIG_FILE_LOCATION=\u63d0\u4f9b\u7684\u96fb\u5b50\u90f5\u4ef6\u8a2d\u5b9a\u6a94\u4f4d\u7f6e\u7121\u6548\uff1a{0} +EmailService.ERROR_0002_NULL_CONFIGURATION=\u63d0\u4f9b\u7684\u96fb\u5b50\u90f5\u4ef6\u8a2d\u5b9a\u662f Null +EmailService.ERROR_0003_ERROR_CREATING_EMAIL_CONFIG_FILE=\u5132\u5b58\u96fb\u5b50\u90f5\u4ef6\u8a2d\u5b9a\u6a94\u6642\u767c\u751f\u932f\u8aa4\uff1a{0} +EmailService.ERROR_0004_LOADING_EMAIL_CONFIG_FILE=\u8f09\u5165\u96fb\u5b50\u90f5\u4ef6\u8a2d\u5b9a\u6a94\u6642\u767c\u751f\u932f\u8aa4\uff1a{0} +EmailService.ERROR_0005_INVALID_ROOT_ELEMENT=\u7121\u6548\u7684\u6839\u5143\u7d20\u3002 +EmailService.ERROR_0001_ERROR_PARSING_DATA=\u5256\u6790\u96fb\u5b50\u90f5\u4ef6\u8a2d\u5b9a\u6a94\u6642\u767c\u751f\u932f\u8aa4\uff1a{0} +EmailService.ERROR_0002_INVALID_ROOT_ELEMENT=\u96fb\u5b50\u90f5\u4ef6\u8a2d\u5b9a\u6a94\u7d50\u69cb\u4e2d\u767c\u751f\u932f\u8aa4 - \u8a2d\u5b9a\u6a94\u7a7a\u767d\u6216\u907a\u5931\u6b63\u78ba\u7d50\u69cb +PentahoPlatformImporter.ERROR_0001_INVALID_MIME_TYPE=\u8a08\u7b97\u6216\u64f7\u53d6 mime-type \u6642\u767c\u751f\u932f\u8aa4 +PentahoPlatformImporter.ERROR_0002_MISSING_IMPORT_HANDLER=\u7121\u6cd5\u532f\u5165\uff1a\u627e\u4e0d\u5230\u9069\u7528\u65bc\u6307\u5b9a\u985e\u578b\u7684\u8655\u7406\u5e38\u5f0f +PentahoPlatformImporter.ERROR_0003_UNEXPECTED_ERROR=\u532f\u5165\u671f\u9593\u767c\u751f\u932f\u8aa4\uff1a{0} +PentahoPlatformImporter.ERROR_0004_PUBLISH_TO_SERVER_FAILED=\u7121\u6cd5\u767c\u884c\u5230\u5b58\u653e\u5eab +PentahoPlatformImporter.ERROR_0005_PUBLISH_GENERAL_ERRORR=\u7121\u6cd5\u532f\u5165\uff1a\u4e00\u822c\u932f\u8aa4\uff1a{0} +PentahoPlatformImporter.ERROR_0006_PUBLISH_XMLA_CATALOG_EXISTS=\u7121\u6cd5\u532f\u5165\uff1aXMLA \u76ee\u9304\u540d\u7a31\u5df2\u5b58\u5728 +PentahoPlatformImporter.ERROR_0007_PUBLISH_SCHEMA_EXISTS_ERROR=\u7121\u6cd5\u532f\u5165\uff1a\u7db1\u8981\u540d\u7a31\u5df2\u5b58\u5728 +PentahoPlatformImporter.ERROR_0008_PUBLISH_JOB_OR_TRANS_WITH_MISSING_PLUGINS=\u7121\u6cd5\u532f\u5165\uff1a\u907a\u5931\u5916\u639b\u7a0b\u5f0f +CommandLineProcessor.INFO_IMPORT_SUCCESSFUL=\u532f\u5165\u6210\u529f +CommandLineProcessor.INFO_EXPORT_SUCCESSFUL=\u532f\u51fa\u6210\u529f +CommandLineProcessor.INFO_RESTORE_SUCCESSFUL=\u9084\u539f\u6210\u529f +CommandLineProcessor.ERROR_0001_MISSING_ARG=\u907a\u5931\u5f15\u6578\uff1a{0} +CommandLineProcessor.ERROR_0002_INVALID_RESPONSE=\u5728 performREST() \u4e2d\u63a5\u6536\u5230\u7121\u6548 ClientResponse +CommandLineProcessor.ERROR_0003_PARSE_EXCEPTION=\u9700\u8981\u4e00\u500b --import \u6216 --export +CommandLineProcessor.ERROR_0004_UNKNOWN_SOURCE=\u672a\u77e5\u7684\u4f86\u6e90\uff1a{0} +CommandLineProcessor.ERROR_0005_INVALID_FILE_PATH=\u7121\u6548\u7684\u6a94\u6848\u8def\u5f91\uff1a{0} +CommandLineProcessor.ERROR_0006_NON_ADMIN_CREDENTIALS=\u672a\u8f38\u5165\u4efb\u4f55\u7cfb\u7d71\u7ba1\u7406\u8a8d\u8b49 +CommandLineProcessor.ERROR_0007_FORBIDDEN=\u4e0d\u5141\u8a31\u4f7f\u7528\u8005\u57f7\u884c\u6b64\u4f5c\u696d\uff1a{0} +CommandLineProcessor.ERROR_0008_INVALID_PARAMETER=\u7121\u6548\u7684\u53c3\u6578\u8a9e\u6cd5\uff1a"{0}" +CommandLineProcessor.INFO_OPTION_HELP_DESCRIPTION=\u5217\u5370\u6b64\u8a0a\u606f +CommandLineProcessor.INFO_OPTION_IMPORT_DESCRIPTION=\u532f\u5165 +CommandLineProcessor.INFO_OPTION_EXPORT_DESCRIPTION=\u532f\u51fa +CommandLineProcessor.INFO_OPTION_BACKUP_DESCRIPTION=\u7522\u751f\u8981\u7528\u65bc\u7cfb\u7d71\u9084\u539f\u670d\u52d9\u7684\u5b8c\u6574\u7cfb\u7d71\u5099\u4efd\u6a94\u6848\u3002 +CommandLineProcessor.INFO_OPTION_RESTORE_DESCRIPTION=\u5f9e\u6307\u5b9a\u7684\u5099\u4efd\u6a94\u6848\u57f7\u884c\u7cfb\u7d71\u9084\u539f\u3002 +CommandLineProcessor.INFO_OPTION_USERNAME_DESCRIPTION=\u5b58\u653e\u5eab\u4f7f\u7528\u8005\u540d\u7a31 +CommandLineProcessor.INFO_OPTION_PASSWORD_DESCRIPTION=\u5b58\u653e\u5eab\u5bc6\u78bc +CommandLineProcessor.INFO_OPTION_URL_DESCRIPTION=\u5b58\u653e\u5eab\u7684 URL (\u4f8b\u5982 http://localhost:8080/pentaho) +CommandLineProcessor.INFO_OPTION_FILEPATH_DESCRIPTION=\u6a94\u6848\u76ee\u9304\u7684\u8def\u5f91 (\u7528\u65bc\u532f\u5165)\uff0c\u6216\u662f .zip \u6a94\u6848\u7684\u8def\u5f91 (\u7528\u65bc\u532f\u51fa) +CommandLineProcessor.INFO_OPTION_CHARSET_DESCRIPTION=\u8981\u7528\u65bc\u5b58\u653e\u5eab\u7684\u5b57\u5143\u96c6 (\u4f86\u81ea\u5916\u90e8\u7cfb\u7d71\u7684\u5b57\u5143\u6703\u8f49\u63db\u70ba\u6b64\u5b57\u5143\u96c6) +CommandLineProcessor.INFO_OPTION_LOGFILE_DESCRIPTION=logfile \u8a0a\u606f\u7684\u5b8c\u6574\u8def\u5f91\u8207\u6a94\u6848\u540d\u7a31 +CommandLineProcessor.INFO_OPTION_PATH_DESCRIPTION=\u8981\u5728\u5176\u4e2d\u65b0\u589e\u5df2\u532f\u5165\u7684\u6a94\u6848\u6216\u5f9e\u4e2d\u532f\u51fa\u6a94\u6848\u7684\u5b58\u653e\u5eab\u8def\u5f91 (\u4f8b\u5982 /public) +CommandLineProcessor.INFO_OPTION_OVERWRITE_DESCRIPTION=\u8986\u5beb\u6a94\u6848 (\u50c5\u9650\u532f\u5165) +CommandLineProcessor.INFO_OPTION_PERMISSION_DESCRIPTION=\u5c07 ACL \u8cc7\u8a0a\u6e05\u55ae\u6b0a\u9650\u5957\u7528\u5230\u6a94\u6848\u8207\u8cc7\u6599\u593e (\u50c5\u9650\u532f\u5165) +CommandLineProcessor.INFO_OPTION_RETAIN_OWNERSHIP_DESCRIPTION=\u4fdd\u7559\u64c1\u6709\u6b0a\u8cc7\u8a0a (\u50c5\u9650\u532f\u5165) +CommandLineProcessor.INFO_OPTION_WITH_MANIFEST_DESCRIPTION=\u5305\u62ec\u532f\u51fa\u8cc7\u8a0a\u6e05\u55ae ACL \u6a94\u6848 (\u50c5\u9650\u532f\u51fa) +CommandLineProcessor.INFO_OPTION_REST_DESCRIPTION=\u4f7f\u7528 REST (\u9810\u8a2d) \u7248\u672c (\u975e\u4f4d\u65bc Pentaho Server \u672c\u6a5f) +CommandLineProcessor.INFO_OPTION_SERVICE_DESCRIPTION=\u9019\u662f REST \u670d\u52d9\u547c\u53eb\uff0c\u4f8b\u5982 acl\u3001\u5b50\u7cfb\u3001\u5c6c\u6027 +CommandLineProcessor.INFO_OPTION_PARAMS_DESCRIPTION=\u8981\u50b3\u905e\u5230 REST \u670d\u52d9\u547c\u53eb\u7684\u53c3\u6578 +CommandLineProcessor.INFO_REST_COMPLETED=REST \u5df2\u5b8c\u6210 +CommandLineProcessor.INFO_REST_RESPONSE_STATUS=\u56de\u61c9\u72c0\u614b\uff1a +CommandLineProcessor.INFO_REST_FILE_WRITTEN=REST \u6a94\u6848\u5df2\u5beb\u5165\uff1a +CommandLineProcessor.INFO_REST_RESPONSE_RECEIVED=\u5b8c\u6210\u56de\u61c9 = {0} +CommandLineProcessor.INFO_EXPORT_COMPLETED=\u532f\u51fa\u5df2\u5b8c\u6210 +CommandLineProcessor.INFO_EXPORT_WRITTEN_TO=\u532f\u51fa\u5df2\u5beb\u5165\uff1a{0} +CommandLineProcessor.INFO_RESPONSE_STATUS=\u56de\u61c9\u72c0\u614b\uff1a{0} +CommandLineProcessor.INFO_PRINTHELP_CMDLINE=importexport +CommandLineProcessor.INFO_PRINTHELP_HEADER=\u7d71\u4e00\u5b58\u653e\u5eab\u547d\u4ee4\u5217\u532f\u5165/\u532f\u51fa\u5de5\u5177 +CommandLineProcessor.INFO_PRINTHELP_FOOTER=\u9069\u7528\u65bc\u532f\u5165\u7684\u5e38\u898b\u9078\u9805 +--import --url=http://localhost:8080/pentaho --username=admin +--password=password --charset=UTF-8 --path=/public +--file-path=c:/temp/steel-wheels.zip +--logfile=c:/temp/logfile.log +--permission=True +--overwrite=True +--retainOwnership=True +--import --url=http://localhost:8080/pentaho +--username=admin --password=password +--file-path=metadata.xmi --resource-type=DATASOURCE +--datasource-type=METADATA --overwrite=true +--metadata-domain-id=steel-wheels +--import --url=http://localhost:8080/pentaho +--username=admin --password=password +--file-path=analysis/steelwheels.mondrian.xml --resource-type=DATASOURCE +--datasource-type=ANALYSIS --overwrite=true +--analysis-datasource=steelwheels +--export --url=http://localhost:8080/pentaho --username=admin --password=password +--file-path=c:/temp/export.zip --charset=UTF-8 --path=/public/steel-wheels +--backup --url=http://localhost:8080/pentaho --username=admin --password=password +--file-path=c:/temp/export.zip --logfile=c:/temp/logfile.log +--restore --url=http://localhost:8080/pentaho --username=admin --password=password +--overwrite=true --file-path=c:/temp/export.zip --logfile=c:/temp/logfile.log +--rest --url=http://localhost:8080/pentaho --username=admin --password=password +--path=/public/pentaho-solutions/steel-wheels/reports +--logfile=c:/temp/logfile.log --service=acl +CommandLineProcessor.INFO_OPTION_RESOURCE_TYPE_DESCRIPTION=\u532f\u5165\u8cc7\u6e90\u985e\u578b (\u4f8b\u5982\u8cc7\u6599\u4f86\u6e90) +CommandLineProcessor.INFO_OPTION_DATASOURCE_TYPE_DESCRIPTION=\u8cc7\u6599\u4f86\u6e90\u985e\u578b +CommandLineProcessor.INFO_OPTION_ANALYSIS_CATALOG_DESCRIPTION=\u76ee\u9304\u63cf\u8ff0 +CommandLineProcessor.INFO_OPTION_ANALYSIS_DATASOURCE_DESCRIPTION=\u5206\u6790\u8cc7\u6599\u4f86\u6e90\u63cf\u8ff0 +CommandLineProcessor.INFO_OPTION_ANALYSIS_XMLA_ENABLED_DESCRIPTION=\u5206\u6790 XMLA \u5df2\u555f\u7528\u65d7\u6a19 +CommandLineProcessor.INFO_OPTION_METADATA_DOMAIN_ID_DESCRIPTION=\u5f8c\u8a2d\u8cc7\u6599\u7db2\u57df\u8b58\u5225\u78bc +CommandLineProcessor.INFO_OPTION_APPLY_ACL_SETTINGS=\u91dd\u5c0d\u65b0\u5efa\u7acb\u7684\u6a94\u6848\u5957\u7528 acl \u8a2d\u5b9a (\u50c5\u9650\u532f\u5165) +CommandLineProcessor.INFO_OPTION_OVERWRITE_ACL_SETTINGS=\u91dd\u5c0d\u5df2\u5b58\u5728\u7684\u6a94\u6848\u8986\u5beb acl \u8a2d\u5b9a (\u50c5\u9650\u532f\u5165) +Exporter.ERROR_0001_INVALID_SOURCE_DIRECTORY=\u4f86\u6e90\u5fc5\u9808\u662f\u6709\u6548\u7684\u76ee\u9304\uff1a{0} +Exporter.ERROR_0002_MISSING_DESTINATION=\u5fc5\u9808\u6307\u5b9a\u76ee\u7684\u5730 +Exporter.ERROR_0003_MISSING_DESTINATION=\u627e\u4e0d\u5230 JCR \u6a94\u6848\uff1a{0} +Exporter.ERROR_0004_INVALID_DESTINATION_DIRECTORY=\u76ee\u7684\u5730\u5fc5\u9808\u662f\u76ee\u9304\uff1a{0} +DefaultImportHandler.WARN_0003_IOEXCEPTION=IO \u4f8b\u5916\u72c0\u6cc1\uff1a{0} +DefaultImportHandler.ERROR_0009_OVERWRITE_CONTENT=\u6a94\u6848 {0} \u5df2\u5b58\u5728 +DefaultImportHandler.ERROR_0010_JUST_IN_TIME_FOLDER_CREATION=\u7121\u6cd5\u5efa\u7acb\u8cc7\u6599\u593e {0} +DefaultImportHandler.ERROR_0011_INVALID_FILE_NAME=\u7121\u6548\u7684\u6a94\u6848\u540d\u7a31 [{0}]\u3002 +DefaultImportHandler.ERROR_0012_INVALID_FOLDER_NAME=\u7121\u6548\u7684\u8cc7\u6599\u593e\u540d\u7a31 [{0}]\u3002 +PentahoSystemDriver.ERROR_0001_COULD_NOT_REGISTER_DRIVER=\u7121\u6cd5\u8a3b\u518a PentahoSystemDriver +SolutionImportHandler.ERROR_0001_ERROR_CREATING_SCHEDULE=\u5efa\u7acb\u6392\u7a0b\u6642\u767c\u751f\u4f8b\u5916\u72c0\u6cc1\uff1a{0} +SolutionImportHandler.SkipLocaleFile=\u5c07\u8df3\u904e [{0}]\uff0c\u5b83\u662f\u5730\u5340\u8a2d\u5b9a\u5c6c\u6027\u6a94\u3002 +SolutionImportHandler.ConnectionWithoutDatabaseType=\u7121\u6cd5\u532f\u5165\u9023\u7dda [{0}]\uff0c\u56e0\u70ba\u5b83\u6c92\u6709 databaseType\u3002 +SolutionImportHandler.SchedulesWithSpaces=\u7121\u6cd5\u532f\u5165\u6392\u7a0b\uff0c\u5617\u8a66\u4ee5\u5e95\u7dda\u53d6\u4ee3\u7a7a\u683c\u4e26\u91cd\u8a66\uff1a{0} +PentahoPlatformExporter.UNSUPPORTED_JobTrigger=\u532f\u51fa\u6642\u9047\u5230\u4e0d\u652f\u63f4\u7684 JobTrigger\uff0c\u6b63\u5728\u8df3\u904e\u5b83\uff1a{0} +PentahoPlatformExporter.ERROR_EXPORTING_JOBS=\u532f\u51fa\u5df2\u6392\u7a0b\u4f5c\u696d\u6642\u767c\u751f\u932f\u8aa4 +ScheduleExportUtil.JOB_MUST_NOT_BE_NULL=\u4f5c\u696d\u4e0d\u53ef\u4ee5\u662f Null +ERROR.Encrypting_Password=\u7121\u6cd5\u5c07\u4f7f\u7528\u8005 {0} \u7684\u5bc6\u78bc\u52a0\u5bc6 +ERROR.Restoring_Password=\u7121\u6cd5\u9084\u539f\u4f7f\u7528\u8005 {0} \u7684\u5bc6\u78bc\u3002\u6b63\u5728\u8a2d\u5b9a\u66ab\u5b58\u5bc6\u78bc\u3002 +ERROR.CreatingUser=\u7121\u6cd5\u5efa\u7acb\u4f7f\u7528\u8005 {0}\u3002 +ERROR.OverridingExistingUser=\u7121\u6cd5\u70ba\u73fe\u6709\u4f7f\u7528\u8005 [{0}] \u8a2d\u5b9a\u89d2\u8272\u6216\u5bc6\u78bc\u3002 +ROLE.Already.Exists=\u89d2\u8272 {0} \u5df2\u5b58\u5728\uff0c\u7121\u6cd5\u5efa\u7acb\u3002 +ROLE.importing=\u6b63\u5728\u532f\u5165\u89d2\u8272\uff1a{0} +USER.Already.Exists=\u4f7f\u7528\u8005 {0} \u5df2\u5b58\u5728\uff0c\u7121\u6cd5\u5efa\u7acb\u3002 +USER.importing=\u6b63\u5728\u532f\u5165\u4f7f\u7528\u8005\uff1a{0} +ERROR.ScheduledWithoutPermission=\u6a94\u6848 [{0}] \u6c92\u6709\u53ef\u6392\u7a0b\u7684\u6b0a\u9650 (isSchedulable=false)\uff0c\u4f46\u532f\u5165\u7d44\u5408\u4e2d\u6709\u4e00\u4e9b\u53c3\u8003\u8a72\u6a94\u6848\u7684\u6392\u7a0b +SCHEDULE.AssigningPermission=\u6b63\u5728\u70ba\u6a94\u6848 [{0}] \u6307\u6d3e 'isSchedulable=true' \u6b0a\u9650\u3002 +ERROR.SettingRolePermissions=\u7121\u5728\u532f\u5165\u671f\u9593\u70ba\u89d2\u8272 {0} \u8a2d\u5b9a\u6b0a\u9650\u3002 +PentahoPlatformExporter.ERROR.ExportingMetaStore=\u532f\u51fa\u5f8c\u8a2d\u5b58\u653e\u5340\u6642\u767c\u751f\u932f\u8aa4 +ERROR.ImportingUserSetting=\u7121\u6cd5\u70ba\u4f7f\u7528\u8005 {0} \u532f\u5165\u4f7f\u7528\u8005\u8a2d\u5b9a\u3002 +ZIPFILE.ProcessingEntry=\u6b63\u5728\u8655\u7406 [{0}] +ZIPFILE.ExceptionOccurred=\u8655\u7406 Zip \u6642\u767c\u751f\u4f8b\u5916\u72c0\u6cc1\uff1a +UserRoleDaoService.PassValidationError_Length=\u5177\u6709\u81f3\u5c11 {0} \u500b\u5b57\u5143 +UserRoleDaoService.PassValidationError_SpecChar=\u5177\u6709\u81f3\u5c11\u4e00\u500b\u7279\u6b8a\u5b57\u5143 +UserRoleDaoService.PassValidationError_WrongPass=\u60a8\u8f38\u5165\u7684\u662f\u932f\u8aa4\u7684\u820a\u5bc6\u78bc\u3002 +UserRoleDaoService.PassValidationError_ReadingSecProperties=\u8b80\u53d6 security.properties \u6a94\u6848\u6642\u767c\u751f\u932f\u8aa4\u3002 +RepositoryFileImportFileHandler.ProcessingFile=\u6b63\u5728\u8655\u7406 [{0}] +RepositoryFileImportFileHandler.SkippingImplicitlyCreatedFolder=\u6b63\u5728\u8df3\u904e\u8cc7\u6599\u593e [{0}] \u7684\u9805\u76ee\u3002\u5df2\u4f7f\u7528\u96b1\u542b\u65b9\u5f0f\u52a0\u4ee5\u8655\u7406\u3002 +RepositoryFileImportFileHandler.SkippingExistingFile=\u4e0d\u532f\u5165\u73fe\u6709\u7684\u6a94\u6848 [{0}] +RepositoryFileImportFileHandler.ExistingFolder=\u73fe\u6709\u7684\u8cc7\u6599\u593e [{0}] +RepositoryFileImportFileHandler.CreatingFolder=\u6b63\u5728\u5efa\u7acb\u8cc7\u6599\u593e [{0}] +RepositoryFileImportFileHandler.CreatingImpliedFolder=\u6b63\u5728\u5efa\u7acb\u96b1\u542b\u8cc7\u6599\u593e [{0}] +RepositoryFileImportFileHandler.CreatingFile=\u6b63\u5728\u5efa\u7acb\u6a94\u6848 [{0}] +RepositoryFileImportFileHandler.SkippingFileWithoutExtension=\u6b63\u5728\u8df3\u904e\u6c92\u6709\u526f\u6a94\u540d\u7684\u6a94\u6848\uff1a[{0}] +RepositoryFileImportFileHandler.SkippingFileWithoutMimeType=\u6b63\u5728\u8df3\u904e\u6c92\u6709\u4e0b\u5217 mime-type \u7684\u6a94\u6848\uff1a[{0}] +RepositoryFileImportFileHandler.SkippingFileWithUnknownMimeType=\u6b63\u5728\u8df3\u904e\u6a94\u6848 [{0}]\uff1a\u672a\u8a3b\u518a MIME \u985e\u578b [{1}] +RepositoryFileImportFileHandler.SkippingFileWithoutConverter=\u6b63\u5728\u8df3\u904e\u6c92\u6709\u526f\u6a94\u540d\u7684\u6a94\u6848\uff1a[{0}] +RepositoryFileImportFileHandler.CopyingFile=\u6b63\u5728\u5c07\u6a94\u6848 [{0}] \u8907\u88fd\u5230\u5b58\u653e\u5eab +RepositoryFileImportFileHandler.FileExists=\u6a94\u6848\u5df2\u5b58\u5728 +RepositoryFileImportFileHandler.FileIsNew=\u6a94\u6848\u662f\u65b0\u7684 +RepositoryFileImportFileHandler.OwnerFromSession=\u6b63\u5728\u5f9e\u5de5\u4f5c\u968e\u6bb5\u53d6\u5f97\u64c1\u6709\u8005 +RepositoryFileImportFileHandler.OwnerFromExistingFile=\u6b63\u5728\u5f9e\u73fe\u6709\u6a94\u6848\u53d6\u5f97\u64c1\u6709\u8005 +RepositoryFileImportFileHandler.OwnerFromManifest=\u6b63\u5728\u5f9e\u8cc7\u8a0a\u6e05\u55ae\u53d6\u5f97\u64c1\u6709\u8005 +RepositoryFileImportFileHandler.PermissionsFromManifest=\u6b63\u5728\u5f9e\u8cc7\u8a0a\u6e05\u55ae\u53d6\u5f97\u6b0a\u9650 +RepositoryFileImportFileHandler.PermissionsFromSettings=\u6b63\u5728\u5f9e\u9810\u8a2d\u8a2d\u5b9a\u53d6\u5f97\u6b0a\u9650 +RepositoryFileImportFileHandler.PermissionsFromExistingFile=\u6b63\u5728\u5f9e\u73fe\u6709\u6a94\u6848\u53d6\u5f97\u6b0a\u9650 +RepositoryFileImportFileHandler.ExtensionNotApproved=\u6a94\u6848 [{0}] \u4e26\u672a\u4f4d\u65bc\u6838\u51c6\u5b58\u653e\u65bc\u5b58\u653e\u5eab\u4e4b\u526f\u6a94\u540d\u7684\u6e05\u55ae\u3002 +RepositoryFileImportFileHandler.ExtraMetaDataToNewFile=\u5c07\u984d\u5916\u5f8c\u8a2d\u8cc7\u6599\u5957\u7528\u5230\u65b0\u7684\u6a94\u6848 +RepositoryFileImportFileHandler.ExtraMetaDataToExistingFile=\u5c07\u984d\u5916\u5f8c\u8a2d\u8cc7\u6599\u5957\u7528\u5230\u5df2\u5b58\u5728\u7684\u6a94\u6848 diff --git a/extensions/src/main/resources/org/pentaho/platform/plugin/services/webservices/messages/messages_CN.properties b/extensions/src/main/resources/org/pentaho/platform/plugin/services/webservices/messages/messages_CN.properties new file mode 100644 index 00000000000..29a42f579f7 --- /dev/null +++ b/extensions/src/main/resources/org/pentaho/platform/plugin/services/webservices/messages/messages_CN.properties @@ -0,0 +1,59 @@ +# Copyright 2008 - 2017 Hitachi Vantara. All rights reserved. +# This program is free software; you can redistribute it and/or modify it under the +# terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software +# Foundation. +# +# You should have received a copy of the GNU Lesser General Public License along with this +# program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html +# or from the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# +# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; +# without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# Message keys that looks like abc.USER_XYZ will be seen by users in normal operation +# Message keys that looks like abc.ERROR_1234 will only be seen by users when errors happen +# Message keys that looks like abc.INFO_XYZ and abc.DEBUG_XYZ and abc.WARN_XYZ +# will only be seen in log files + +WebServicePlugin.USER_LAUNCH_PAGE_TITLE=\u6b61\u8fce\u4f7f\u7528 Pentaho Web \u670d\u52d9 +WebServicePlugin.USER_LINKS=\u9023\u7d50 +WebServicePlugin.USER_LIST_SERVICES=\u670d\u52d9\u6e05\u55ae... +WebServicePlugin.USER_ADMIN=\u7cfb\u7d71\u7ba1\u7406... +WebServicePlugin.USER_LAUNCH_PAGE_MESSAGE=\u80fd\u63d0\u4f9b\u4e00\u9ede\u5354\u52a9\u55ce...\uff1f +WebServicePlugin.USER_NO_DESCRIPTION=\u6b64\u670d\u52d9\u6c92\u6709\u53ef\u7528\u7684\u63cf\u8ff0 +WebServicePlugin.USER_SERVICE_DESCRIPTION=\u63cf\u8ff0\uff1a +WebServicePlugin.USER_SERVICE_STATUS=\u72c0\u614b\uff1a +WebServicePlugin.USER_SERVICE_WSDL=WSDL\uff1a +WebServicePlugin.USER_ENABLED=\u5df2\u555f\u7528 +WebServicePlugin.USER_DISABLED=\u5df2\u505c\u7528 +WebServicePlugin.USER_OPERATIONS=\u53ef\u7528\u7684\u4f5c\u696d +WebServicePlugin.USER_NO_OPERATIONS=\u672a\u6307\u5b9a\u4efb\u4f55\u4f5c\u696d +WebServicePlugin.USER_SERVICE_URL=\u670d\u52d9\uff1a +WebServicePlugin.USER_RESET=\u91cd\u8a2d +WebServicePlugin.USER_RESET_TRIED=\u5df2\u5617\u8a66\u91cd\u8a2d +WebServiceContentGenerator.ERROR_0001_AXIS_CONFIG_IS_NULL=\u7121\u6cd5\u5efa\u7acb Web \u670d\u52d9\u8a2d\u5b9a\u7269\u4ef6 +AxisConfig.ERROR_0001_OBJECT_FACTORY_EXCEPTION=\u7121\u6cd5\u5efa\u7acb IWebServiceConfigurator \u985e\u5225 +AxisConfig.ERROR_0002_CONTEXT_INIT_EXCEPTION=\u7121\u6cd5\u5c07 Web \u670d\u52d9\u4e0a\u4e0b\u6587\u521d\u59cb\u5316 + +WebServiceContentGenerator.ERROR_0003_PROCESSING_FAULT=\u8655\u7406 Web \u670d\u52d9\u932f\u8aa4\u6642\u767c\u751f\u4f8b\u5916\u72c0\u6cc1 +WebServiceContentGenerator.ERROR_0004_PATH_PARAMS_IS_MISSING=\u53c3\u6578\u63d0\u4f9b\u8005 'path' \u907a\u5931 +WebServiceContentGenerator.ERROR_0005_SERVICE_NAME_IS_MISSING=URL \u4e2d\u7684\u670d\u52d9\u540d\u7a31\u907a\u5931 +WebServiceContentGenerator.ERROR_0006_SERVICE_IS_INVALID=\u8981\u6c42\u7684\u670d\u52d9\u7121\u6548\uff1a{0} + +ListServices.USER_WEB_SERVICES=Pentaho Web \u670d\u52d9 +ListServices.USER_NO_SERVICES=\u672a\u5b9a\u7fa9\u4efb\u4f55 Web \u670d\u52d9 + +RunService.ERROR_0001_ERROR_DURING_EXECUTION=\u57f7\u884c Web \u670d\u52d9\u671f\u9593\u767c\u751f\u932f\u8aa4 + +# The rest of these messages do not need to be localized +test.MESSAGE1=\u6e2c\u8a66\u8a0a\u606f 1 +test.MESSAGE2=\u6e2c\u8a66\u8a0a\u606f 2\uff1a{0} +test.MESSAGE3=\u6e2c\u8a66\u8a0a\u606f 3\uff1a{0}{1} +test.MESSAGE4=\u6e2c\u8a66\u8a0a\u606f 4\uff1a{0}{1}{2} +test.MESSAGE5=\u6e2c\u8a66\u8a0a\u606f 5\uff1a{0}{1}{2}{3} +test.ERROR_0001_TEST_ERROR1=\u6e2c\u8a66\u932f\u8aa4 1 +test.ERROR_0002_TEST_ERROR2=\u6e2c\u8a66\u932f\u8aa4 2\uff1a{0} +test.ERROR_0003_TEST_ERROR3=\u6e2c\u8a66\u932f\u8aa4 3\uff1a{0}{1} +test.ERROR_0004_TEST_ERROR4=\u6e2c\u8a66\u932f\u8aa4 4\uff1a{0}{1}{2} +test.encode1=\u6e2c\u8a66\uff1a\u0081 \u0099 diff --git a/extensions/src/main/resources/org/pentaho/platform/web/hsqldb/messages/messages_CN.properties b/extensions/src/main/resources/org/pentaho/platform/web/hsqldb/messages/messages_CN.properties new file mode 100644 index 00000000000..7396b079777 --- /dev/null +++ b/extensions/src/main/resources/org/pentaho/platform/web/hsqldb/messages/messages_CN.properties @@ -0,0 +1,10 @@ +HsqlDatabaseStarterBean.ERROR_0001_INVALID_PARAMETERS=\u7528\u65bc\u555f\u52d5\u5167\u5d4c SampleData \u8cc7\u6599\u5eab\u7684\u53c3\u6578\u7121\u6548\u3002 +HsqlDatabaseStarterBean.ERROR_0002_INVALID_CONFIGURATION=\u5075\u6e2c\u5230\u7121\u6548\u7684\u7bc4\u4f8b\u8cc7\u6599\u8a2d\u5b9a - \u7121\u6cd5\u555f\u52d5\u5167\u5d4c\u7684 SampleData \u8cc7\u6599\u5eab\u3002 +HsqlDatabaseStarterBean.ERROR_0003_DID_NOT_STOP=\u5167\u5d4c\u7684 SampleData \u8cc7\u6599\u5eab\u5728\u7b49\u5f85\u9577\u6642\u9593\u4e4b\u5f8c\u4ecd\u6c92\u6709\u505c\u6b62\u3002 +HsqlDatabaseStarterBean.WARN_NO_DATABASES=\u7531\u65bc\u5148\u524d\u7684\u932f\u8aa4\uff0c\u5c07\u4e0d\u6703\u6709\u8cc7\u6599\u5eab\u53ef\u7528\u3002 +HsqlDatabaseStarterBean.ERROR_0004_INVALID_PORT=\u6307\u5b9a\u7684\u9023\u63a5\u57e0\u7121\u6548\u3002\u9023\u63a5\u57e0\u5fc5\u9808\u4ecb\u65bc\u662f 0 \u5230 65535 (\u542b) \u4e4b\u9593\u7684\u6578\u5b57\u3002\u5c07\u4f7f\u7528 {0} \u7684\u5bb9\u932f\u79fb\u8f49\u9023\u63a5\u57e0\u3002 +HsqlDatabaseStarterBean.ERROR_0005_SPECIFIED_PORT_IN_USE=\u5df2\u5728\u4f7f\u7528\u6307\u5b9a\u7684\u9023\u63a5\u57e0 [{0}]\u3002\u5c07\u6539\u70ba\u4f7f\u7528 {1} \u7684\u5bb9\u932f\u79fb\u8f49\u9023\u63a5\u57e0\u3002 +HsqlDatabaseStarterBean.ERROR_0006_DEFAULT_PORT_IN_USE=\u5df2\u5728\u4f7f\u7528\u9810\u8a2d\u9023\u63a5\u57e0 9001\u3002\u60a8\u662f\u5426\u5df2\u7d93\u5728\u53e6\u4e00\u500b\u8655\u7406\u7a0b\u5e8f\u4e2d\u57f7\u884c HSQLDB\uff1fHSQLDB \u555f\u52d5\u5668\u7121\u6cd5\u7e7c\u7e8c\u3002 +HsqlDatabaseStarterBean.ERROR_0007_SPECIFIED_LOCATION_IS_INVALID=\u6307\u5b9a\u7684\u7bc4\u4f8b\u8cc7\u6599\u4f4d\u7f6e [{0}] \u672a\u5c0d\u61c9\u5230 .properties \u6a94\u6848\u3002\u6b63\u5728\u4f7f\u7528\u9810\u8a2d ../../hsqldb/sampledata +HsqlDatabaseStarterBean.ERROR_0008_SPECIFIED_PORT_IN_USE_NO_FAILOVER=\u5df2\u5728\u4f7f\u7528\u6307\u5b9a\u7684\u9023\u63a5\u57e0 [{0}]\u3002\u4e0d\u5141\u8a31\u5bb9\u932f\u79fb\u8f49\u5230\u9810\u8a2d\u9023\u63a5\u57e0\u3002 +HsqlDatabaseStartupListener.ERROR_0001_HSQLDB_ENTRY_MALFORMED=hsqldb-databases \u9805\u76ee\u7684\u683c\u5f0f\u4e0d\u6b63\u78ba\u3002\u9805\u76ee\u7684\u683c\u5f0f\u61c9\u8a72\u8981\u662f diff --git a/extensions/src/main/resources/org/pentaho/platform/web/http/messages/messages_cn.properties b/extensions/src/main/resources/org/pentaho/platform/web/http/messages/messages_cn.properties index 35d16a90e3b..96ac75e805b 100644 --- a/extensions/src/main/resources/org/pentaho/platform/web/http/messages/messages_cn.properties +++ b/extensions/src/main/resources/org/pentaho/platform/web/http/messages/messages_cn.properties @@ -12,25 +12,120 @@ # without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # See the GNU Lesser General Public License for more details. #Wed Jun 04 19:27:45 EDT 2008 -UI.USER_CANCEL=[cn_246] Cancel -HttpSessionListener.ERROR_0001_ERROR_DESTROYING_SESSION=[cn_11] Error destroying session -UI.USER_CLOSE=[cn_17] Close -SolutionContextListener.INFO_SYSTEM_READY=[cn_47] Pentaho BI Platform server is ready. -UI.USER_FORUMS=[cn_23] Forums... -SolutionContextListener.INFO_INITIALIZING=[cn_60] Pentaho BI Platform Initializing -HttpSessionListener.DEBUG_SESSION_CREATED=[cn_12] Session {0} created -UI.USER_HOME=[cn_31] Home -SolutionManagerUIComponent.INFO_0001_FILE_SAVED=[cn_313] FileSaved to\: -SolutionContextListener.INFO_SYSTEM_EXITING=[cn_39] Pentaho BI Platform Exiting -XMLComponentFactory.ERROR_0001_Unable_To_Create_Class=[cn_47] Unable to create class\: -UI.USER_ABOUT=[cn_54] About -SolutionContextListener.INFO_CONTEXT_PATH=[cn_58] contextPath\={0} -UI.USER_DOWNLOADS=[cn_66] Downloads... -SolutionContextListener.INFO_SYSTEM_NOT_READY=[cn_68] Pentaho BI Platform server failed to properly initialize. The system will not be available for requests. -SolutionContextListener.INFO_ROOT_PATH=[cn_44] rootPath\={0} -UI.USER_SOLUTIONS=[cn_428] Solutions -SolutionContextListener.INFO_SERVLET_CONTEXT=[cn_36] ServletContext\={0} -UI.USER_ADMIN=[cn_85] Admin -SolutionContextListener.ERROR_0001_NO_ROOT_PATH=[cn_77] Solution path is invalid -UI.USER_NAVIGATE=[cn_88] Navigate +UI.USER_CANCEL=[cn_246] \u53d6\u6d88 +HttpSessionListener.ERROR_0001_ERROR_DESTROYING_SESSION=[cn_11] \u7d42\u7d50\u5de5\u4f5c\u968e\u6bb5\u6642\u767c\u751f\u932f\u8aa4 +UI.USER_CLOSE=[cn_17] \u95dc\u9589 +SolutionContextListener.INFO_SYSTEM_READY=[cn_47] Pentaho BI Platform \u4f3a\u670d\u5668\u5df2\u5c31\u7dd2\u3002 +UI.USER_FORUMS=[cn_23] \u8ad6\u58c7... +SolutionContextListener.INFO_INITIALIZING=[cn_60] Pentaho BI Platform \u6b63\u5728\u521d\u59cb\u5316 +HttpSessionListener.DEBUG_SESSION_CREATED=[cn_12] \u5df2\u5efa\u7acb\u5de5\u4f5c\u968e\u6bb5 {0} +UI.USER_HOME=[cn_31] \u9996\u9801 +SolutionManagerUIComponent.INFO_0001_FILE_SAVED=[cn_313] \u6a94\u6848\u5df2\u5132\u5b58\u5230\uff1a +SolutionContextListener.INFO_SYSTEM_EXITING=[cn_39] Pentaho BI Platform \u6b63\u5728\u7d50\u675f +XMLComponentFactory.ERROR_0001_Unable_To_Create_Class=[cn_47] \u7121\u6cd5\u5efa\u7acb\u985e\u5225\uff1a +UI.USER_ABOUT=[cn_54] \u95dc\u65bc +SolutionContextListener.INFO_CONTEXT_PATH=[cn_58] contextPath={0} +UI.USER_DOWNLOADS=[cn_66] \u4e0b\u8f09... +SolutionContextListener.INFO_SYSTEM_NOT_READY=[cn_68] Pentaho BI Platform \u4f3a\u670d\u5668\u7121\u6cd5\u6b63\u78ba\u521d\u59cb\u5316\u3002\u7cfb\u7d71\u5c07\u7121\u6cd5\u7528\u65bc\u8655\u7406\u8981\u6c42\u3002 +SolutionContextListener.INFO_ROOT_PATH=[cn_44] rootPath={0} +UI.USER_SOLUTIONS=[cn_428] \u65b9\u6848 +SolutionContextListener.INFO_SERVLET_CONTEXT=[cn_36] ServletContext={0} +UI.USER_ADMIN=[cn_85] \u7cfb\u7d71\u7ba1\u7406 +SolutionContextListener.ERROR_0001_NO_ROOT_PATH=[cn_77] \u65b9\u6848\u8def\u5f91\u7121\u6548 +UI.USER_NAVIGATE=[cn_88] \u700f\u89bd PentahoSystem.USER_SYSTEM_TITLE=[cn_76] Pentaho Business Intelligence Platform +HtmlMenuProvider.ERROR_0001_COULD_NOT_CREATE_XUL_LOADER=\u7121\u6cd5\u5efa\u7acb HtmlXulLoader +PentahoSystem.ERROR_0003_SUBSCRIPTION_REPOSITORY_NOT_INITIALIZED= +Scheduler.ERROR_0001_SCHEDULER_CANNOT_CANCEL=\u7121\u6cd5\u53d6\u6d88\uff1a{0} +SolutionContextListener.ERROR_0002_BAD_OBJECT_FACTORY=\u7121\u6cd5\u5efa\u7acb\u4e0b\u5217\u985e\u578b\u7684\u7269\u4ef6\u8655\u7406\u7ad9\uff1a{0} +SolutionContextListener.WARN_WEB_XML_PARAM_DEPRECATED=\u5728 web.xml \u4e2d\u627e\u5230\u7684\u53c3\u6578 {0} \u5df2\u6dd8\u6c70\u3002\u8acb\u6539\u70ba\u5728\u6a94\u6848 server.properties \u4e2d\u8a2d\u5b9a "{0}={1}"\u3002 +HttpWebService.PARAMETER_GROUP_SYSTEM=\u7cfb\u7d71\u53c3\u6578 +HttpWebService.PARAMETER_GROUP_USER=\u53c3\u6578 +UI.ERROR_0001_BAD_TEMPLATE=\u7121\u6cd5\u8f09\u5165\u7bc4\u672c\uff1a{0} +UI.USER_COPYRIGHT=\u8457\u4f5c\u6b0a +UI.USER_DELETE=\u522a\u9664 +UI.USER_DEMOS=\u793a\u7bc4... +UI.USER_FILE_CACHE=\u6211\u7684\u5de5\u4f5c\u5340 +UI.USER_LOGOUT=\u767b\u51fa +UI.USER_NEW_CONTENT=*\u65b0\u6a94\u6848* +UI.USER_PENTAHO.COM=HitachiVantara.com... +UI.USER_PORTAL=\u5165\u53e3\u7db2\u7ad9 +UI.USER_VIEW=\u6aa2\u8996 +UI.USER_ERROR_0003_NO_BACKGROUND_EXECUTION=\u672a\u5728 pentaho.xml \u4e2d\u5b9a\u7fa9\u80cc\u666f\u57f7\u884c\u3002 +HttpSessionReuseDetectionFilter.DEBUG_PROCESS_AUTHN=\u8981\u6c42\u662f\u8981\u8655\u7406\u9a57\u8b49 +HttpSessionReuseDetectionFilter.DEBUG_USER_ALREADY_LOGGED_IN=\u4f7f\u7528\u8005 "{0}" \u5df2\u767b\u5165 +HttpSessionReuseDetectionFilter.DEBUG_INVALIDATING_SESSION=\u4f7f\u5de5\u4f5c\u968e\u6bb5\u7121\u6548 +HttpSessionReuseDetectionFilter.DEBUG_REDIRECTING=\u6b63\u5728\u91cd\u65b0\u5c0e\u5411\u5230 {0} +HttpSessionReuseDetectionFilter.ERROR_0001_FILTERPROCESSESURL_NOT_SPECIFIED=\u5fc5\u9808\u6307\u5b9a filterProcessesUrl +HttpSessionReuseDetectionFilter.ERROR_0002_SESSIONREUSEDETECTEDURL_NOT_SPECIFIED=\u5fc5\u9808\u6307\u5b9a sessionReuseDetectedUrl +RequestParameterAuthenticationFilter.ERROR_0001_AUTHMGR_REQUIRED=\u9700\u8981 AuthenticationManager +RequestParameterAuthenticationFilter.DEBUG_AUTH_USERID=\u6388\u6b0a userid\uff1a{0} +RequestParameterAuthenticationFilter.DEBUG_AUTHENTICATION_REQUEST=\u91dd\u5c0d\u4f7f\u7528\u8005\uff1a{0} \u7684\u9a57\u8b49\u8981\u6c42\u5df2\u5931\u6557\uff1a{1} +RequestParameterAuthenticationFilter.DEBUG_AUTH_SUCCESS=\u9a57\u8b49\u6210\u529f\uff1a{0} +RequestParameterAuthenticationFilter.ERROR_0002_AUTHM_ENTRYPT_REQUIRED=\u9700\u8981 AuthenticationEntryPoint +RequestParameterAuthenticationFilter.ERROR_0003_USER_NAME_PARAMETER_MISSING=userNameParameter \u5fc5\u9808\u8a2d\u5b9a\u70ba\u6709\u6548\u7684\u8981\u6c42\u53c3\u6578\u540d\u7a31\u3002 +RequestParameterAuthenticationFilter.ERROR_0004_PASSWORD_PARAMETER_MISSING=passwordParameter \u5fc5\u9808\u8a2d\u5b9a\u70ba\u6709\u6548\u7684\u8981\u6c42\u53c3\u6578\u540d\u7a31\u3002 +RequestParameterAuthenticationFilter.ERROR_0005_HTTP_SERVLET_REQUEST_REQUIRED=\u53ea\u80fd\u8655\u7406 HttpServletRequest +RequestParameterAuthenticationFilter.ERROR_0006_HTTP_SERVLET_RESPONSE_REQUIRED=\u53ea\u80fd\u8655\u7406 HttpServletResponse +MessageFormatHelper.ERROR_PAGE_TITLE= +MessageFormatHelper.USER_START_ACTION=Pentaho BI Platform - \u958b\u59cb\u52d5\u4f5c +MessageFormatHelper.USER_ACTION_SUCCESSFUL=\u52d5\u4f5c\u6210\u529f +MessageFormatHelper.USER_SERVER_VERSION= +MessageFormatHelper.ERROR_0001_REQUEST_FAILED= +MessageFormatHelper.ERROR_0002_COULD_NOT_PROCESS= +PRO_SUBSCRIPTREP.ERROR_0005_GENERAL_ERROR=\u8a02\u95b1\u5b58\u653e\u5eab\u4e2d\u767c\u751f\u932f\u8aa4 +PentahoAwareCharacterEncodingFilter.ENCODING_IN_CTX=\u4e0a\u4e0b\u6587\u4e2d\u7684\u7de8\u78bc\uff1a{0} +PentahoAwareCharacterEncodingFilter.ENCODING_IN_FILTER_INIT=\u7be9\u9078\u521d\u59cb\u5316\u4e2d\u7684\u7de8\u78bc\uff1a{0} +PentahoAwareCharacterEncodingFilter.COULD_NOT_FIND_ENCODING=\u627e\u4e0d\u5230\u7de8\u78bc\u3002\u4f7f\u7528\u9810\u8a2d\u7de8\u78bc\uff1a{0} +HttpOutputHandler.WARN_0001_VALUE_IS_NULL=\u8981\u8f38\u51fa\u7684\u503c\u662f Null +HttpOutputHandler.ERROR_0001_REDIRECT_FAILED=\u503c {0} \u7684\u91cd\u65b0\u5c0e\u5411\u5931\u6557 +MondrianCatalogPublisher.ERROR_0005_PUBLISH_EXCEPTION=\u767c\u884c\u6642\u767c\u751f\u4f8b\u5916\u72c0\u6cc1 +UI.USER_FILE=\u6a94\u6848 +UI.USER_VIEW=\u6aa2\u8996 +UI.USER_NIGHTLY=\u6bcf\u591c\u7d44\u5efa... +UI.USER_TRACKER=\u554f\u984c\u8ffd\u8e64\u5668... +UI.USER_NEW_REPORT=\u65b0\u589e\u81e8\u6a5f\u64cd\u4f5c\u5831\u544a... +UI.USER_NEW_PIVOT=\u65b0\u589e\u5206\u6790\u6aa2\u8996... +WebTemplateHelperExperimental.ERROR_0001_COULD_NOT_CREATE_MENUBAR=\u7121\u6cd5\u5efa\u7acb\u529f\u80fd\u8868\u7cfb\u7d71 +WebSpringPentahoObjectFactory.ERROR_0001_CONTEXT_NOT_SUPPORTED=\u6b64\u8655\u7406\u7ad9\u76ee\u524d\u50c5\u652f\u63f4 {0} \u4f5c\u70ba\u57f7\u884c\u968e\u6bb5\u4e0a\u4e0b\u6587\u3002\u60a8\u5df2\u5617\u8a66\u4f7f\u7528 {1} \u521d\u59cb\u5316 +CheckRefererFilter.ERROR_0001_REFERER_PREFIX_NOT_SPECIFIED=\u5fc5\u9808\u6307\u5b9a\u521d\u59cb\u5316\u53c3\u6578 refererPrefix\u3002 +CheckRefererFilter.ERROR_0002_REDIRECT_NOT_SPECIFIED=\u5fc5\u9808\u6307\u5b9a\u521d\u59cb\u5316\u53c3\u6578 redirectTo\u3002 +FileResource.IMPORT_SUCCESS=\u532f\u5165\u6210\u529f +FileResource.ILLEGAL_PATHID=\u5df2\u5f9e\u4e0d\u5408\u6cd5\u7684 pathId {0} \u79fb\u9664\u659c\u7dda +FileResource.COPY_PREFIX=-\u8907\u672c +FileResource.DUPLICATE_INDICATOR=({0}) +FileResource.PARAM_FAILURE=\u53c3\u6578\u5167\u5bb9\u7522\u751f\u5668\u5931\u6557\uff1a{0} +FileResource.EXPORT_FAILED=\u532f\u51fa\u5931\u6557\uff1a{0} +FileResource.DESTINATION_PATH_UNKNOWN=\u627e\u4e0d\u5230\u76ee\u7684\u5730\u8def\u5f91\uff1a{0} +FileResource.FILE_NOT_FOUND=\u627e\u4e0d\u5230\u6a94\u6848\uff1a{0} +FileResource.FILE_MOVE_FAILED=\u91dd\u5c0d\u4e0b\u5217\u8def\u5f91\u7684\u79fb\u52d5\u5931\u6557\uff1a{0} +FileResource.FILE_MOVE_ACCESS_DENIED=\u79fb\u52d5\u6a94\u6848\u6642\u5b58\u53d6\u906d\u62d2\uff1a{0} +FileResource.FILE_COPY_ACCESS_DENIED=\u8907\u88fd\u6a94\u6848\u6642\u5b58\u53d6\u906d\u62d2\uff1a{0} +FileResource.FILE_RESTORE_FAILED=\u91dd\u5c0d\u4e0b\u5217\u8def\u5f91\u7684\u9084\u539f\u5931\u6557\uff1a{0} +FileResource.FILE_SET_CONTENT_CREATOR=\u91dd\u5c0d\u4e0b\u5217\u8def\u5f91\u7684\u8a2d\u5b9a\u5167\u5bb9\u5efa\u7acb\u8005\u5931\u6557\uff1a{0} +FileResource.FILE_GET_LOCALES=\u91dd\u5c0d\u4e0b\u5217\u8def\u5f91\u7684\u53d6\u5f97\u5730\u5340\u8a2d\u5b9a\u5931\u6557\uff1a{0} +FileResource.CAN_ADMINISTER=\u6b63\u5728\u6aa2\u67e5\u4f7f\u7528\u8005\u662f\u5426\u6709\u5931\u6557\u7684\u7cfb\u7d71\u7ba1\u7406\u539f\u5247 +FileResource.WORKSPACE_FOLDER_NOT_FOUND=\u627e\u4e0d\u5230\u5de5\u4f5c\u5340\u8cc7\u6599\u593e\uff1a{0} +FileResource.GENERATED_CONTENT_FAILED=\u53d6\u5f97\u91dd\u5c0d {0} \u6240\u7522\u751f\u7684\u5167\u5bb9\u5931\u6557 +FileResource.GENERATED_CONTENT_FOR_USER_FAILED=\u53d6\u5f97\u7531 {1} \u91dd\u5c0d {0} \u6240\u7522\u751f\u7684\u5167\u5bb9\u5931\u6557 +FileResource.GENERATED_CONTENT_FOR_SCHEDULE_FAILED=\u53d6\u5f97\u91dd\u5c0d {0} \u7531\u6392\u7a0b\u6240\u7522\u751f\u7684\u5167\u5bb9\u5931\u6557 +FileResource.CANNOT_GET_EXTENSION=\u7121\u6cd5\u53d6\u5f97\u526f\u6a94\u540d +FileResource.CANNOT_GET_MIMETYPE=\u7121\u6cd5\u53d6\u5f97\u6a94\u6848\u7684 MIME \u985e\u578b +FileResource.CANNOT_GET_CONVERTER=\u7121\u6cd5\u53d6\u5f97\u6a94\u6848\u7684\u8f49\u63db\u7a0b\u5f0f +FileResource.CANNOT_GET_INPUT_STREAM=\u7121\u6cd5\u53d6\u5f97\u6a94\u6848\u7684\u8f38\u5165\u4e32\u6d41 +FileResource.CANNOT_GET_FILE_DATA=\u7121\u6cd5\u53d6\u5f97\u6a94\u6848\u7684\u8cc7\u6599 +FileOutputResource.XACTION_EXECUTION_FAILED=\u7121\u6cd5\u57f7\u884c XAction {0} +FileOutputResource.NO_CONTENT_GENERATOR=\u627e\u4e0d\u5230\u985e\u578b\u70ba {0} \u7684\u5167\u5bb9\u7522\u751f\u5668 +PluginFileResource.COULD_NOT_READ_FILE=\u7121\u6cd5\u8b80\u53d6\u6a94\u6848 {0} +PluginFileResource.UNDETERMINED_MIME_TYPE=\u7121\u6cd5\u5224\u65b7 {0} \u7684 MIME \u985e\u578b\uff0c\u6b63\u5728\u4f7f\u7528 * +XactionUtil.HTML_OUTPUT_NOT_SUPPORTED=\u7121\u6cd5\u4ee5 html \u8f38\u51fa\u7684\u5f62\u5f0f\u57f7\u884c XAction +XactionUtil.XML_OUTPUT_NOT_SUPPORTED=\u7121\u6cd5\u4ee5 xml \u8f38\u51fa\u7684\u5f62\u5f0f\u57f7\u884c XAction +XactionUtil.CANNOT_REMOVE_OUTPUT_FILE=\u7121\u6cd5\u79fb\u9664 XAction \u8f38\u51fa\u6a94\u6848 {0} +XactionUtil.SKIP_REMOVING_OUTPUT_FILE=\u7531 XActions \u5beb\u5165\u7684\u6a94\u6848\u5fc5\u9808\u4ee5\u5916\u90e8\u65b9\u5f0f\u6e05\u9664\uff1a{0} +SystemResource.GENERAL_ERROR=\u53d6\u5f97\u7cfb\u7d71\u8cc7\u6e90\u6642\u767c\u751f\u932f\u8aa4 +HsqlDatabaseStartupListener.ERROR_0001_HSQLDB_ENTRY_MALFORMED=\u8981\u53d6\u5f97\u8cc7\u6599\u5eab\u7684 SQL \u683c\u5f0f\u4e0d\u6b63\u78ba +HsqldbStartupListener.ERROR_0004_INVALID_PORT=\u6307\u5b9a\u7684\u9023\u63a5\u57e0\u7121\u6548\u3002\u6b63\u5728\u4f7f\u7528 {0} \u7684\u9810\u8a2d\u503c +FileResource.INCORRECT_EXTENSION={0} \u5177\u6709\u4e0d\u6b63\u78ba\u7684\u526f\u6a94\u540d\u3002 +FileResource.HOME_FOLDER_DISPLAY_TITLE=\u9996\u9801 +FileResource.PUBLIC_FOLDER_DISPLAY_TITLE=\u516c\u7528 +RepositoryResource.USER_NOT_AUTHORIZED_TO_EDIT=\u4f7f\u7528\u8005\u672a\u7372\u5f97\u7de8\u8f2f\u8a72\u5167\u5bb9\u7684\u6388\u6b0a\u3002\u8acb\u9023\u7d61\u60a8\u7684\u7cfb\u7d71\u7ba1\u7406\u54e1\u3002 diff --git a/extensions/src/main/resources/org/pentaho/platform/web/jsp/messages/messages_cn.properties b/extensions/src/main/resources/org/pentaho/platform/web/jsp/messages/messages_cn.properties index 63fe54de880..a9295633050 100644 --- a/extensions/src/main/resources/org/pentaho/platform/web/jsp/messages/messages_cn.properties +++ b/extensions/src/main/resources/org/pentaho/platform/web/jsp/messages/messages_cn.properties @@ -12,29 +12,175 @@ # without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # See the GNU Lesser General Public License for more details. #Wed Jun 04 19:30:54 EDT 2008 -UI.USER_BURST_EDIT_DATA_TITLE=[cn_420] Edit Bursting Destinations -PIECHART.TEST_PIE_CHART=[cn_121] Test Pie Chart -UI.USER_PUBLISHER_TITLE=[cn_446] Publisher Administration -UI.USER_SAMPLES=[cn_443] Samples and Examples -UI.USER_BURST_MANAGER=[cn_436] Manager -BaseTest.DEBUG_JUNIT_TEST=[cn_90] JUnit Test -WIDGETS.ERROR_0001_DISPLAY_ERROR=[cn_465] Could not create widget display -UI.USER_UPDATE=[cn_444] Update... -PIECHART.USER_SAMPLES=[cn_119] User Samples -UI.USER_SELECT=[cn_454] Select\: -UI.USER_ANALYSIS=[cn_413] Analysis -PIECHART.DISPLAY_ERROR=[cn_120] Display Error -UI.USER_ANALYSIS_INVALID_PAGE=[cn_427] This page cannot be accessed directly. It must be linked to from other pages -SCHEDULER_ADMIN.ERROR_0001_DISPLAY_ERROR=[cn_459] Could not create Scheduler Admin display -PUBLISHERS.ERROR_0001_PUBLISHERS_ERROR=[cn_421] Could not get information about publishers -UI.USER_BURST_EMAIL=[cn_439] E-Mail -NAVIGATE.ERROR_0001_NAVIGATE_ERROR=[cn_415] Could not create navigation display -CHART.DISPLAY_ERROR=[cn_123] Display Error -UI.USER_WELCOME=[cn_75] Welcome -UI.USER_ADMIN_INTRO=[cn_81] Welcome to Pentaho Administration. Here administrators can manage schedules and refresh the Pentaho BI Server settings. Additional information for Administrators - Pentaho Professional Edition can integrate with LDAP or MSAD providers for single sign on and securing of reports, track the changes throughout the lifecycle of solution from development to production, understand the usage patterns of the application through auditing, and much more. For more information see www.hitachivantara.com -UI.USER_ADMIN=[cn_85] Admin -UI.USER_BURST_REGION=[cn_445] Region -SOLUTION_MANAGER.ERROR_0001_DISPLAY_ERROR=[cn_424] Could not create Solution Manager display -UI.USER_BURST_EDIT_DATA_HINT=[cn_412] Enter the names and email addresses for yourself and a few friends. When you run the bursting examples each person will receive a report that is specific for the region you selected for them. -UI.USER_TEST_SUITE_TITLE=[cn_425] Test Suite -CHART.USER_SAMPLES=[cn_122] User Samples +UI.USER_BURST_EDIT_DATA_TITLE=[cn_420] \u7de8\u8f2f\u7206\u91cf\u76ee\u7684\u5730 +PIECHART.TEST_PIE_CHART=[cn_121] \u6e2c\u8a66\u5713\u9905\u5716 +UI.USER_PUBLISHER_TITLE=[cn_446] \u767c\u884c\u8005\u7cfb\u7d71\u7ba1\u7406 +UI.USER_SAMPLES=[cn_443] \u6a23\u672c\u8207\u7bc4\u4f8b +UI.USER_BURST_MANAGER=[cn_436] \u7ba1\u7406\u54e1 +BaseTest.DEBUG_JUNIT_TEST=[cn_90] JUnit \u6e2c\u8a66 +WIDGETS.ERROR_0001_DISPLAY_ERROR=[cn_465] \u7121\u6cd5\u5efa\u7acb\u5c0f\u5de5\u5177\u986f\u793a +UI.USER_UPDATE=[cn_444] \u66f4\u65b0... +PIECHART.USER_SAMPLES=[cn_119] \u4f7f\u7528\u8005\u7bc4\u4f8b +UI.USER_SELECT=[cn_454] \u9078\u53d6\uff1a +UI.USER_ANALYSIS=[cn_413] \u5206\u6790 +PIECHART.DISPLAY_ERROR=[cn_120] \u986f\u793a\u932f\u8aa4 +UI.USER_ANALYSIS_INVALID_PAGE=[cn_427] \u7121\u6cd5\u76f4\u63a5\u5b58\u53d6\u6b64\u9801\u9762\u3002\u5fc5\u9808\u5f9e\u5176\u4ed6\u9801\u9762\u9023\u7d50\u5230\u6b64\u9801\u9762 +SCHEDULER_ADMIN.ERROR_0001_DISPLAY_ERROR=[cn_459] \u7121\u6cd5\u5efa\u7acb\u6392\u7a0b\u5668\u7cfb\u7d71\u7ba1\u7406\u986f\u793a +PUBLISHERS.ERROR_0001_PUBLISHERS_ERROR=[cn_421] \u7121\u6cd5\u53d6\u5f97\u767c\u884c\u8005\u7684\u76f8\u95dc\u8cc7\u8a0a +UI.USER_BURST_EMAIL=[cn_439] \u96fb\u5b50\u90f5\u4ef6 +NAVIGATE.ERROR_0001_NAVIGATE_ERROR=[cn_415] \u7121\u6cd5\u5efa\u7acb\u700f\u89bd\u986f\u793a +CHART.DISPLAY_ERROR=[cn_123] \u986f\u793a\u932f\u8aa4 +UI.USER_WELCOME=[cn_75] \u6b61\u8fce +UI.USER_ADMIN_INTRO=[cn_81] \u6b61\u8fce\u4f7f\u7528 Pentaho \u7cfb\u7d71\u7ba1\u7406\u3002\u5728\u9019\u88e1\uff0c\u7cfb\u7d71\u7ba1\u7406\u54e1\u53ef\u4ee5\u7ba1\u7406\u6392\u7a0b\u4e26\u91cd\u65b0\u6574\u7406 Pentaho BI Server \u8a2d\u5b9a\u3002 \u9069\u7528\u65bc\u7cfb\u7d71\u7ba1\u7406\u54e1\u7684\u5176\u4ed6\u8cc7\u8a0a - Pentaho \u5c08\u696d\u7248\u53ef\u4ee5\u8207 LDAP \u6216 MSAD \u63d0\u4f9b\u8005\u6574\u5408\u4ee5\u63d0\u4f9b\u55ae\u4e00\u767b\u5165\u4e26\u4fdd\u8b77\u5831\u544a\u3001\u5728\u65b9\u6848\u5f9e\u958b\u767c\u5230\u751f\u7522\u7684\u6574\u500b\u751f\u547d\u9031\u671f\u671f\u9593\u8ffd\u8e64\u8b8a\u66f4\u3001\u900f\u904e\u7a3d\u6838\u4e86\u89e3\u61c9\u7528\u7a0b\u5f0f\u7684\u4f7f\u7528\u6a21\u5f0f\uff0c\u4ee5\u53ca\u66f4\u591a\u5176\u4ed6\u529f\u80fd\u3002\u5982\u9700\u8a73\u7d30\u8cc7\u8a0a\uff0c\u8acb\u700f\u89bd www.hitachivantara.com +UI.USER_ADMIN=[cn_85] \u7cfb\u7d71\u7ba1\u7406 +UI.USER_BURST_REGION=[cn_445] \u5730\u5340 +SOLUTION_MANAGER.ERROR_0001_DISPLAY_ERROR=[cn_424] \u7121\u6cd5\u5efa\u7acb\u65b9\u6848\u7ba1\u7406\u54e1\u986f\u793a +UI.USER_BURST_EDIT_DATA_HINT=[cn_412] \u8f38\u5165\u60a8\u8207\u5e7e\u500b\u670b\u53cb\u7684\u540d\u7a31\u8207\u96fb\u5b50\u90f5\u4ef6\u5730\u5740\u3002\u7576\u60a8\u57f7\u884c\u7206\u91cf\u7bc4\u4f8b\u6642\uff0c\u6bcf\u500b\u4eba\u90fd\u6703\u6536\u5230\u60a8\u70ba\u4ed6\u5011\u6240\u9078\u53d6\u4e4b\u5730\u5340\u7684\u7279\u5b9a\u5831\u544a\u3002 +UI.USER_TEST_SUITE_TITLE=[cn_425] \u6e2c\u8a66\u5957\u4ef6 +CHART.USER_SAMPLES=[cn_122] \u4f7f\u7528\u8005\u7bc4\u4f8b +UI.USER_SAVE_SUCCESS=\u5df2\u6210\u529f\u5132\u5b58\u6a94\u6848\u3002 +UI.USER_SAVE_FAILED_GENERAL=\u7531\u65bc\u4e00\u822c\u5931\u6557\uff0c\u7121\u6cd5\u5132\u5b58\u6a94\u6848\u3002\u67e5\u770b\u4f3a\u670d\u5668\u8a18\u9304\u4ee5\u53d6\u5f97\u8a73\u7d30\u8cc7\u6599\u3002 +UI.USER_SAVE_FAILED_INVALID_USER_CREDS=\u60a8\u6c92\u6709\u5132\u5b58\u6b64\u6a94\u6848\u7684\u6388\u6b0a\u3002\u5132\u5b58\u6a94\u6848\u5931\u6557\u3002 +InitFailure.USER_ERRORS_DETECTED=\u5075\u6e2c\u5230\u4e0b\u5217\u932f\u8aa4 +InitFailure.USER_SEE_SERVER_CONSOLE=\u8acb\u67e5\u770b\u4f3a\u670d\u5668\u4e3b\u63a7\u53f0\u4ee5\u53d6\u5f97\u6240\u5075\u6e2c\u5230\u4e4b\u6bcf\u500b\u932f\u8aa4\u7684\u66f4\u591a\u8a73\u7d30\u8cc7\u6599\u3002 +SolutionManagerUI.ERROR_0001=\u8cc7\u8a0a\uff1a\u6b64\u529f\u80fd\u7121\u6cd5\u91dd\u5c0d Pentaho \u6a94\u6848\u578b\u5b58\u653e\u5eab\u57f7\u884c\uff0c\u800c\u4e14\u53ea\u80fd\u642d\u914d RDBMS \u5b58\u653e\u5eab\u4f7f\u7528\u3002 +UI.ERROR_0001_BAD_TEMPLATE=\u7121\u6cd5\u8f09\u5165\u7bc4\u672c\uff1a{0} +UI.ERROR_0002_BAD_TEMPLATE_OBJECT=\u7121\u6cd5\u8f09\u5165\u7bc4\u672c\u5f15\u64ce +UI.USER_ABOUT_TITLE=Pentaho Server \u7248\u672c\uff1a{0} +UI.USER_COPYRIGHT=\u8457\u4f5c\u6b0a +UI.USER_ABOUT_TEXT={0} Hitachi Vantara\u3002\u4fdd\u7559\u4e00\u5207\u6b0a\u5229\u3002

\u6b64\u7a0b\u5f0f\u662f\u514d\u8cbb\u8edf\u9ad4\uff1b\u60a8\u53ef\u4ee5\u5728\u9075\u5b88\u81ea\u7531\u8edf\u9ad4\u57fa\u91d1\u6703 (Free Software Foundation) \u6240\u767c\u884c\u4e4b GNU \u8f03\u5bec\u9b06\u901a\u7528\u516c\u773e\u6388\u6b0a (GNU Lesser General Public License) 2.1 \u7248\u7684\u60c5\u6cc1\u4e0b\u91cd\u65b0\u6563\u5e03\u548c/\u6216\u4fee\u6539\u5b83\u3002

\u60a8\u61c9\u8a72\u5df2\u7d93\u96a8\u8457\u6b64\u7a0b\u5f0f\u6536\u5230\u4e00\u4efd GNU \u8f03\u5bec\u9b06\u901a\u7528\u516c\u773e\u6388\u6b0a\uff1b\u5982\u679c\u6c92\u6709\uff0c\u60a8\u53ef\u4ee5\u5f9e http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html \u6216\u5f9e Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA \u53d6\u5f97\u3002

\u6211\u5011\u5e0c\u671b\u6b64\u7a0b\u5f0f\u7684\u6563\u5e03\u662f\u5be6\u7528\u7684\uff0c\u4f46\u6211\u5011\u4e0d\u63d0\u4f9b\u4efb\u4f55\u64d4\u4fdd\uff0c\u5305\u62ec\u4f46\u4e0d\u9650\u65bc\u9069\u552e\u6027\u6216\u9069\u5408\u67d0\u7279\u5b9a\u7528\u9014\u7684\u9ed8\u793a\u64d4\u4fdd\u3002\u5982\u9700\u8a73\u7d30\u8cc7\u8a0a\uff0c\u8acb\u53c3\u95b1 GNU \u8f03\u5bec\u9b06\u901a\u7528\u516c\u773e\u6388\u6b0a\u3002 +UI.USER_SPECIAL_THANKS=\u7279\u5225\u611f\u8b1d\u6211\u5011\u7684\u53c3\u8207\u8005\u3002 +UI.USER_ANALYSIS_UNTITLED_PIVOT_NAME=\u672a\u547d\u540d\u7684\u6a1e\u7d10\u5206\u6790 +UI.USER_HOME_INTRO=Pentaho Open Source BI Suite \u63d0\u4f9b\u5168\u65b9\u4f4d\u7684\u5831\u544a\u3001\u5206\u6790\u8207\u5100\u8868\u677f\u529f\u80fd\uff0c\u53ef\u5354\u52a9\u7d44\u7e54\u4ee5\u66f4\u6709\u6548\u7387\u4e14\u66f4\u6709\u6548\u7684\u65b9\u5f0f\u904b\u4f5c\u3002 +UI.USER_LINKS=\u76f8\u95dc\u9023\u7d50 +UI.USER_OFFLINE=\u82e5\u60a8\u5df2\u9023\u7dda\u5230\u7db2\u969b\u7db2\u8def\uff0c\u5c07\u53ef\u4ee5\u5728\u9019\u88e1\u53d6\u5f97\u6700\u65b0\u8cc7\u8a0a +UI.USER_RESET=\u91cd\u8a2d +UI.RESET_REPOSITORY_TITLE=\u91cd\u8a2d\u65b9\u6848\u5b58\u653e\u5eab +UI.USER_WHATS_NEW=Pentaho \u65b0\u589e\u529f\u80fd +UI.USER_LOGIN=\u767b\u5165 +UI.USER_LOGIN_LOGGED_IN_AS=\u60a8\u76ee\u524d\u4ee5 {0} \u7684\u8eab\u5206\u767b\u5165\u3002 +UI.USER_LOGIN_LOGIN_AS_DIFFERENT_USER=\u4ee5\u4e0d\u540c\u4f7f\u7528\u8005\u767b\u5165 +UI.USER_USER_PROMPT=\u4f7f\u7528\u8005\uff1a +UI.USER_LOGIN_FAILED=\u60a8\u7684\u767b\u5165\u5617\u8a66\u6210\u529f\u3002\u518d\u8a66\u4e00\u6b21\u3002 +UI.USER_LOGIN_FAILED_REASON_SESSION_REUSE=\u60a8\u5df2\u5617\u8a66\u767b\u5165\uff0c\u4f46\u4e0a\u4e00\u500b\u4f7f\u7528\u8005\u5c1a\u672a\u767b\u51fa\u3002\u70ba\u4fdd\u8b77\u4e0a\u4e00\u500b\u4f7f\u7528\u8005\uff0c\u5df2\u81ea\u52d5\u5c07\u4e0a\u4e00\u500b\u4f7f\u7528\u8005\u767b\u51fa\u3002\u60a8\u73fe\u5728\u53ef\u4ee5\u5617\u8a66\u4f7f\u7528\u60a8\u7684\u8a8d\u8b49\u767b\u5165\u3002 +UI.USER_PASSWORD_PROMPT=\u5bc6\u78bc\uff1a +UI.USER_USERS_PROMPT=\u6709\u6548\u7684\u4f7f\u7528\u8005\uff1a +UI.USER_LOGIN_FAILED_DEFAULT_REASON=\u767b\u5165\u671f\u9593\u767c\u751f\u975e\u9810\u671f\u7684\u554f\u984c\u3002 +UI.USER_LOGIN_FAILED_REASON_ORG_SPRINGSECURITY_BADCREDENTIALSEXCEPTION=\u932f\u8aa4\u7684\u8a8d\u8b49\u3002 +UI.USER_PERMISSIONS=\u6b0a\u9650 +UI.USER_PERMISSION_DENIED=\u6b0a\u9650\u906d\u62d2 +UI.USER_PERMISSION_SETTINGS=\u8a2d\u5b9a +UI.USER_PERMISSION_TREE=\u65b9\u6848\u5b58\u653e\u5eab +UI.PUC.LAUNCH.TITLE=\u555f\u52d5\u9801\u9762 +UI.PUC.LAUNCH.NEW_REPORT=\u65b0\u589e +UI.PUC.LAUNCH.NEW_ANALYSIS=\u65b0\u589e +UI.PUC.LAUNCH.MANAGE_CONTENT=\u7ba1\u7406 +UI.PUC.LAUNCH.DATA_ACCESS=\u65b0\u589e +UI.WEB_HELP_TITLE=Web \u8aaa\u660e\u6aa2\u8996\u5668 +UI.WEB_HELP_PRINT=\u5217\u5370 +UI.WEB_HELP_CLOSE=\u95dc\u9589 +UI.PUC.LOGIN.ERROR=\u767c\u751f\u767b\u5165\u932f\u8aa4\u3002 +UI.PUC.LOGIN.BLOCKED=\u7cfb\u7d71\u5df2\u9396\u5b9a\u60a8\u7684\u5e33\u6236\uff0c\u56e0\u70ba\u9023\u7e8c\u767b\u5165\u5931\u6557\u6b21\u6578\u5df2\u8d85\u904e\u5141\u8a31\u7684\u4e0a\u9650\u3002 +UI.PUC.SYSTEM.DOWN=\u7cfb\u7d71\u5df2\u95dc\u6a5f\u4ee5\u9032\u884c\u7dad\u8b77\u3002\u8acb\u9023\u7d61\u60a8\u7684\u7cfb\u7d71\u7ba1\u7406\u54e1\u4ee5\u53d6\u5f97\u5354\u52a9\u3002 +UI.PUC.SYSTEM.DOWN.CAPTION=\u767b\u5165 +UI.PUC.LOGIN.MESSAGE=Pentaho \u4f7f\u7528\u8005\u4e3b\u63a7\u53f0\u53ef\u8b93\u60a8\u5b58\u53d6 Pentaho BI Suite \u4e2d\u529f\u80fd\u5f37\u5927\u7684\u5546\u696d\u667a\u6167 (BI) \u529f\u80fd\u3002\u767b\u5165\u4ee5\u5b58\u53d6\u60a8\u7684\u5831\u544a\u3001\u5206\u6790\u6aa2\u8996\u8207\u5100\u8868\u677f\u3002 +UI.PUC.LOGIN.COPYRIGHT=© 2005-{0} Hitachi Vantara.\u4fdd\u7559\u4e00\u5207\u6b0a\u5229\u3002 +UI.PUC.LOGIN.NEW_WINDOW=\u5728\u65b0\u8996\u7a97\u4e2d\u555f\u52d5 +UI.PUC.LOGIN.PASSWORD=\u5bc6\u78bc +UI.PUC.LOGIN.PASSWORD.PLACEHOLDER=\u8f38\u5165\u6587\u5b57 +UI.PUC.LOGIN.USERNAME=\u4f7f\u7528\u8005\u540d\u7a31 +UI.PUC.LOGIN.CONTACT_US=\u8207\u6211\u5011\u9023\u7d61 +UI.PUC.LOGIN.LOGIN=\u767b\u5165 +UI.PUC.LOGIN.EVAL_LOGIN=\u4ee5\u8a55\u4f30\u8005\u8eab\u5206\u767b\u5165 +UI.PUC.LOGIN.ADMIN_USER=\u7cfb\u7d71\u7ba1\u7406\u54e1 +UI.PUC.LOGIN.BUSINESS_USER=\u5546\u696d\u4f7f\u7528\u8005 +UI.PUC.LOGIN.REQUEST_SUPPORT=\u8981\u6c42\u514d\u8cbb\u8a55\u4f30\u652f\u63f4\u3002 +UI.PUC.LOGIN.OK=\u78ba\u5b9a +UI.PUC.LOGIN.CLOSE=\u95dc\u9589 +UI.PUC.LOGIN.ERROR.CAPTION=\u767b\u5165\u932f\u8aa4 +UI.PUC.LOGIN.TITLE=\u4f7f\u7528\u8005\u4e3b\u63a7\u53f0 +UI.PUC.LOGIN.HEADER=Pentaho \u4f7f\u7528\u8005\u4e3b\u63a7\u53f0 +UI.PUC.LOGIN.GO=\u57f7\u884c +UI.PUC.TITLE=Pentaho \u4f7f\u7528\u8005\u4e3b\u63a7\u53f0 - \u767b\u5165 +UI.PUC.LOGIN.HEADER.APPNAME=Pentaho \u4f7f\u7528\u8005\u4e3b\u63a7\u53f0 +UI.PUC.LOGIN.FOOTER.COMPANY=Hitachi Vantara +UI.PUC.LOGIN.WELCOME=\u6b61\u8fce +UI.PUC.LOGOUT.HEADER=\u7cfb\u7d71\u5df2\u5c07\u60a8\u767b\u51fa\u4f7f\u7528\u8005\u4e3b\u63a7\u53f0\u3002 +UI.PUC.LOGOUT.BUTTON=\u8fd4\u56de\u767b\u5165\u9801\u9762 +UI.PDIUC.LOGIN.TITLE=Data Integration Server +UI.PUC.DOCS.TITLE=Pentaho BA Suite \u8cc7\u8a0a\u5730\u5716 +UI.PUC.DOCS.HEADER.TITLE=\u6587\u4ef6 +UI.PUC.DOCS.HEADER=Pentaho Business Analytics (BA) \u8207 Data Integration (DI) \u793e\u7fa4\u7248\u672c\u7684\u76f8\u95dc\u8cc7\u8a0a\uff0c +UI.PUC.DOCS.HEADER.VISIT_INFO=\u700f\u89bd {0} \u4ee5\u53d6\u5f97\u6301\u7e8c\u66f4\u65b0\u4e14\u53ef\u641c\u5c0b\u7684\u8cc7\u8a0a\u3002 +UI.PUC.DOCS.CONTENTS.BUTTON.EXPAND=\u986f\u793a\u5168\u90e8 +UI.PUC.DOCS.CONTENTS.BUTTON.COLLAPSE=\u96b1\u85cf\u5168\u90e8 +UI.PUC.DOCS.CONTENTS.MAKE_A_PLAN=\u5236\u5b9a\u8a08\u756b +UI.PUC.DOCS.CONTENTS.MAKE_A_PLAN.COMPONENTS=\u719f\u6089 Pentaho \u5143\u4ef6 +UI.PUC.DOCS.CONTENTS.MAKE_A_PLAN.COMPONENTS.DESC=Pentaho \u69cb\u6210\u5143\u4ef6\u7c21\u4ecb\u3002 +UI.PUC.DOCS.CONTENTS.MAKE_A_PLAN.WORKFLOWS=\u9078\u64c7\u60a8\u7684\u5de5\u4f5c\u6d41\u7a0b +UI.PUC.DOCS.CONTENTS.MAKE_A_PLAN.WORKFLOWS.DESC=Pentaho \u7684\u4e0d\u540c\u4f7f\u7528\u65b9\u5f0f\u6982\u89c0\u3002 +UI.PUC.DOCS.CONTENTS.MAKE_A_PLAN.SUPPORTED_COMPONENTS=\u6aa2\u95b1\u652f\u63f4\u7684\u6280\u8853 +UI.PUC.DOCS.CONTENTS.MAKE_A_PLAN.SUPPORTED_COMPONENTS.DESC=Pentaho \u652f\u63f4\u4e14\u53ef\u642d\u914d\u6211\u5011\u7522\u54c1\u4f7f\u7528\u7684\u6280\u8853\u6e05\u55ae\u3002 +UI.PUC.DOCS.CONTENTS.INSTALL=\u5b89\u88dd Pentaho \u8edf\u9ad4 +UI.PUC.DOCS.CONTENTS.INSTALL.ZIPTAR=\u4f7f\u7528\u60a8\u81ea\u5df1\u7684 BA \u5b58\u653e\u5eab\u5b89\u88dd +UI.PUC.DOCS.CONTENTS.INSTALL.ZIPTAR.DESC=\u4f7f\u7528 .zip \u683c\u5f0f\u5c01\u5b58\u5957\u4ef6\u5b89\u88dd Business Analytics \u5143\u4ef6\u7684\u6307\u793a\u3002\u6bcf\u500b\u5143\u4ef6\u90fd\u6709\u53ef\u7528\u7684\u500b\u5225\u5957\u4ef6\u3002 +UI.PUC.DOCS.CONTENTS.INSTALL.CLIENT=\u50c5\u5b89\u88dd BA \u5de5\u5177 +UI.PUC.DOCS.CONTENTS.INSTALL.CLIENT.DESC=\u5b89\u88dd\u6bcf\u500b Business Analytics \u5de5\u5177\u7684\u6307\u793a\u3002 +UI.PUC.DOCS.CONTENTS.INSTALL.PDI=\u4f7f\u7528\u60a8\u81ea\u5df1\u7684 DI \u5b58\u653e\u5eab\u5b89\u88dd +UI.PUC.DOCS.CONTENTS.INSTALL.PDI.DESC=\u4f7f\u7528 .zip \u683c\u5f0f\u5c01\u5b58\u5957\u4ef6\u5b89\u88dd Data Integration \u5143\u4ef6\u7684\u6307\u793a\u3002\u6bcf\u500b\u5143\u4ef6\u90fd\u6709\u53ef\u7528\u7684\u500b\u5225\u5957\u4ef6\u3002 +UI.PUC.DOCS.CONTENTS.INSTALL.CLIENT_PDI=\u50c5\u5b89\u88dd DI \u5de5\u5177 +UI.PUC.DOCS.CONTENTS.INSTALL.CLIENT_PDI.DESC=\u5b89\u88dd\u6bcf\u500b Data Integration \u5de5\u5177\u7684\u6307\u793a\u3002 +UI.PUC.DOCS.CONTENTS.CONFIGURE=\u8a2d\u5b9a Pentaho \u7cfb\u7d71 +UI.PUC.DOCS.CONTENTS.CONFIGURE.BA_SERVER=\u8a2d\u5b9a BA Server \u8207\u5de5\u5177 +UI.PUC.DOCS.CONTENTS.CONFIGURE.BA_SERVER.DESC=\u5728 Windows\u3001Linux \u8207 OS X \u4e0a\u8a2d\u5b9a Pentaho Business Analytics \u7684\u5b8c\u6574\u6307\u793a\u3002 +UI.PUC.DOCS.CONTENTS.CONFIGURE.PDI_SERVER=\u8a2d\u5b9a DI Server \u8207\u5de5\u5177 +UI.PUC.DOCS.CONTENTS.CONFIGURE.PDI_SERVER.DESC=\u5728 Windows\u3001Linux \u8207 OS X \u4e0a\u8a2d\u5b9a Pentaho Data Integration \u7684\u5b8c\u6574\u6307\u793a\u3002 +UI.PUC.DOCS.CONTENTS.TUTORIALS=\u9010\u6b65\u6559\u5b78\u8ab2\u7a0b +UI.PUC.DOCS.CONTENTS.TUTORIALS.PENTAHO=\u4e86\u89e3\u5206\u6790\u3001\u4e92\u52d5\u5f0f\u5831\u544a\u8207\u5100\u8868\u677f +UI.PUC.DOCS.CONTENTS.TUTORIALS.PENTAHO.DESC=\u53ef\u5f15\u5c0e\u60a8\u4f7f\u7528 Pentaho \u4f7f\u7528\u8005\u4e3b\u63a7\u53f0\u5b8c\u6210\u5efa\u7acb\u7b2c\u4e00\u500b\u5206\u6790\u3001\u4e92\u52d5\u5f0f\u5831\u544a\u8207\u5100\u8868\u677f\u7684\u8a73\u7d30\u6559\u5b78\u8ab2\u7a0b\u3002 +UI.PUC.DOCS.CONTENTS.TUTORIALS.PRD=\u5efa\u7acb\u60a8\u7684\u7b2c\u4e00\u500b\u5217\u5370\u54c1\u8cea\u5831\u544a +UI.PUC.DOCS.CONTENTS.TUTORIALS.PRD.DESC=\u793a\u7bc4\u5982\u4f55\u4f7f\u7528\u300c\u5831\u544a\u8a2d\u8a08\u5de5\u5177\u300d\u5efa\u7acb\u9ad8\u5ea6\u683c\u5f0f\u5316\u5831\u544a\u7684\u8a73\u7d30\u6559\u5b78\u8ab2\u7a0b\u3002 +UI.PUC.DOCS.CONTENTS.TUTORIALS.PDI=\u958b\u59cb\u4f7f\u7528 DI +UI.PUC.DOCS.CONTENTS.TUTORIALS.PDI.DESC=\u5c55\u793a Pentaho Data Integration \u9ad8\u50f9\u503c\u529f\u80fd\u7684\u6559\u5b78\u8ab2\u7a0b\u3002 +UI.PUC.DOCS.CONTENTS.TUTORIALS.INSTAVIEW=\u5617\u8a66\u5373\u6642\u7bc4\u672c\u578b\u5206\u6790 +UI.PUC.DOCS.CONTENTS.TUTORIALS.INSTAVIEW.DESC=\u793a\u7bc4\u5982\u4f55\u4f7f\u7528 Instaview \u5feb\u901f\u5f9e\u5404\u7a2e\u8cc7\u6599\u4f86\u6e90\u7522\u751f\u8f49\u63db\u4e26\u5206\u6790\u8cc7\u6599\u7684\u8a73\u7d30\u6559\u5b78\u8ab2\u7a0b\u3002 +UI.PUC.DOCS.CONTENTS.BUILD_SOLUTIONS=\u5efa\u7f6e\u5168\u529f\u80fd\u65b9\u6848 +UI.PUC.DOCS.CONTENTS.BUILD_SOLUTIONS.DATA_MODELS=\u5b9a\u7fa9\u521d\u59cb\u8cc7\u6599\u6a21\u578b +UI.PUC.DOCS.CONTENTS.BUILD_SOLUTIONS.DATA_MODELS.DESC=\u4f7f\u7528 Pentaho \u4f7f\u7528\u8005\u4e3b\u63a7\u53f0\u4e2d\u7684\u300c\u8cc7\u6599\u4f86\u6e90\u7cbe\u9748\u300d\u5efa\u7acb\u521d\u59cb\u8cc7\u6599\u6a21\u578b\u7684\u5de5\u4f5c\u578b\u6587\u4ef6\u3002 +UI.PUC.DOCS.CONTENTS.BUILD_SOLUTIONS.PUC=\u5efa\u7acb\u5206\u6790\u3001\u4e92\u52d5\u5f0f\u5831\u544a\u8207\u5100\u8868\u677f +UI.PUC.DOCS.CONTENTS.BUILD_SOLUTIONS.PUC.DESC=Pentaho \u4f7f\u7528\u8005\u4e3b\u63a7\u53f0\u3001\u5206\u6790\u7a0b\u5f0f\u3001\u4e92\u52d5\u5f0f\u5831\u544a\u3001\u5100\u8868\u677f\u8a2d\u8a08\u5de5\u5177\u8207\u7cfb\u7d71\u7ba1\u7406\u529f\u80fd\u7684\u5de5\u4f5c\u578b\u6587\u4ef6\u3002 +UI.PUC.DOCS.CONTENTS.BUILD_SOLUTIONS.REPORTS=\u8a2d\u8a08\u5217\u5370\u54c1\u8cea\u5831\u544a +UI.PUC.DOCS.CONTENTS.BUILD_SOLUTIONS.REPORTS.DESC=\u95dc\u65bc\u5982\u4f55\u4f7f\u7528\u300c\u5831\u544a\u8a2d\u8a08\u5de5\u5177\u300d\u5efa\u7acb\u3001\u7de8\u8f2f\u53ca\u767c\u884c\u5831\u544a\u7684\u5de5\u4f5c\u578b\u6587\u4ef6\u3002\u5305\u62ec\u5b8c\u6574\u7684\u5716\u8868\u5c6c\u6027\u53c3\u8003\u3002 +UI.PUC.DOCS.CONTENTS.BUILD_SOLUTIONS.PDI=\u5efa\u7acb DI \u65b9\u6848 +UI.PUC.DOCS.CONTENTS.BUILD_SOLUTIONS.PDI.DESC=\u6db5\u84cb Pentaho Data Integration \u529f\u80fd\u7684\u5de5\u4f5c\u578b\u6587\u4ef6\u3002 +UI.PUC.DOCS.CONTENTS.BUILD_SOLUTIONS.BIG_DATA=\u4f7f\u7528\u5de8\u91cf\u8cc7\u6599 +UI.PUC.DOCS.CONTENTS.BUILD_SOLUTIONS.BIG_DATA_DESC=\u5982\u4f55\u91dd\u5c0d\u5404\u7a2e Hadoop \u767c\u884c\u7248\u672c\u8a2d\u5b9a Pentaho Data Integration\uff0c\u4ee5\u53ca\u5982\u4f55\u4f7f\u7528\u5de8\u91cf\u8cc7\u6599\u6b65\u9a5f\u8207\u9805\u76ee\u7684\u7a0b\u5e8f\u6587\u4ef6\u3002 +UI.PUC.DOCS.CONTENTS.DATA_MODELS=\u5efa\u7acb\u53ca\u7cbe\u7c21\u9032\u968e\u8cc7\u6599\u6a21\u578b +UI.PUC.DOCS.CONTENTS.DATA_MODELS.RELATIONAL=\u4f7f\u7528\u95dc\u806f\u5f0f\u8cc7\u6599\u6a21\u578b +UI.PUC.DOCS.CONTENTS.DATA_MODELS.RELATIONAL.DESC=\u6709\u95dc\u5982\u4f55\u4f7f\u7528\u300c\u5f8c\u8a2d\u8cc7\u6599\u7de8\u8f2f\u5668\u300d\u5efa\u7acb\u3001\u7de8\u8f2f\u53ca\u767c\u884c\u95dc\u806f\u5f0f\u8cc7\u6599\u6a21\u578b\u7684\u53c3\u8003\u8cc7\u6599\u8207\u5de5\u4f5c\u578b\u6587\u4ef6\u3002 +UI.PUC.DOCS.CONTENTS.DATA_MODELS.ANALYSIS=\u4f7f\u7528\u591a\u7dad\u5ea6\u8cc7\u6599\u6a21\u578b +UI.PUC.DOCS.CONTENTS.DATA_MODELS.ANALYSIS.DESC=\u6709\u95dc\u5982\u4f55\u4f7f\u7528\u300c\u7db1\u8981\u5de5\u4f5c\u53f0\u300d\u8207 Mondrian \u5f15\u64ce\u5efa\u7acb ROLAP \u7db1\u8981\u7684\u6307\u5c0e\u65b9\u91dd\u8207\u7406\u8ad6\u3002\u5305\u62ec MDX \u5143\u7d20\u53c3\u8003\u3002 +UI.PUC.DOCS.CONTENTS.DATA_MODELS.AGGREGATION_DESIGNER=\u6700\u4f73\u5316\u591a\u7dad\u5ea6\u8cc7\u6599\u6a21\u578b +UI.PUC.DOCS.CONTENTS.DATA_MODELS.AGGREGATION_DESIGNER.DESC=\u6709\u95dc\u5982\u4f55\u70ba\u591a\u7dad\u5ea6\u8cc7\u6599\u6a21\u578b\u5efa\u7acb\u5f59\u7e3d\u8cc7\u6599\u8868\u7684\u8cc7\u8a0a\u3002 +UI.PUC.DOCS.CONTENTS.TUNE=\u5fae\u8abf Pentaho \u7cfb\u7d71 +UI.PUC.DOCS.CONTENTS.TUNE.ADMIN=\u7ba1\u7406 BA Server +UI.PUC.DOCS.CONTENTS.TUNE.ADMIN.DESC=\u8aaa\u660e Business Analytics Server \u7684\u7cfb\u7d71\u7ba1\u7406\u5de5\u4f5c\u3002 +UI.PUC.DOCS.CONTENTS.TUNE.SECURITY=\u5b9a\u7fa9 BA Server \u9032\u968e\u5b89\u5168\u6027 +UI.PUC.DOCS.CONTENTS.TUNE.SECURITY.DESC=\u6709\u95dc\u5982\u4f55\u5be6\u4f5c\u4e0d\u540c\u7684\u4f7f\u7528\u8005\u9a57\u8b49\u63d0\u4f9b\u8005\u6216\u5728 Business Analytics Server \u4e0a\u5be6\u4f5c SSL \u7684\u6307\u793a\u8207\u6307\u5c0e\u65b9\u91dd\u3002\u6db5\u84cb Active Directory\u3001LDAP\u3001\u55ae\u4e00\u767b\u5165\u8207\u81ea\u8a02 JDBC \u9a57\u8b49\u3002 +UI.PUC.DOCS.CONTENTS.TUNE.PERFORMANCE=\u6700\u4f73\u5316 BA Server \u6548\u80fd +UI.PUC.DOCS.CONTENTS.TUNE.PERFORMANCE.DESC=\u6709\u95dc\u5982\u4f55\u5728 Business Analytics \u5927\u90e8\u5206\u5340\u57df\u4e2d\u6539\u5584\u6548\u80fd\u7684\u6307\u5c0e\u65b9\u91dd\u8207\u6307\u793a\u3002\u6db5\u84cb Business Analytics \u7684\u4fee\u6539\u3001\u5167\u5bb9\u4e32\u6d41\u7684\u6307\u5c0e\u65b9\u91dd\u3001\u61c9\u7528\u7a0b\u5f0f\u4f3a\u670d\u5668\u53e2\u96c6\u8207\u6548\u80fd\u76e3\u8996\u53ca\u6e2c\u8a66\u7684\u5efa\u8b70\u3002 +UI.PUC.DOCS.CONTENTS.TUNE.TROUBLESHOOT=\u91dd\u5c0d BA Server \u554f\u984c\u9032\u884c\u7591\u96e3\u6392\u89e3 +UI.PUC.DOCS.CONTENTS.TUNE.TROUBLESHOOT.DESC=Business Analytics Server \u8207\u5de5\u5177\u7684\u7591\u96e3\u6392\u89e3\u4e3b\u984c\u96c6\u5408\u3002\u82e5\u60a8\u9047\u5230\u932f\u8aa4\u4f46\u4e0d\u77e5\u9053\u61c9\u8a72\u5728 Business Analytics \u7684\u54ea\u500b\u90e8\u5206\u627e\u5230\u767c\u751f\u539f\u56e0\uff0c\u60a8\u53ef\u80fd\u6703\u767c\u73fe\u6b64\u8cc7\u6e90\u5f88\u5be6\u7528\u3002 +UI.PUC.DOCS.CONTENTS.TUNE.PDI_ADMIN=\u7ba1\u7406 DI Server +UI.PUC.DOCS.CONTENTS.TUNE.PDI_ADMIN.DESC=\u8aaa\u660e Data Integration Server \u7684\u7cfb\u7d71\u7ba1\u7406\u5de5\u4f5c\u3002 +UI.PUC.DOCS.CONTENTS.DEVELOP=\u958b\u767c\u81ea\u8a02\u65b9\u6848 +UI.PUC.DOCS.CONTENTS.DEVELOP.DASHBOARDS=\u5efa\u7acb\u81ea\u8a02\u5100\u8868\u677f +UI.PUC.DOCS.CONTENTS.DEVELOP.DASHBOARDS.DESC=\u6709\u95dc\u5982\u4f55\u5efa\u7acb\u4f7f\u7528 Pentaho \u5167\u5bb9\u4e4b\u5100\u8868\u677f\u7684\u8a2d\u8a08\u7406\u8ad6\u3002\u6db5\u84cb Pentaho \u5100\u8868\u677f\u8a2d\u8a08\u5de5\u5177\u3001\u793e\u7fa4\u5100\u8868\u677f\u67b6\u69cb (CDF) \u8207\u81ea\u8a02 JSP \u7684\u57fa\u672c\u6307\u5c0e\u65b9\u91dd\u3002 +UI.PUC.DOCS.CONTENTS.DEVELOP.CUSTOMIZING=\u81ea\u8a02\u4f7f\u7528\u8005\u4e3b\u63a7\u53f0\u8207\u5de5\u5177 +UI.PUC.DOCS.CONTENTS.DEVELOP.CUSTOMIZING.DESC=Pentaho \u4f7f\u7528\u8005\u4e3b\u63a7\u53f0 (\u5305\u62ec\u5206\u6790\u7a0b\u5f0f\u3001\u4e92\u52d5\u5f0f\u5831\u544a\u8207\u5100\u8868\u677f\u8a2d\u8a08\u5de5\u5177) \u7684\u672c\u5730\u5316\u8207\u57fa\u672c\u81ea\u8a02\u6307\u793a\u3002 +UI.PUC.DOCS.CONTENTS.DEVELOP.INTEGRATING=\u5c07 BA \u5167\u5d4c\u5230 Web \u61c9\u7528\u7a0b\u5f0f +UI.PUC.DOCS.CONTENTS.DEVELOP.INTEGRATING.DESC=\u793a\u7bc4\u5982\u4f55 (\u5728\u73fe\u6709\u7684 Web \u61c9\u7528\u7a0b\u5f0f) \u4e2d\u8207 Pentaho \u5206\u6790\u7a0b\u5f0f\u3001\u5100\u8868\u677f\u8a2d\u8a08\u5de5\u5177\u548c\u4e92\u52d5\u5f0f\u5831\u544a\u4e92\u52d5\u6216\u52a0\u4ee5\u5167\u5d4c\u7684\u7a0b\u5f0f\u78bc\u7bc4\u4f8b\u8207 URL \u53c3\u6578\u53c3\u8003\u8cc7\u6599\u3002 +UI.PUC.DOCS.CONTENTS.DEVELOP.REPORTING_EMBED=\u5167\u5d4c\u53ca\u5ef6\u4f38\u5831\u544a +UI.PUC.DOCS.CONTENTS.DEVELOP.REPORTING_EMBED.DESC=\u6709\u95dc\u5982\u4f55\u5ef6\u4f38\u5831\u544a\u529f\u80fd\u6216\u5c07\u5831\u544a\u5f15\u64ce\u5167\u5d4c\u5230\u60a8\u81ea\u5df1\u7684\u61c9\u7528\u7a0b\u5f0f\u7684\u7a0b\u5f0f\u78bc\u7bc4\u4f8b\u8207\u6307\u793a\u3002 +UI.PUC.DOCS.CONTENTS.DEVELOP.PDI_EMBED_EXTEND=\u5167\u5d4c\u53ca\u5ef6\u4f38 DI +UI.PUC.DOCS.CONTENTS.DEVELOP.PDI_EMBED_EXTEND.DESC=\u793a\u7bc4\u5982\u4f55\u4ee5\u7a0b\u5f0f\u8a2d\u8a08\u65b9\u5f0f\u5ef6\u4f38 Data Integration \u529f\u80fd\u6216\u5c07 Data Integration \u5f15\u64ce\u5167\u5d4c\u5230\u60a8\u81ea\u5df1\u7684\u61c9\u7528\u7a0b\u5f0f\u7684\u6307\u793a\u3001Java \u985e\u5225\u8207\u65b9\u6cd5\uff0c\u4ee5\u53ca Eclipse \u578b\u7bc4\u4f8b\u5916\u639b\u7a0b\u5f0f\u5c08\u6848\u3002 \ No newline at end of file diff --git a/extensions/src/main/resources/org/pentaho/platform/web/servlet/messages/messages_cn.properties b/extensions/src/main/resources/org/pentaho/platform/web/servlet/messages/messages_cn.properties index df17ab0c158..201de8d54c4 100644 --- a/extensions/src/main/resources/org/pentaho/platform/web/servlet/messages/messages_cn.properties +++ b/extensions/src/main/resources/org/pentaho/platform/web/servlet/messages/messages_cn.properties @@ -12,21 +12,153 @@ # without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # See the GNU Lesser General Public License for more details. #Wed Jun 04 19:24:31 EDT 2008 -GetContent.ERROR_0002_CONTENT_REPOS_UNAVAILABLE=[cn_222] Error getting content repository -UIServlet.ERROR_0001_COMPONENT_NOT_SPECIFIED=[cn_96] Component not specified -GetContent.ERROR_0001_ID_PARAMETER_EMPTY=[cn_242] Content ID not specified -MondrianModel.ERROR_0001_MODEL_PARAMETER_MISSING=[cn_257] Required parameter 'model' was not provided -UIServlet.ERROR_0002_COMPONENT_INVALID=[cn_90] Could not create component {0} -UIServlet.ACTION_FAILED=[cn_91] Action Failed -HttpWebService.DEBUG_WEB_SERVICE_END=[cn_97] HTTP Web Service request end -HttpWebService.DEBUG_WEB_SERVICE_START=[cn_98] HTTP Web Service request start -IMAGE.ERROR_0002_FILE_NOT_FOUND=[cn_94] Cannot retrieve image - file {0} cannot be found. -GetContent.ERROR_0004_RETURN_MESSAGE=[cn_306] Error getting content\: {0} -HttpWebService.ERROR_0001_ERROR_DURING_WEB_SERVICE=[cn_95] Error occured during web service request -MondrianModel.ERROR_0002_INVALID_FILE=[cn_255] Document is not a Mondrian XML file\: {0} -IMAGE.ERROR_0001_IMAGE_PARAMETER_EMPTY=[cn_92] Cannot retrieve image - Image parameter empty. -Widget.ERROR_0001_COULD_NOT_CREATE_WIDGET=[cn_473] Could not create widget display -GetContent.ERROR_0003_CONTENT_READ_ERROR=[cn_394] Error reading content -IMAGE.DEBUG_IMAGE_PARAMETER=[cn_93] image parameter \= -GetContent.ERROR_0005_CONTENT_NOT_FOUND=[cn_430] Content for id\={0} was not found -PentahoGeneral.USER_FEATURE_DISABLED=This feature is disabled. \ No newline at end of file +GetContent.ERROR_0002_CONTENT_REPOS_UNAVAILABLE=[cn_222] \u53d6\u5f97\u5167\u5bb9\u5b58\u653e\u5eab\u6642\u767c\u751f\u932f\u8aa4 +UIServlet.ERROR_0001_COMPONENT_NOT_SPECIFIED=[cn_96] \u672a\u6307\u5b9a\u5143\u4ef6 +GetContent.ERROR_0001_ID_PARAMETER_EMPTY=[cn_242] \u672a\u6307\u5b9a\u5167\u5bb9\u8b58\u5225\u78bc +MondrianModel.ERROR_0001_MODEL_PARAMETER_MISSING=[cn_257] \u672a\u63d0\u4f9b\u5fc5\u8981\u53c3\u6578 'model' +UIServlet.ERROR_0002_COMPONENT_INVALID=[cn_90] \u7121\u6cd5\u5efa\u7acb\u5143\u4ef6 {0} +UIServlet.ACTION_FAILED=[cn_91] \u52d5\u4f5c\u5931\u6557 +HttpWebService.DEBUG_WEB_SERVICE_END=[cn_97] HTTP Web \u670d\u52d9\u8981\u6c42\u7d50\u675f +HttpWebService.DEBUG_WEB_SERVICE_START=[cn_98] HTTP Web \u670d\u52d9\u8981\u6c42\u958b\u59cb +IMAGE.ERROR_0002_FILE_NOT_FOUND=[cn_94] \u7121\u6cd5\u64f7\u53d6\u5f71\u50cf - \u627e\u4e0d\u5230\u6a94\u6848 {0} +GetContent.ERROR_0004_RETURN_MESSAGE=[cn_306] \u53d6\u5f97\u5167\u5bb9\u6642\u767c\u751f\u932f\u8aa4\uff1a{0} +HttpWebService.ERROR_0001_ERROR_DURING_WEB_SERVICE=[cn_95] Web \u670d\u52d9\u8981\u6c42\u671f\u9593\u767c\u751f\u932f\u8aa4 +MondrianModel.ERROR_0002_INVALID_FILE=[cn_255] \u6587\u4ef6\u4e0d\u662f Mondrian XML \u6a94\u6848\uff1a{0} +IMAGE.ERROR_0001_IMAGE_PARAMETER_EMPTY=[cn_92] \u7121\u6cd5\u64f7\u53d6\u5f71\u50cf - \u5f71\u50cf\u53c3\u6578\u662f\u7a7a\u7684\u3002 +Widget.ERROR_0001_COULD_NOT_CREATE_WIDGET=[cn_473] \u7121\u6cd5\u5efa\u7acb\u5c0f\u5de5\u5177\u986f\u793a +GetContent.ERROR_0003_CONTENT_READ_ERROR=[cn_394] \u8b80\u53d6\u5167\u5bb9\u6642\u767c\u751f\u932f\u8aa4 +IMAGE.DEBUG_IMAGE_PARAMETER=[cn_93] \u5f71\u50cf\u53c3\u6578 = +GetContent.ERROR_0005_CONTENT_NOT_FOUND=[cn_430] \u627e\u4e0d\u5230 id={0} \u7684\u5167\u5bb9 +PentahoGeneral.USER_FEATURE_DISABLED=\u6b64\u529f\u80fd\u5df2\u505c\u7528\u3002 +ViewAction.ERROR_0001_BACKGROUND_EXECUTE_NOT_SUPPORTED=\u672a\u5728 pentaho.xml \u4e2d\u5b9a\u7fa9\u80cc\u666f\u57f7\u884c\u8655\u7406\u5e38\u5f0f (IBackgroundExecution)\u3002 +GetResource.ERROR_0001_RESOURCE_PARAMETER_MISSING=\u8cc7\u6e90\u53c3\u6578\u907a\u5931 +GetResource.ERROR_0002_INVALID_FILE=\u7121\u6548\u7684\u6a94\u6848\uff1a{0} +GetResource.ERROR_0003_RESOURCE_MISSING=\u8cc7\u6e90\u907a\u5931 (\u8def\u5f91\uff1a{0}) +HttpWebService.DEBUG_MISSING_ACTION_PARAMETER=\u4e0d\u5b58\u5728\u8981\u6c42\u53c3\u6578 "action"\uff1b\u6b63\u5728\u59d4\u6d3e\u5230\u8d85\u985e\u5225 +HttpWebService.WARN_MISSING_DETAILS_PARAMETER=\u8981\u6c42\u53c3\u6578 "details" \u7684\u503c\u907a\u5931\u6216\u7121\u6cd5\u8fa8\u8b58\uff1b\u6b63\u5728\u4f7f\u7528 "details=all" \u7684\u9810\u8a2d\u503c +HttpWebService.UNRECOGNIZED_COMPONENT_REQUEST=\u7528\u6236\u7aef\u8981\u6c42\u7121\u6cd5\u8fa8\u8b58\u7684\u5143\u4ef6\uff1a{0} +HttpWebService.PARAMETER_GROUP_SYSTEM=\u7cfb\u7d71\u53c3\u6578 +HttpWebService.PARAMETER_GROUP_USER=\u53c3\u6578 +HttpWebService.ERROR_0002_NOTFOUND=\u6307\u5b9a\u7684 XAction \u4e0d\u5b58\u5728\uff1a{0}:{1}:{2} +HttpWebService.ERROR_0003_UNEXPECTED=\u8655\u7406 XAction \u53c3\u6578\u6642\u767c\u751f\u975e\u9810\u671f\u7684\u932f\u8aa4 +MondrianModel.ERROR_0004_INVALID_REPOSITORY= +TESTRESULT.ERROR_0001_FILE_PARAMETER_EMPTY=\u7a7a\u767d\u7684\u53c3\u6578 +ViewAction.ERROR_0002_BAD_TEMPLATE_OBJECT=\u7121\u6cd5\u8f09\u5165\u7bc4\u672c\u5f15\u64ce +ViewAction.ERROR_0003_UNABLE_TO_CREATE_SUBSCRIPTION_ARCHIVE=\u7121\u6cd5\u5efa\u7acb\u8a02\u95b1\u5c01\u5b58 +ViewAction.ERROR_0004_UNABLE_TO_PERFORM_BACKGROUND_EXECUTION=\u7121\u6cd5\u57f7\u884c\u80cc\u666f\u57f7\u884c +PentahoXmlaServlet.ERROR_NO_CATALOGS_ON_SERVER=\u7121\u6cd5\u5728\u4f3a\u670d\u5668\u4e0a\u627e\u5230\u4efb\u4f55\u76ee\u9304\u3002 +PentahoXmlaServlet.DEBUG_PROVIDER_AND_DS=\u8cc7\u6599\u4f86\u6e90\u540d\u7a31\uff1a"{0}" DatasourceInfo\uff1a"{1}" \u63d0\u4f9b\u8005\uff1a"{2}" \u8cc7\u6599\u4f86\u6e90\u7269\u4ef6\uff1a"{3}" +PentahoXmlaServlet.DEBUG_SCHEMA_FILE_PATH=\u6b63\u5728\u50b3\u56de\u7db1\u8981\u6a94\u6848\u7684\u8def\u5f91\uff1a{0} +PentahoXmlaServlet.DEBUG_DS_IN_LOCKBOX=\u6b63\u65bc Lockbox \u4e2d\u65b0\u589e\u5171\u7528\u7684\u8cc7\u6599\u4f86\u6e90\uff1aDS \u540d\u7a31\uff1a{0} Lockbox Moniker\uff1a{1} +PentahoXmlaServlet.DEBUG_CATALOGURL=PentahoXmlaHandler.getConnection\uff1acatalogUrl={0} +PentahoXmlaServlet.DEBUG_CATALOGURL_NULL=PentahoXmlaHandler.getConnection\uff1acatalogUrl \u662f Null +PentahoXmlaServlet.DEBUG_CONN_NOT_NULL=PentahoXmlaHandler.getConnection\uff1a\u50b3\u56de\u9023\u7dda\u4e0d\u662f Null +PentahoXmlaServlet.DEBUG_CONN_NULL=PentahoXmlaHandler.getConnection\uff1a\u50b3\u56de\u9023\u7dda Null +PentahoXmlaServlet.DEBUG_CONNECT_STRING_DATASOURCE=\u9023\u7dda\u5b57\u4e32\u8cc7\u6599\u4f86\u6e90\uff1a{0} +PentahoXmlaServlet.DEBUG_CREATED_ROLAP_CONN=\u5df2\u5efa\u7acb ROLAP \u9023\u7dda\uff1a{0} +PentahoXmlaServlet.DEBUG_DATASOURCE_FROM_PENTAHO=\u5df2\u5f9e Pentaho DS \u7ba1\u7406\u54e1\u53d6\u5f97 javax.sql.DataSource\uff1a{0} +PentahoXmlaServlet.DEBUG_MOD_DOC=\u5df2\u4fee\u6539\u6587\u4ef6\uff1a +PentahoXmlaServlet.DEBUG_NODES_TO_REMOVE=nodesToRemove\uff1a{0} +PentahoXmlaServlet.DEBUG_ORIG_DOC=\u539f\u59cb\u6587\u4ef6\uff1a{0} +PentahoXmlaServlet.WARN_0001_UNABLE_TO_FIND_UNBOUND_NAME=\u4f7f\u7528\u672a\u7e6b\u7d50\u540d\u7a31 [ {1} ] \u627e\u4e0d\u5230\u8cc7\u6599\u4f86\u6e90 [ {0} ] +PentahoXmlaServlet.ERROR_0001_ACCESS_DENIED_DATASOURCE=\u91dd\u5c0d\u9700\u8981\u9a57\u8b49\u4e4b\u8cc7\u6599\u4f86\u6e90\u7684\u5b58\u53d6\u906d\u62d2 +PentahoXmlaServlet.ERROR_0002_UNABLE_TO_INSTANTIATE=IDatasourceService\u3002 +PentahoXmlaServlet.ERROR_0003_GETDSBOUNDNAME_FAILED=\u767c\u751f\u4f8b\u5916\u72c0\u6cc1 +PentahoXmlaServlet.ERROR_0004_UNABLE_TO_GET_DOCUMENT_FROM_STRING=\u7121\u6cd5\u5f9e\u5b57\u4e32\u53d6\u5f97\u6587\u4ef6 +ProxyServlet.ERROR_0001_NO_PROXY_URL_SPECIFIED=\u672a\u5728 web.xml \u6a94\u6848\u4e2d\u6307\u5b9a\u4efb\u4f55 Proxy \u4e3b\u6a5f URL +ProxyServlet.INFO_0001_URL_SELECTED=\u6b63\u5728\u5c07 Proxy URL \u8a2d\u5b9a\u70ba\uff1a{0} +ProxyServlet.ERROR_0002_INVALID_URL=\u5df2\u6307\u5b9a\u7121\u6548\u7684 Proxy \u4e3b\u6a5f URL\uff1a{0} +ProxyServlet.DEBUG_0001_OUTPUT_URL=>>>>>>>>>>>>>> PROXY\uff1a{0} +ProxyServlet.ERROR_0003_REMOTE_HTTP_CALL_FAILED=\u5c0d URL \u9032\u884c\u7684 HTTP \u547c\u53eb\u5931\u6557\uff1a{0} +ProxyServlet.ERROR_0004_PROTOCOL_FAILURE=\u56b4\u91cd\u7684\u901a\u8a0a\u5354\u5b9a\u9055\u898f +ProxyServlet.ERROR_0005_TRANSPORT_FAILURE=\u56b4\u91cd\u7684\u50b3\u8f38\u932f\u8aa4 +ProxyServlet.ERROR_0006_URI_SYNTAX_EXCEPTION=\u7121\u6548\u7684 Proxy \u57fa\u5e95 URL\uff1a{0} +AdhocWebService.USER_REPORT_SAVED=\u60a8\u7684\u5831\u544a\u5df2\u5132\u5b58\u3002 +AdhocWebService.USER_DELETE_SUCCESSFUL=\u5df2\u522a\u9664\u5b58\u653e\u5eab\u6a94\u6848\u3002 +AdhocWebService.SELECT_OUTPUT_TYPE=\u9078\u53d6\u8f38\u51fa\u985e\u578b\uff1a +AdhocWebService.USER_REPORT_PREVIEW=\u5831\u544a\u9810\u89bd +AdhocWebService.REASON=\u539f\u56e0\uff1a +AdhocWebService.ACL_UPDATE_SUCCESSFUL=ACL \u66f4\u65b0\u6210\u529f\u3002 +AdhocWebService.INVALID_CLIENT_XML=\u5831\u544a XML \u7121\u6548\u3002 +AdhocWebService.ERROR_0002_REPORT_INVALID=\u5831\u544a\u898f\u683c\u7121\u6548 +AdhocWebService.ERROR_0003_BUSINESS_VIEW_INVALID=\u5546\u696d\u6aa2\u8996\u7121\u6548 +AdhocWebService.ERROR_0004_FAILED_TO_LOAD_REPORTSPEC=\u7121\u6cd5\u5f9e\u5b58\u653e\u5eab\u8f09\u5165 reportspec \u6a94\u6848\uff1a{0}\u3002 +AdhocWebService.ERROR_0005_MISSING_REPORTSPEC_NAME=\u7528\u6236\u7aef\u7121\u6cd5\u5728\u670d\u52d9\u8981\u6c42\u4e2d\u63d0\u4f9b reportSpecPath \u53c3\u6578\u3002 +AdhocWebService.ERROR_0006_FAILED_TO_GET_PAYLOAD_FROM_REQUEST=\u7121\u6cd5\u4e86\u89e3\u7528\u6236\u7aef\u8981\u6c42\u3002 +AdhocWebService.ERROR_0007_FAILED_TO_DELETE_FILES=\u7121\u6cd5\u522a\u9664\u4e0b\u5217\u6a94\u6848\uff1a{0}\u3002 +AdhocWebService.ERROR_0008_MISSING_OR_INVALID_REPORT_NAME=\u7121\u6cd5\u5132\u5b58\u5831\u544a\u3002\u547c\u53eb\u8005\u672a\u91dd\u5c0d\u5831\u544a\u63d0\u4f9b\u6709\u6548\u7684\u6a94\u6848\u540d\u7a31\u3002 +AdhocWebService.ERROR_0009_SAVE_FAILED=\u7121\u6cd5\u5132\u5b58\u5831\u544a\u3002 +AdhocWebService.ERROR_0010_OPEN_INDEX_DOC_FAILED=\u7121\u6cd5\u958b\u555f\u7bc4\u672c\u7684 index.xml\u3002 +AdhocWebService.ERROR_0011_FAILED_TO_LOCATE_PATH=\u7121\u6cd5\u5728\u81e8\u6a5f\u64cd\u4f5c\u5831\u544a\u5b58\u653e\u5eab\u4e2d\u627e\u5230 {0}\u3002 +AdhocWebService.ERROR_0012_FAILED_TO_GENERATE_PREVIEW=\u7121\u6cd5\u7522\u751f\u5831\u544a\u9810\u89bd\u3002\u8acb\u6aa2\u67e5\u4f3a\u670d\u5668\u8a18\u9304\u4ee5\u53d6\u5f97\u932f\u8aa4\u7684\u8a73\u7d30\u8cc7\u6599\u3002 +AdhocWebService.ERROR_0013_INCONSISTENT_COLUMN_WIDTH_UNITS=\u5831\u544a\u4e2d\u8cc7\u6599\u884c\u4e4b\u8cc7\u6599\u884c\u5bec\u5ea6\u7684\u6e2c\u91cf\u55ae\u4f4d\u4e0d\u76f8\u5bb9\u3002\u5c07\u6703\u5ffd\u7565\u6b64\u5831\u544a\u7684\u8cc7\u6599\u884c\u5bec\u5ea6\u3002\u82e5\u8981\u4fee\u6b63\u554f\u984c\uff0c\u8acb\u4f7f\u7528 Pentaho \u5f8c\u8a2d\u8cc7\u6599\u7de8\u8f2f\u5668\u4f86\u8b8a\u66f4\u8cc7\u6599\u884c\u5bec\u5ea6\u5f8c\u8a2d\u8cc7\u6599\u7684\u6e2c\u91cf\u55ae\u4f4d\uff0c\u4f7f\u6240\u6709\u8cc7\u6599\u884c\u90fd\u5177\u6709\u4e0b\u5217\u683c\u5f0f\u7684\u6e2c\u91cf\u55ae\u4f4d\uff1a{inches, centimeters, points} \u6216 +AdhocWebService.HEADER_ERROR_PAGE=\u7522\u751f\u5831\u544a\u9810\u89bd\u6642\u767c\u751f\u932f\u8aa4 +AdhocWebService.ERROR_0001_FILE_EXISTS=\u6a94\u6848\u5df2\u5b58\u5728\u3002 +AdhocWebService.ERROR_0002_FILE_ADD_FAILED=\u767c\u884c\u5931\u6557\u3002 +AdhocWebService.STATUS_0003_FILE_ADD_SUCCESSFUL=\u767c\u884c\u6210\u529f\u3002 +AdhocWebService.ERROR_0004_FILE_ADD_INVALID_PUBLISH_PASSWORD=\u7121\u6548\u7684\u767c\u884c\u5bc6\u78bc\u3002 +AdhocWebService.ERROR_0005_FILE_ADD_INVALID_USER_CREDENTIALS=\u7121\u6548\u7684\u4f7f\u7528\u8005\u540d\u7a31\u548c/\u6216\u5bc6\u78bc\u3002 +SolutionRepositoryService.ERROR_0001_ERROR_DURING_SERVICE_REQUEST=\u7121\u6cd5\u5b8c\u6210\u91dd\u5c0d SolutionRepositoryWebService \u7684\u8981\u6c42\u3002 +MondrianCatalogHelper.WARN_SKIPPING_DATASOURCE_DEF=\u8b66\u544a\uff0cOLAP \u8cc7\u6599\u4f86\u6e90 {0} \u7121\u6cd5\u4f9b\u5206\u6790\u6aa2\u8996\u4f7f\u7528\uff0c\u8cc7\u6599\u4f86\u6e90\u5fc5\u9808\u4ee5 vfs \u65b9\u6848\u958b\u59cb\uff1aURL +MondrianCatalogHelper.ERROR_0001_INVALID_DATASOURCE_CONFIG=dataSourcesConfig {0} \u4e0d\u662f\u6709\u6548\u7684 URL \u6216\u4e0d\u5b58\u5728 +MondrianCatalogHelper.ERROR_0002_FAILED_TO_PARSE_DATASOURCE_CONFIG=\u7121\u6cd5\u5256\u6790\u8cc7\u6599\u4f86\u6e90\u8a2d\u5b9a {0} +MondrianCatalogHelper.WARN_PARSE_NULL_INPUT=parseDataSources: Null \u8f38\u5165 +MondrianCatalogHelper.ERROR_0003_INSUFFICIENT_PERMISSION=\u6b0a\u9650\u4e0d\u8db3 +MondrianCatalogHelper.ERROR_0004_ALREADY_EXISTS=\u5df2\u5b58\u5728 +MondrianCatalogHelper.ERROR_0005_RESOURCE_NOT_AVAILABLE=\u8a72\u8cc7\u6e90\u5728\u6a94\u6848\u7cfb\u7d71\u4e2d\u7121\u6cd5\u4f7f\u7528 +MondrianCatalogHelper.ERROR_0006_IO_PROBLEM=IO \u554f\u984c +MondrianCatalogHelper.ERROR_0007_FILE_NOT_FOUND=\u627e\u4e0d\u5230\u6a94\u6848 +MondrianCatalogHelper.ERROR_0008_ERROR_OCCURRED=\u767c\u751f\u932f\u8aa4 +MondrianCatalogHelper.ERROR_0009_WHILE_PARSING_CATALOG=\u5256\u6790\u985e\u5225\u76ee\u9304 {0} \u6642 +MondrianCatalogHelper.ERROR_0010_PATH_NOT_FOUND=\u627e\u4e0d\u5230\u8def\u5f91 {0} +MondrianCatalogHelper.ERROR_0011_REPOSITORY_ERROR={0} \u4f3c\u4e4e\u5b58\u5728\u65bc\u78c1\u789f\u4e0a\uff0c\u4f46\u5c1a\u672a\u5b58\u5728\u65bc DB \u5b58\u653e\u5eab\u4e2d\uff1b\u8acb\u91cd\u65b0\u6574\u7406\u5b58\u653e\u5eab +MondrianCatalogHelper.ERROR_0012_FILESYSTEM_PROBLEM=\u6a94\u6848\u7cfb\u7d71\u767c\u751f\u554f\u984c +MondrianCatalogHelper.ERROR_0013_FAILED_TO_LOAD_SCHEMA=\u7121\u6cd5\u8f09\u5165\u7db1\u8981 {0} +MondrianCatalogHelper.ERROR_0018_IMPORT_SCHEMA_ERROR=\u63d0\u4f9b\u7684\u6a94\u6848\u4f3c\u4e4e\u4e0d\u662f\u6709\u6548\u7684 Mondrian \u7db1\u8981\u3002 +MondrianCatalogPublisher.ERROR_0001_JNDI_NAMING_ERROR=\u627e\u4e0d\u5230 JNDI \u9805\u76ee {0} +MondrianCatalogPublisher.ERROR_0002_EXCEPTION_OCCURRED=\u767c\u751f\u4f8b\u5916\u72c0\u6cc1 +MondrianCatalogPublisher.ERROR_0003_JNDINAME_REQUIRED=\u9700\u8981 'jndiName' \u53c3\u6578 +MondrianCatalogPublisher.ERROR_0004_FILE_COUNT=\u9810\u671f 1 \u500b\u6a94\u6848\uff1b\u5be6\u969b\u8a08\u6578\u70ba {0} +MondrianCatalogPublisher.ERROR_0005_PUBLISH_EXCEPTION=\u767c\u884c\u6642\u767c\u751f\u4f8b\u5916\u72c0\u6cc1 +MondrianCatalogPublisher.ERROR_0006_UNABLE_TO_FACTORY_OBJECT=\u7121\u6cd5\u70ba\u7269\u4ef6\u9032\u884c\u8655\u7406\u7ad9\u8655\u7406 +GenericServlet.ERROR_0001_BAD_OBJECT=\u7121\u6cd5\u53d6\u5f97\u7cfb\u7d71\u7269\u4ef6\uff1a{0} +GenericServlet.ERROR_0002_BAD_GENERATOR=\u7121\u6cd5\u53d6\u5f97\u5167\u5bb9\u7522\u751f\u5668\uff1a{0} +GenericServlet.ERROR_0003_DURING_CONTENT_CREATE=\u7121\u6cd5\u70ba URL \u7522\u751f\u5167\u5bb9\uff1a{0} +GenericServlet.ERROR_0004_RESOURCE_NOT_FOUND=\u5728\u5916\u639b\u7a0b\u5f0f {0} \u4e2d\u627e\u4e0d\u5230\u8cc7\u6e90 {1} +GenericServlet.ERROR_0005_NO_RESOURCE_SPECIFIED=\u5728\u6b64 URL \u672a\u6307\u5b9a\u4efb\u4f55\u8cc7\u6e90 +AbstractGwtRpcProxyServlet.ERROR_0001_FAILED_TO_RESOLVE_DISPATCH_TARGET=\u91dd\u5c0d\u8981\u6c42\u4e0a\u4e0b\u6587\u8def\u5f91 {0} \u627e\u4e0d\u5230\u767c\u9001\u76ee\u6a19\u985e\u5225 +AbstractGwtRpcProxyServlet.ERROR_0002_RPC_INVALID_REQUEST=RPC \u8981\u6c42\u7121\u6548\u3002 +AbstractGwtRpcProxyServlet.ERROR_0003_RPC_INVOCATION_FAILED=\u5728\u76ee\u6a19\u670d\u52d9 {0} \u4e0a\u9032\u884c RPC \u53eb\u7528\u5931\u6557\u3002 +GwtRpcPluginProxyServlet.ERROR_0004_MALFORMED_URL=\u683c\u5f0f\u4e0d\u6b63\u78ba\u7684 moduleBaseURL {0} +GwtRpcPluginProxyServlet.ERROR_0007_FAILED_TO_OPEN_FILE=\u7121\u6cd5\u958b\u555f\u5e8f\u5217\u5316\u6a94\u6848 {0}\u3002 +GwtRpcPluginProxyServlet.ERROR_0008_FAILED_TO_PARSE_FILE=\u7121\u6cd5\u5256\u6790\u5e8f\u5217\u5316\u6a94\u6848 {0}\u3002 +GwtRpcPluginProxyServlet.ERROR_0001_SERVICE_NOT_FOUND=\u670d\u52d9\u8b58\u5225\u78bc "{0}" \u6c92\u6709\u53ef\u7528\u7684 GWT \u670d\u52d9 +GwtRpcPluginProxyServlet.ERROR_0002_FAILED_TO_GET_BEAN_REFERENCE=\u7121\u6cd5\u53d6\u5f97\u670d\u52d9 Bean {0} \u7684\u53c3\u8003 +GwtRpcPluginProxyServlet.ERROR_0005_FAILED_TO_FIND_PLUGIN=\u627e\u4e0d\u5230\u5916\u639b\u7a0b\u5f0f\u4ee5\u8655\u7406\u91dd\u5c0d {0} \u7684\u8981\u6c42\u3002 \u60a8\u662f\u5426\u78ba\u5b9a\u5617\u8a66\u8207\u6b64\u53ef\u5916\u639b GWT-RPC Bean \u901a\u8a0a\u7684 GWT \u7528\u6236\u7aef\u662f\u4f86\u81ea\u5916\u639b\u7a0b\u5f0f\uff1f\u975e\u5916\u639b\u7a0b\u5f0f GWT \u7528\u6236\u7aef\u7a0b\u5f0f\u78bc\u76ee\u524d\u7121\u6cd5\u5b58\u53d6\u53ef\u5916\u639b GWT-RPC \u670d\u52d9\uff0c\u56e0\u70ba\u6211\u5011\u7121\u6cd5\u5224\u65b7\u53ef\u627e\u5230\u9069\u7576\u5e8f\u5217\u5316\u6a94\u6848\u7684\u4f4d\u7f6e\u3002 +GwtRpcPluginProxyServlet.ERROR_0006_FAILED_TO_FIND_FILE=\u7121\u6cd5\u5f9e\u5916\u639b\u7a0b\u5f0f\u8cc7\u6e90\u8f09\u5165\u5668\u53d6\u5f97\u5e8f\u5217\u5316\u539f\u5247\u6a94\u6848 {0}\u3002 +GwtRpcPluginProxyServlet.WARN_MULTIPLE_RESOURCES_FOUND=\u627e\u5230\u591a\u500b\u540d\u70ba {0} \u7684\u5e8f\u5217\u5316\u539f\u5247\u6a94\u6848\u3002\u6b63\u5728\u4f7f\u7528\u7b2c\u4e00\u500b\u6a94\u6848\u3002 +GwtRpcProxyServlet.ERROR_0001_NO_BEAN_FOUND_FOR_SERVICE=\u91dd\u5c0d\u670d\u52d9 {1} \u627e\u4e0d\u5230\u5177\u6709\u8b58\u5225\u78bc {0} \u7684 Bean +GwtRpcProxyServlet.ERROR_0002_FAILED_TO_GET_BEAN_REFERENCE=\u7121\u6cd5\u53d6\u5f97\u670d\u52d9 Bean {0} \u7684\u53c3\u8003 +UploadFileServlet.ERROR_0001_NO_FILE_TO_UPLOAD=\u6c92\u6709\u8981\u4e0a\u50b3\u7684\u6a94\u6848 +UploadFileServlet.ERROR_0002_FILE_ALREADY_EXIST=\u6a94\u6848\u5df2\u5b58\u5728 +UploadFileServlet.ERROR_0003_FILE_TOO_BIG=\u8981\u4e0a\u50b3\u7684\u6a94\u6848\u592a\u5927 +UploadFileServlet.ERROR_0004_FOLDER_SIZE_LIMIT_REACHED=\u8cc7\u6599\u593e\u5728\u4e0a\u50b3\u4e4b\u5f8c\u5c07\u8d85\u904e\u5927\u5c0f\u4e0a\u9650 +UploadFileServlet.ERROR_0005_UNKNOWN_ERROR=\u4e0a\u50b3\u6a94\u6848 {0} \u6642\u767c\u751f\u932f\u8aa4 +UploadFileServlet.ERROR_0006_FILE_TOO_BIG=\u672a\u58d3\u7e2e\u7684\u6a94\u6848\u5927\u5c0f\u5c07\u6703\u592a\u5927\u3002\u5c07\u522a\u9664\u5df2\u4e0a\u50b3\u7684\u58d3\u7e2e\u6a94\u6848\u3002 +UploadFileServlet.ERROR_0007_FOLDER_SIZE_LIMIT_REACHED=\u8cc7\u6599\u593e\u5728\u5c55\u958b\u6a94\u6848\u4e4b\u5f8c\u5c07\u8d85\u904e\u5927\u5c0f\u4e0a\u9650\u3002\u5c07\u522a\u9664\u5df2\u4e0a\u50b3\u7684\u58d3\u7e2e\u6a94\u6848\u3002 +UploadFileServlet.ERROR_0008_FILE_LOCATION_INVALID=\u6a94\u6848\u4f4d\u7f6e\u7121\u6548\u3002 +UploadFileServlet.ERROR_0009_UNAUTHORIZED=\u5c0d\u6b64\u7aef\u9ede\u7684\u5b58\u53d6\u672a\u7372\u6388\u6b0a\u3002\u8acb\u9023\u7d61\u60a8\u7684\u7cfb\u7d71\u7ba1\u7406\u54e1\u3002 +UploadFileServlet.ERROR_0010_FILE_NAME_INVALID=\u6a94\u6848\u540d\u7a31\u7121\u6548\u3002 +UploadFileServlet.ERROR_0011_ILLEGAL_FILE_TYPE=\u4e0d\u5141\u8a31\u6a94\u6848\u985e\u578b\u3002\u5141\u8a31\u7684\u985e\u578b\u662f {0} +UploadFileServlet.ERROR_0012_ILLEGAL_CONTENTS=\u5728\u5df2\u4e0a\u50b3\u7684\u58d3\u7e2e\u6a94\u6848\u4e2d\u627e\u4e0d\u5230\u4efb\u4f55\u6709\u6548\u7684\u9805\u76ee\u3002 +UploadFileServlet.ERROR_0013_NO_SUCH_FILE_OR_DIRECTORY=\u6c92\u6709\u8a72\u6a94\u6848\u6216\u76ee\u9304\u3002 +PluggableUploadFileServlet.ERROR_0001_NO_FILE_TO_UPLOAD=\u6c92\u6709\u8981\u4e0a\u50b3\u7684\u6a94\u6848 +PluggableUploadFileServlet.ERROR_0002_FILE_ALREADY_EXIST=\u6a94\u6848\u5df2\u5b58\u5728 +PluggableUploadFileServlet.ERROR_0004_FOLDER_SIZE_LIMIT_REACHED=\u8cc7\u6599\u593e\u5728\u4e0a\u50b3\u4e4b\u5f8c\u5c07\u8d85\u904e\u5927\u5c0f\u4e0a\u9650 +PluggableUploadFileServlet.ERROR_0005_UNKNOWN_ERROR=\u4e0a\u50b3\u6a94\u6848 {0} \u6642\u767c\u751f\u932f\u8aa4 +PluggableUploadFileServlet.ERROR_0006_NO_UPLOADER_FOUND=\u7121\u6cd5\u5f9e\u8981\u6c42\u8def\u5f91\u5224\u65b7\u6a94\u6848\u4e0a\u50b3\u8005\u8b58\u5225\u78bc +PluggableUploadFileServlet.ERROR_0007_UPLOADER_WRONG_TYPE=\u4e0a\u50b3\u8005 Bean \u662f\u932f\u8aa4\u7684\u985e\u578b\uff0c\u5fc5\u9808\u662f {0} +PluggableUploadFileServlet.ERROR_0008_NO_UPLOADER_BY_ID=\u5916\u639b\u7a0b\u5f0f\u7ba1\u7406\u54e1\u627e\u4e0d\u5230\u5177\u6709\u8b58\u5225\u78bc {0} \u7684 Bean +LocalizationServlet.ERROR_0000_ERROR=\u64f7\u53d6 JSON \u8a0a\u606f\u7d44\u5408\u6642\u767c\u751f\u932f\u8aa4 +LocalizationServlet.ERROR_0001_INVALID_PLUGIN_ID=\u7121\u6548\u7684\u5916\u639b\u7a0b\u5f0f\u8b58\u5225\u78bc\uff1a{0} +LocalizationServlet.ERROR_0002_INVALID_RESOURCE_NAME=\u7121\u6548\u7684\u8cc7\u6e90\u540d\u7a31\uff1a{0} \ No newline at end of file diff --git a/extensions/src/main/resources/org/pentaho/platform/web/xsl/messages/messages_cn.properties b/extensions/src/main/resources/org/pentaho/platform/web/xsl/messages/messages_cn.properties index 78c35ade1e0..32b6c33a972 100644 --- a/extensions/src/main/resources/org/pentaho/platform/web/xsl/messages/messages_cn.properties +++ b/extensions/src/main/resources/org/pentaho/platform/web/xsl/messages/messages_cn.properties @@ -12,82 +12,185 @@ # without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # See the GNU Lesser General Public License for more details. #Wed Jun 04 19:33:27 EDT 2008 -UI.USER_STOP=[cn_8] Stop -UI.USER_PUBLISHER_TITLE=[cn_446] Publisher Administration -UI.USER_FILTER_PANEL_HINT=[cn_438] Select filters to apply to other controls on this page -UI.USER_PUBLISHER_DESCRIPTION=[cn_435] Description -UI.USER_SCHEDULER_RESUME_RESULT=[cn_416] Scheduler Resume Result\: -UI.USER_CANCEL=[cn_246] Cancel -UI.USER_PUBLISHER_NAME=[cn_423] Publisher -UI.USER_TRIGGER_STATE_BLOCKED=[cn_252] Blocked -UI.USER_TRIGGER_STATE_PAUSED=[cn_259] Paused -UI.USER_SUBMIT=[cn_19] Submit -UI.USER_TEST_SUITE_PASS=[cn_20] Pass -UI.USER_CUSTOM_PARAMETER_HINT=[cn_429] This parameter page is generated using a custom (XSL) template. You can create a custom template for each report if you want to... -UI.USER_RUN=[cn_458] Run... -UI.USER_UPDATE=[cn_444] Update... -UI.USER_DATASOURCE_OLD_PASSWORD=[cn_263] Old password -UI.USER_JOB_GROUP_NAME=[cn_264] Job - Group / Name -UI.USER_TEST_SUITE_PENTAHO_ID=[cn_26] Your pentaho.org user id (optional)\: -UI.USER_DATASOURCE_DELETE=[cn_265] Delete -UI.USER_ACTIONS=[cn_440] Actions -UI.USER_DRILL_HINT=[cn_441] Drill down on -UI.USER_SCHEDULER_SUSPEND_RESULT=[cn_431] Scheduler Suspend Result\: -UI.USER_SCHEDULER_ACTION_STATUS=[cn_457] Scheduler Status -UI.USER_TEST_SUITE_FAIL=[cn_30] Fail -UI.USER_SELECT=[cn_454] Select\: -UI.USER_DATASOURCE_PASSWORD=[cn_283] Password -UI.USER_TRIGGER_STATE=[cn_292] State -UI.USER_DATASOURCE_STATUS=[cn_295] Web App -UI.USER_DATASOURCE_NAME=[cn_299] Datasource -UI.USER_FIRE_TIME_NAME=[cn_301] Fire Time - Last / Next -UI.USER_SCHEDULER_ACTION_DELETE=[cn_308] Delete +UI.USER_STOP=[cn_8] \u505c\u6b62 +UI.USER_PUBLISHER_TITLE=[cn_446] \u767c\u884c\u8005\u7cfb\u7d71\u7ba1\u7406 +UI.USER_FILTER_PANEL_HINT=[cn_438] \u9078\u53d6\u7be9\u9078\u4ee5\u5957\u7528\u5230\u6b64\u9801\u9762\u4e0a\u7684\u5176\u4ed6\u63a7\u5236\u9805 +UI.USER_PUBLISHER_DESCRIPTION=[cn_435] \u63cf\u8ff0 +UI.USER_SCHEDULER_RESUME_RESULT=[cn_416] \u6392\u7a0b\u5668\u7e7c\u7e8c\u7d50\u679c\uff1a +UI.USER_CANCEL=[cn_246] \u53d6\u6d88 +UI.USER_PUBLISHER_NAME=[cn_423] \u767c\u884c\u8005 +UI.USER_TRIGGER_STATE_BLOCKED=[cn_252] \u5df2\u5c01\u9396 +UI.USER_TRIGGER_STATE_PAUSED=[cn_259] \u5df2\u66ab\u505c +UI.USER_SUBMIT=[cn_19] \u63d0\u4ea4 +UI.USER_TEST_SUITE_PASS=[cn_20] \u901a\u904e +UI.USER_CUSTOM_PARAMETER_HINT=[cn_429] \u6b64\u53c3\u6578\u9801\u9762\u662f\u4f7f\u7528\u81ea\u8a02 (XSL) \u7bc4\u672c\u7522\u751f\u3002\u5982\u679c\u60a8\u60f3\u8981\u7684\u8a71\uff0c\u53ef\u4ee5\u91dd\u5c0d\u6bcf\u500b\u5831\u544a\u5efa\u7acb\u81ea\u8a02\u7bc4\u672c... +UI.USER_RUN=[cn_458] \u57f7\u884c... +UI.USER_UPDATE=[cn_444] \u66f4\u65b0... +UI.USER_DATASOURCE_OLD_PASSWORD=[cn_263] \u820a\u5bc6\u78bc +UI.USER_JOB_GROUP_NAME=[cn_264] \u4f5c\u696d - \u7fa4\u7d44/\u540d\u7a31 +UI.USER_TEST_SUITE_PENTAHO_ID=[cn_26] \u60a8\u7684 pentaho.org \u4f7f\u7528\u8005\u8b58\u5225\u78bc (\u9078\u64c7\u6027)\uff1a +UI.USER_DATASOURCE_DELETE=[cn_265] \u522a\u9664 +UI.USER_ACTIONS=[cn_440] \u52d5\u4f5c +UI.USER_DRILL_HINT=[cn_441] \u5728\u4e0b\u5217\u9805\u76ee\u4e0a\u5411\u4e0b\u947d\u7814\uff1a +UI.USER_SCHEDULER_SUSPEND_RESULT=[cn_431] \u6392\u7a0b\u5668\u66ab\u505c\u7d50\u679c\uff1a +UI.USER_SCHEDULER_ACTION_STATUS=[cn_457] \u6392\u7a0b\u5668\u72c0\u614b +UI.USER_TEST_SUITE_FAIL=[cn_30] \u5931\u6557 +UI.USER_SELECT=[cn_454] \u9078\u53d6\uff1a +UI.USER_DATASOURCE_PASSWORD=[cn_283] \u5bc6\u78bc +UI.USER_TRIGGER_STATE=[cn_292] \u72c0\u614b +UI.USER_DATASOURCE_STATUS=[cn_295] Web \u61c9\u7528\u7a0b\u5f0f +UI.USER_DATASOURCE_NAME=[cn_299] \u8cc7\u6599\u4f86\u6e90 +UI.USER_FIRE_TIME_NAME=[cn_301] \u89f8\u767c\u6642\u9593 - \u4e0a\u4e00\u500b/\u4e0b\u4e00\u500b +UI.USER_SCHEDULER_ACTION_DELETE=[cn_308] \u522a\u9664 UI.USER_DATASOURCE_SEPARATOR=[cn_311] | -UI.USER_TEST_SUITE_AUTO_TEST=[cn_42] Auto Test -UI.USER_CHOOSE=[cn_452] Choose... -UI.USER_SCHEDULER_PAUSE_STATUS=[cn_448] Scheduler Status is\: +UI.USER_TEST_SUITE_AUTO_TEST=[cn_42] \u81ea\u52d5\u6e2c\u8a66 +UI.USER_CHOOSE=[cn_452] \u9078\u64c7... +UI.USER_SCHEDULER_PAUSE_STATUS=[cn_448] \u6392\u7a0b\u5668\u72c0\u614b\u70ba\uff1a UI.USER_DATASOURCE_URL=[cn_317] URL -UI.USER_DATASOURCE_NEW_PASSWORD=[cn_319] New password -UI.USER_DATASOURCES_TITLE=[cn_323] Datasource Administration -UI.USER_TEST_SUITE_VALUE=[cn_434] Value -UI.USER_TRIGGER_STATE_NONE=[cn_328] None -UI.USER_DATASOURCE_TEST_HINT=[cn_333] 'Test' will attempt to connect to the datasource using these settings. It will not test that the datasource has been configured for the web application -UI.USER_SCHEDULER_ACTION_SUSPEND=[cn_417] Suspend -UI.USER_TEST_SUITE_SUITE=[cn_64] Suite -UI.USER_SCHEDULER_ACTION_EXECUTE_JOB=[cn_348] Run Now -UI.USER_DATASOURCE_TYPE=[cn_354] Type -UI.USER_SCHEDULER_ACTION_LIST=[cn_462] List Jobs -UI.USER_DATASOURCE_COPY=[cn_364] Copy -UI.USER_JOB_DESCRIPTION=[cn_367] Description -UI.USER_TRIGGER_STATE_ERROR=[cn_369] Error -UI.USER_SCHEDULER_ACTION_RESUME=[cn_437] Resume -UI.USER_SCHEDULER_ADMINISTRATION=[cn_461] Scheduler Administration -UI.USER_TEST_SUITE_NUM_PASS_FAIL=[cn_70] \# P F -UI.USER_DATASOURCE_DRIVER=[cn_379] Driver -UI.USER_DATASOURCE_EDIT_HELP=[cn_384] Make any changes you need and then choose 'Save' or 'Test' -UI.USER_SHOW=[cn_72] Show -UI.USER_TRIGGER_STATE_COMPLETE=[cn_387] Complete -UI.USER_TEST_SUITE_ENVIRONMENT=[cn_426] Environment Properties -UI.USER_PUBLISHER_PUBLISH=[cn_424] Publish -UI.USER_DATASOURCE_REFRESH=[cn_389] Refresh -UI.USER_DATASOURCE_EDIT=[cn_392] Edit -UI.USER_DATASOURCE_SAVE=[cn_395] Save -UI.USER_TEST_SUITE_ACTIONS=[cn_74] Actions -UI.USER_TEST_SUITE_START=[cn_78] Start -UI.USER_TEST_SUITE_PROPERTY=[cn_430] Property -UI.USER_DATASOURCE_ACTIONS=[cn_407] Actions -UI.USER_DATASOURCE_TEST=[cn_410] Test -UI.USER_DATASOURCE_ADD=[cn_412] Add -UI.USER_TEST_SUITE_SUBMIT_HINT=[cn_79] Clicking below will submit your system properties and results of test suite executions to Pentaho. This helps.... etc. etc. -UI.USER_TRIGGER_STATE_NORMAL=[cn_414] Normal -UI.USER_ADMIN=[cn_85] Admin -UI.USER_TRIGGER_ACTION=[cn_419] Action -UI.USER_DATASOURCE_NEW_PASSWORD_AGAIN=[cn_421] New password again -UI.USER_PUBLISHER_ACTION=[cn_451] Actions -UI.USER_SCHEDULER_ADMIN_HELP=[cn_460] You can use the pages to suspend or resume the scheduler. You can check the status of the scheduler and get a list of the current jobs that are scheduled. -UI.USER_TEST_SUITE_SUBMISSION=[cn_87] Submission -UI.USER_DATASOURCE_USER=[cn_425] User Id -UI.USER_TRIGGER_GROUP_NAME=[cn_428] Trigger - Group / Name -UI.USER_TEST_SUITE_TEST_NAME=[cn_447] Test Name -UI.USER_TEST_SUITE_TESTS=[cn_466] Automated Tests -UI.USER_DATASOURCE_SAME_PASSWORD=[cn_432] Keep password the same +UI.USER_DATASOURCE_NEW_PASSWORD=[cn_319] \u65b0\u5bc6\u78bc +UI.USER_DATASOURCES_TITLE=[cn_323] \u8cc7\u6599\u4f86\u6e90\u7cfb\u7d71\u7ba1\u7406 +UI.USER_TEST_SUITE_VALUE=[cn_434] \u503c +UI.USER_TRIGGER_STATE_NONE=[cn_328] \u7121 +UI.USER_DATASOURCE_TEST_HINT=[cn_333] 'Test' \u5c07\u4f7f\u7528\u9019\u4e9b\u8a2d\u5b9a\u5617\u8a66\u9023\u7dda\u5230\u8cc7\u6599\u4f86\u6e90\u3002\u5b83\u5c07\u4e0d\u6703\u6e2c\u8a66\u4ee5\u78ba\u8a8d\u8cc7\u6599\u4f86\u6e90\u5df2\u91dd\u5c0d Web \u61c9\u7528\u7a0b\u5f0f\u9032\u884c\u8a2d\u5b9a +UI.USER_SCHEDULER_ACTION_SUSPEND=[cn_417] \u66ab\u505c +UI.USER_TEST_SUITE_SUITE=[cn_64] \u5957\u4ef6 +UI.USER_SCHEDULER_ACTION_EXECUTE_JOB=[cn_348] \u7acb\u5373\u57f7\u884c +UI.USER_DATASOURCE_TYPE=[cn_354] \u985e\u578b +UI.USER_SCHEDULER_ACTION_LIST=[cn_462] \u5217\u51fa\u4f5c\u696d +UI.USER_DATASOURCE_COPY=[cn_364] \u8907\u88fd +UI.USER_JOB_DESCRIPTION=[cn_367] \u63cf\u8ff0 +UI.USER_TRIGGER_STATE_ERROR=[cn_369] \u932f\u8aa4 +UI.USER_SCHEDULER_ACTION_RESUME=[cn_437] \u7e7c\u7e8c +UI.USER_SCHEDULER_ADMINISTRATION=[cn_461] \u6392\u7a0b\u5668\u7cfb\u7d71\u7ba1\u7406 +UI.USER_TEST_SUITE_NUM_PASS_FAIL=[cn_70] # P F +UI.USER_DATASOURCE_DRIVER=[cn_379] \u9a45\u52d5\u7a0b\u5f0f +UI.USER_DATASOURCE_EDIT_HELP=[cn_384] \u9032\u884c\u4efb\u4f55\u6240\u9700\u7684\u8b8a\u66f4\uff0c\u7136\u5f8c\u9078\u64c7\u300c\u5132\u5b58\u300d\u6216\u300c\u6e2c\u8a66\u300d +UI.USER_SHOW=[cn_72] \u986f\u793a +UI.USER_TRIGGER_STATE_COMPLETE=[cn_387] \u5b8c\u6210 +UI.USER_TEST_SUITE_ENVIRONMENT=[cn_426] \u74b0\u5883\u5c6c\u6027 +UI.USER_PUBLISHER_PUBLISH=[cn_424] \u767c\u884c +UI.USER_DATASOURCE_REFRESH=[cn_389] \u91cd\u65b0\u6574\u7406 +UI.USER_DATASOURCE_EDIT=[cn_392] \u7de8\u8f2f +UI.USER_DATASOURCE_SAVE=[cn_395] \u5132\u5b58 +UI.USER_TEST_SUITE_ACTIONS=[cn_74] \u52d5\u4f5c +UI.USER_TEST_SUITE_START=[cn_78] \u958b\u59cb +UI.USER_TEST_SUITE_PROPERTY=[cn_430] \u5c6c\u6027 +UI.USER_DATASOURCE_ACTIONS=[cn_407] \u52d5\u4f5c +UI.USER_DATASOURCE_TEST=[cn_410] \u6e2c\u8a66 +UI.USER_DATASOURCE_ADD=[cn_412] \u65b0\u589e +UI.USER_TEST_SUITE_SUBMIT_HINT=[cn_79] \u6309\u4e00\u4e0b\u4e0b\u9762\u5c07\u6703\u5c07\u60a8\u7684\u7cfb\u7d71\u5c6c\u6027\u8207\u6e2c\u8a66\u5957\u4ef6\u57f7\u884c\u7d50\u679c\u63d0\u4ea4\u7d66 Pentaho\u3002\u9019\u53ef\u5354\u52a9... \u7b49 +UI.USER_TRIGGER_STATE_NORMAL=[cn_414] \u4e00\u822c +UI.USER_ADMIN=[cn_85] \u7cfb\u7d71\u7ba1\u7406 +UI.USER_TRIGGER_ACTION=[cn_419] \u52d5\u4f5c +UI.USER_DATASOURCE_NEW_PASSWORD_AGAIN=[cn_421] \u518d\u6b21\u8f38\u5165\u65b0\u5bc6\u78bc +UI.USER_PUBLISHER_ACTION=[cn_451] \u52d5\u4f5c +UI.USER_SCHEDULER_ADMIN_HELP=[cn_460] \u60a8\u53ef\u4ee5\u4f7f\u7528\u9801\u9762\u4f86\u66ab\u505c\u6216\u7e7c\u7e8c\u6392\u7a0b\u5668\u3002\u60a8\u53ef\u4ee5\u6aa2\u67e5\u6392\u7a0b\u5668\u7684\u72c0\u614b\u4e26\u53d6\u5f97\u76ee\u524d\u5df2\u6392\u7a0b\u7684\u4f5c\u696d\u6e05\u55ae\u3002 +UI.USER_TEST_SUITE_SUBMISSION=[cn_87] \u63d0\u4ea4 +UI.USER_DATASOURCE_USER=[cn_425] \u4f7f\u7528\u8005\u8b58\u5225\u78bc +UI.USER_TRIGGER_GROUP_NAME=[cn_428] \u89f8\u767c\u7a0b\u5e8f - \u7fa4\u7d44/\u540d\u7a31 +UI.USER_TEST_SUITE_TEST_NAME=[cn_447] \u6e2c\u8a66\u540d\u7a31 +UI.USER_TEST_SUITE_TESTS=[cn_466] \u81ea\u52d5\u5316\u6e2c\u8a66 +UI.USER_DATASOURCE_SAME_PASSWORD=[cn_432] \u7dad\u6301\u76f8\u540c\u7684\u5bc6\u78bc +UI.FILES.VIEW=\u6aa2\u8996\uff1a +UI.FILES.ICONS=\u5716\u793a +UI.FILES.LIST=\u6e05\u55ae +UI.FILES.BROWSE=\u700f\u89bd +UI.FILES.SOLUTIONS=\u65b9\u6848 +UI.FILES.CONFIRM=\u60a8\u662f\u5426\u78ba\u5b9a\u8981\u9019\u9ebc\u505a\uff1f +UI.FILES.DEFAULT=\u9810\u8a2d\u503c +UI.PUBLISHERS-MINI.REFRESH=\u91cd\u65b0\u6574\u7406 +UI.PUBLISHERS-MINI.MORE=\u66f4\u591a +UI.TEST_SUITE.SEE_SUBMISSION=\u6309\u4e00\u4e0b\u9019\u88e1\u4ee5\u67e5\u770b\u5b8c\u6574\u63d0\u4ea4 +UI.PARAM_FORM_UTIL.REPORT_NAME=\u5831\u544a\u540d\u7a31\uff1a +UI.USER_ADD=\u65b0\u589e +UI.USER_COMPLETE=\u5b8c\u6210 +UI.USER_DATASOURCES_XSL_CONFIGURED=\u5df2\u8a2d\u5b9a +UI.USER_DATASOURCES_XSL_NOT_CONFIGURED=\u672a\u8a2d\u5b9a +UI.USER_DATE=\u65e5\u671f +UI.USER_NAME=\u540d\u7a31\uff1a +UI.USER_NEW_CONTENT_CLEAR_ALERT=\u6e05\u9664\u5de5\u5177\u5217\u8b66\u793a +UI.USER_NEW_CONTENT_INTRO=\u6b64\u9801\u9762\u986f\u793a\u60a8\u5df2\u63d0\u4ea4\u5728\u4f3a\u670d\u5668\u4e0a\u65bc\u80cc\u666f\u57f7\u884c\u7684\u5831\u544a\u3002\u60a8\u53ef\u4ee5\u53d6\u6d88\u5c1a\u672a\u57f7\u884c\u7684\u5831\u544a\uff0c\u4e14\u53ef\u4ee5\u6aa2\u8996\u6216\u522a\u9664\u5df2\u57f7\u884c\u7684\u5831\u544a\u3002 +UI.USER_PARAMETER_NOT_OPTIONAL=\u8acb\u91dd\u5c0d {0} \u9078\u53d6\u67d0\u500b\u9805\u76ee +UI.USER_PARAMETER_BACKGROUND_WARNING=\u8cc7\u8a0a\uff1a\u6b64\u529f\u80fd\u4e0d\u652f\u63f4\u5177\u6709\u53c3\u6578\u63d0\u793a\u7684\u5831\u544a\u3002\u5728\u80cc\u666f\u57f7\u884c\u53ef\u80fd\u6703\u56de\u5831\u932f\u8aa4\u3002\u6309\u4e00\u4e0b\u300c\u78ba\u5b9a\u300d\u4ee5\u7e7c\u7e8c\u3002 +UI.USER_RESET=\u91cd\u8a2d +UI.USER_SCHEDULED=\u6b63\u5728\u7b49\u5f85 +UI.USER_SIZE=\u5927\u5c0f +UI.USER_TYPE=\u985e\u578b +UI.VIEW_SUBS.MY_VIEWS=\u6211\u7684\u6aa2\u8996\uff1a +UI.PROPS_PANEL.FILE=\u6a94\u6848\uff1a +UI.PROPS_PANEL.DELETE=\u522a\u9664 +UI.PROPS_PANEL.ROLE=\u89d2\u8272 +UI.PROPS_PANEL.RECURSE=\u4ee5\u905e\u8ff4\u65b9\u5f0f\u5957\u7528 +UI.USER_ADD_SUBSCRIPTION=\u8a02\u95b1 +UI.SUBSCRIPTION_ADMIN.RETURN_ADMIN=\u8fd4\u56de\u7cfb\u7d71\u7ba1\u7406\u9801\u9762 +UI.SUBSCRIPTION_ADMIN.RETURN=\u8fd4\u56de +UI.SUBSCRIPTION_ADMIN.COMP_SUCCESS=\u8981\u6c42\u5df2\u6210\u529f\u5b8c\u6210 +UI.SUBSCRIPTION_ADMIN.COMP_WARN=\u8981\u6c42\u5df2\u5b8c\u6210\uff0c\u4f46\u662f\u5305\u542b\u8b66\u544a +UI.SUBSCRIPTION_ADMIN.REQ_FAILED=\u8981\u6c42\u5931\u6557 +UI.SUBSCRIPTION_ADMIN.REQ_COMP=\u8981\u6c42\u5b8c\u6210 +UI.SUBSCRIPTION_ADMIN.PARAM_MISSING=\u672a\u63d0\u4f9b\u5fc5\u8981\u53c3\u6578\uff0c\u907a\u5931 - +UI.SUBSCRIPTION_ADMIN.REQ_EXCEP=\u8655\u7406\u8981\u6c42\u6642\u767c\u751f\u4f8b\u5916\u72c0\u6cc1 - +UI.SUBSCRIPTION_ADMIN.ERROR_COLON=\u932f\u8aa4\uff1a +UI.SUBSCRIPTION_ADMIN.WARNING_COLON=\u8b66\u544a\uff1a +UI.SUBSCRIPTION_ADMIN.SCHED_IMPORT=\u8a02\u95b1\u6392\u7a0b\u548c\u5167\u5bb9\u532f\u5165 +UI.SUBSCRIPTION_ADMIN.TITLE=\u8a02\u95b1\u7cfb\u7d71\u7ba1\u7406 +UI.SUBSCRIPTION_ADMIN.HELP=\u4f7f\u7528\u6b64\u9801\u9762\u4f86\u5efa\u7acb\u53ca\u7ba1\u7406\u8a02\u95b1\u3001\u8a02\u95b1\u6392\u7a0b\u8207\u5df2\u6392\u7a0b\u7684\u4f5c\u696d +UI.SUBSCRIPTION_ADMIN.MODIFIED_COLON=\u5df2\u4fee\u6539\uff1a +UI.SUBSCRIPTION_ADMIN.SCHED_SUBS=\u5df2\u6392\u7a0b\u7684\u8a02\u95b1 +UI.SUBSCRIPTION_ADMIN.JOB_NAME_TITLE=\u4f5c\u696d - \u540d\u7a31/\u6a19\u984c +UI.SUBSCRIPTION_ADMIN.DESCRIPTION=\u63cf\u8ff0 +UI.SUBSCRIPTION_ADMIN.CRON_EXP=Cron \u904b\u7b97\u5f0f +UI.SUBSCRIPTION_ADMIN.NUM_SUBS=\u8a02\u95b1\u6578\u76ee +UI.SUBSCRIPTION_ADMIN.SUBS_WO_JOBS=\u6c92\u6709\u6392\u7a0b\u4f5c\u696d\u7684\u8a02\u95b1 +UI.SUBSCRIPTION_ADMIN.SUBS_WO_JOBS_HELP=\u4e0b\u5217\u8a02\u95b1\u672a\u6392\u7a0b\u57f7\u884c\u3002\u5df2\u8a02\u95b1\u9019\u4e9b\u8a02\u95b1\u7684\u4eba\u5c07\u4e0d\u6703\u63a5\u6536\u5230\u4efb\u4f55\u5167\u5bb9\u3002\u60a8\u53ef\u4ee5\u500b\u5225\u52a0\u4ee5\u6392\u7a0b\u6216\u9078\u53d6 +UI.SUBSCRIPTION_ADMIN.SCHED_ALL=\u6392\u7a0b\u5168\u90e8 +UI.SUBSCRIPTION_ADMIN.JOB_WO_SUB=\u4e0b\u5217\u4f5c\u696d\u5df2\u6392\u7a0b\u57f7\u884c\uff0c\u4f46\u6c92\u6709\u76f8\u5c0d\u61c9\u7684\u8a02\u95b1\u3002\u7576\u5b83\u5011\u57f7\u884c\u6642\uff0c\u53ef\u80fd\u4e0d\u6703\u6b63\u78ba\u904b\u4f5c\u3002\u60a8\u53ef\u4ee5\u500b\u5225\u52a0\u4ee5\u6392\u7a0b\u6216\u9078\u53d6 +UI.SUBSCRIPTION_ADMIN.RUN_NOW=\u7acb\u5373\u57f7\u884c +UI.SUBSCRIPTION_ADMIN.SCHEDULE=\u6392\u7a0b +UI.SUBSCRIPTION_ADMIN.EDIT=\u7de8\u8f2f +UI.SUBSCRIPTION_ADMIN.DELETE=\u522a\u9664 +UI.SUBSCRIPTION_ADMIN.ACTIONS=\u52d5\u4f5c +UI.SUBSCRIPTION_ADMIN.SCHED_STAT_COLON=\u6392\u7a0b\u5668\u72c0\u614b\uff1a +UI.SUBSCRIPTION_ADMIN.ADD_SCHEDULE=\u65b0\u589e\u6392\u7a0b +UI.SUBSCRIPTION_ADMIN.SET_CONTENT=\u8a2d\u5b9a\u5167\u5bb9 +UI.SUBSCRIPTION_ADMIN.IMPORT_SCHEDS_CONTENT=\u532f\u5165\u6392\u7a0b\u8207\u5167\u5bb9 +UI.SUBSCRIPTION_ADMIN.REFRESH=\u91cd\u65b0\u6574\u7406 +UI.SUBSCRIPTION_ADMIN.SHOW_SUBS=\u986f\u793a\u8a02\u95b1 +UI.SUBSCRIPTION_ADMIN.ACTION_SEQUENCE=\u52d5\u4f5c\u5e8f\u5217 +UI.SUBSCRIPTION_ADMIN.ACTION=\u52d5\u4f5c +UI.SUBSCRIPTION_ADMIN.REMOVE_CONTENT=\u79fb\u9664\u6b64\u6392\u7a0b\u7684\u5167\u5bb9 +UI.SUBSCRIPTION_ADMIN.ACTION_SEQUENCE_COLON=\u52d5\u4f5c\u5e8f\u5217\uff1a +UI.SUBSCRIPTION_ADMIN.USE_THIS_PAGE=\u4f7f\u7528\u6b64\u9801\u9762\u4f86\u7de8\u8f2f\u6392\u7a0b\u3002 +UI.SUBSCRIPTION_ADMIN.SCHEDULE_EDITOR=\u6392\u7a0b\u7de8\u8f2f\u5668 +UI.SUBSCRIPTION_ADMIN.SET_CONTENT_FOR_SCHEDULE=\u8a2d\u5b9a\u6b64\u6392\u7a0b\u7684\u5167\u5bb9 +UI.SUBSCRIPTION_ADMIN.LAST_TRIGGER_COLON=\u4e0a\u4e00\u500b\u89f8\u767c\u7a0b\u5e8f\uff1a +UI.SUBSCRIPTION_ADMIN.NEXT_TRIGGER_COLON=\u4e0b\u4e00\u500b\u89f8\u767c\u7a0b\u5e8f\uff1a +UI.SUBSCRIPTION_ADMIN.NO_CONTENT_ALLOWED=\u6c92\u6709\u4efb\u4f55\u91dd\u5c0d\u6b64\u6392\u7a0b\u5141\u8a31\u7684\u5167\u5bb9 +UI.SUBSCRIPTION_ADMIN.CONTENT_ALLOWED=\u91dd\u5c0d\u6b64\u6392\u7a0b\u5141\u8a31\u7684\u5167\u5bb9 +UI.SUBSCRIPTION_ADMIN.SCHEDULE_CONTENT_ACTION=schedule-content-actions +UI.SUBSCRIPTION_ADMIN.ADD_NEW_SCHEDULE=\u65b0\u589e\u6392\u7a0b +UI.SUBSCRIPTION_ADMIN.USE_PAGE_TO_ADD_NEW_SCHEDULE=\u4f7f\u7528\u6b64\u9801\u9762\u4f86\u65b0\u589e\u6392\u7a0b\u3002 +UI.SUBSCRIPTION_ADMIN.SET_CONTENT_FOR_DASH=\u8a2d\u5b9a\u4e0b\u5217\u6392\u7a0b\u7684\u5167\u5bb9 - +UI.SUBSCRIPTION_ADMIN.USE_PAGE_TO_SELECT_CONTENT=\u4f7f\u7528\u6b64\u9801\u9762\u4f86\u9078\u53d6\u53ef\u642d\u914d\u6b64\u6392\u7a0b\u4f7f\u7528\u7684\u5167\u5bb9\u3002 +UI.SUBSCRIPTION_ADMIN.CHECK_CONTENT=\u6aa2\u67e5\u53ef\u642d\u914d\u6b64\u6392\u7a0b\u4f7f\u7528\u7684\u5167\u5bb9\u3002\u82e5\u8981\u79fb\u9664\u6b64\u6392\u7a0b\u7684\u5167\u5bb9\uff0c\u8acb\u53d6\u6d88\u9078\u53d6\u5b83 +UI.SUBSCRIPTION_ADMIN.GROUP_COLON=\u7fa4\u7d44\uff1a +UI.SUBSCRIPTION_ADMIN.NAME_COLON=\u540d\u7a31\uff1a +UI.SUBSCRIPTION_ADMIN.TITLE_COLON=\u6a19\u984c\uff1a +UI.SUBSCRIPTION_ADMIN.DESCRIPTION_COLON=\u63cf\u8ff0\uff1a +UI.SUBSCRIPTION_ADMIN.CRON_EXP_COLON=Cron \u904b\u7b97\u5f0f\uff1a +UI.SUBSCRIPTION_ADMIN.SUB_CONTENT_EDITOR=\u8a02\u95b1\u5167\u5bb9\u7de8\u8f2f\u5668 +UI.SUBSCRIPTION_ADMIN.USE_PAGE_TO_EDIT=\u4f7f\u7528\u6b64\u9801\u9762\u4f86\u7de8\u8f2f\u8a02\u95b1\u5167\u5bb9\u3002 +UI.SUBSCRIPTION_ADMIN.SET_SCHED_FOR_CONTENT=\u8a2d\u5b9a\u9069\u7528\u65bc\u6b64\u5167\u5bb9\u7684\u6392\u7a0b +UI.SUBSCRIPTION_ADMIN.SCHED_FOR_CONTENT=\u9069\u7528\u65bc\u6b64\u5167\u5bb9\u7684\u6392\u7a0b +UI.SUBSCRIPTION_ADMIN.GROUP=\u7fa4\u7d44 +UI.SUBSCRIPTION_ADMIN.NAME=\u540d\u7a31 +UI.SUBSCRIPTION_ADMIN.TITLE.TITLE=\u6a19\u984c +UI.SUBSCRIPTION_ADMIN.NO_CONTENT_SCHED=\u6c92\u6709\u91dd\u5c0d\u6b64\u5167\u5bb9\u7684\u6392\u7a0b +UI.SUBSCRIPTION_ADMIN.REMOVE_THIS_SCHEDULE=\u79fb\u9664\u6b64\u6392\u7a0b +UI.SUBSCRIPTION_ADMIN.SET_SCHED_CONTENT_DASH=\u8a2d\u5b9a\u9069\u7528\u4e0b\u5217\u5167\u5bb9\u7684\u6392\u7a0b - +UI.SUBSCRIPTION_ADMIN.USE_PAGE_SCHED_AS=\u4f7f\u7528\u6b64\u9801\u9762\u4f86\u9078\u53d6\u53ef\u642d\u914d\u6b64\u52d5\u4f5c\u5e8f\u5217\u4f7f\u7528\u7684\u6392\u7a0b\u3002 +UI.SUBSCRIPTION_ADMIN.CHECK_SCHED_FOR_AS=\u6aa2\u67e5\u53ef\u642d\u914d\u6b64\u52d5\u4f5c\u5e8f\u5217\u4f7f\u7528\u7684\u6392\u7a0b\u3002\u82e5\u8981\u79fb\u9664\u6392\u7a0b\uff0c\u8acb\u53d6\u6d88\u9078\u53d6\u5b83\u5011 +UI.SUBSCRIPTION_ADMIN.SUBSCRIPTIONS=\u8a02\u95b1 +UI.SUBSCRIPTION_ADMIN.MANAGE_USER_SUBSCRIPTIONS=\u4f7f\u7528\u6b64\u9801\u9762\u4f86\u7ba1\u7406\u4f7f\u7528\u8005\u8a02\u95b1\u3002 +UI.SUBSCRIPTION_ADMIN.USER=\u4f7f\u7528\u8005 +UI.SUBSCRIPTION_ADMIN.NO_SUBSCRIPTIONS_DEFINED=\u6c92\u6709\u4efb\u4f55\u8a02\u95b1 diff --git a/extensions/src/main/resources/org/pentaho/platform/workitem/messages/messages_CN.properties b/extensions/src/main/resources/org/pentaho/platform/workitem/messages/messages_CN.properties new file mode 100644 index 00000000000..1e94935964b --- /dev/null +++ b/extensions/src/main/resources/org/pentaho/platform/workitem/messages/messages_CN.properties @@ -0,0 +1 @@ +ERROR_0001_MISSING_WORK_ITEM_LIFECYCLE=\u5de5\u4f5c\u9805\u76ee\u751f\u547d\u9031\u671f\u8cc7\u8a0a\u907a\u5931\uff0c\u7121\u6cd5\u767c\u884c diff --git a/repository/src/main/resources/com/pentaho/pdi/messages/messages_CN.properties b/repository/src/main/resources/com/pentaho/pdi/messages/messages_CN.properties new file mode 100644 index 00000000000..352d65d0006 --- /dev/null +++ b/repository/src/main/resources/com/pentaho/pdi/messages/messages_CN.properties @@ -0,0 +1,12 @@ +# RepositorySyncWebService +RepositorySyncWebService.UNABLE_TO_READ_DATA=\u8b66\u544a\uff1aPentaho Server \u7121\u6cd5\u8b80\u53d6 repositories.xml \u6a94\u6848\u3002\u9019\u53ef\u80fd\u6703\u5c0e\u81f4\u6392\u7a0b\u554f\u984c\u3002\u8acb\u67e5\u770b\u4f3a\u670d\u5668\u8a18\u9304\u4ee5\u53d6\u5f97\u8a73\u7d30\u8cc7\u6599\u3002 +RepositorySyncWebService.UNABLE_TO_LOAD_PLUGIN=\u8b66\u544a\uff1aPentaho Server \u7121\u6cd5\u8f09\u5165 PentahoEnterpriseRepository \u5916\u639b\u7a0b\u5f0f\u3002\u9019\u53ef\u80fd\u6703\u5c0e\u81f4\u6392\u7a0b\u554f\u984c\u3002\u8acb\u67e5\u770b\u4f3a\u670d\u5668\u8a18\u9304\u4ee5\u53d6\u5f97\u8a73\u7d30\u8cc7\u6599\u3002 +RepositorySyncWebService.UNABLE_TO_REGISTER_REPOSITORY=\u8b66\u544a\uff1aPentaho Server \u7121\u6cd5\u8a3b\u518a\u5b58\u653e\u5eab {0}\u3002\u9019\u53ef\u80fd\u6703\u5c0e\u81f4\u6392\u7a0b\u554f\u984c\u3002\u8acb\u67e5\u770b\u4f3a\u670d\u5668\u8a18\u9304\u4ee5\u53d6\u5f97\u8a73\u7d30\u8cc7\u6599\u3002 +RepositorySyncWebService.FULLY_QUALIFIED_SERVER_URL_SYNC_PROBLEM=\u8b66\u544a\uff1aPentaho Server \u7684\u5b8c\u6574\u4f3a\u670d\u5668 URL\uff1a{0} \u8207\u6240\u63d0\u4f9b\u7684\u7528\u6236\u7aef URL \u4e0d\u76f8\u7b26\uff1a{1}\u3002\u9019\u5c07\u6703\u5c0e\u81f4\u6392\u7a0b\u554f\u984c\u3002\u8acb\u5728 web.xml \u6a94\u6848\u4e2d\u8a2d\u5b9a\u60a8 Pentaho Server \u7684 fully-qualified-server-url \u5c6c\u6027\u3002 +RepositorySyncWebService.REPOSITORY_URL_SYNC_PROBLEM=\u8b66\u544a\uff1aPentaho Server {0} \u5b58\u653e\u5eab\u7684 URL\uff1a{1} \u8207\u7528\u6236\u7aef\u7684 URL \u4e0d\u76f8\u7b26\uff1a{2}\u3002\u9019\u5c07\u6703\u5c0e\u81f4\u6392\u7a0b\u554f\u984c\u3002\u8acb\u8a2d\u5b9a\u60a8\u7684\u7528\u6236\u7aef\u8207\u4f3a\u670d\u5668\u4ee5\u5171\u7528\u76f8\u540c\u7684 URL\u3002 +RepositorySyncWebService.REPOSITORY_URL_XML_PARSING_PROBLEM=\u5b58\u653e\u5eab {0} \u672a\u8207 URL \u540c\u6b65\uff0c\u7121\u6cd5\u5728 XML \u4e2d\u5c0b\u627e URL \u7bc0\u9ede\uff1a{1} +RepositorySyncWebService.REPOSITORY_URL_XML_PARSING_PROBLEM_CLIENT_MESSAGE=\u8b66\u544a\uff1a\u5256\u6790\u5b58\u653e\u5eab {0} \u7684 XML \u6642\u767c\u751f\u932f\u8aa4\u3002\u9019\u53ef\u80fd\u6703\u5c0e\u81f4\u6392\u7a0b\u554f\u984c\u3002\u8acb\u67e5\u770b\u4f3a\u670d\u5668\u8a18\u9304\u4ee5\u53d6\u5f97\u8a73\u7d30\u8cc7\u6599\u3002 + +#RepositoryFileProxy +RepositoryFileProxy.REPOSITORY_EXCEPTION_WAS_FOUND=\u627e\u5230 RepositoryException\uff1a +RepositoryFileProxy.INVALID_ITEM_STATE_EXCEPTION={0} \u4e2d\u767c\u751f InvalidItemStateException\u3002\u53ef\u80fd\u539f\u56e0\uff1a\u6a94\u6848\u5df2\u4e0d\u5b58\u5728 diff --git a/repository/src/main/resources/org/pentaho/platform/repository/messages/messages_cn.properties b/repository/src/main/resources/org/pentaho/platform/repository/messages/messages_cn.properties index 7ed7ac01476..bf44e147e9a 100644 --- a/repository/src/main/resources/org/pentaho/platform/repository/messages/messages_cn.properties +++ b/repository/src/main/resources/org/pentaho/platform/repository/messages/messages_cn.properties @@ -12,79 +12,194 @@ # without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # See the GNU General Public License for more details. #Wed Jun 04 19:08:55 EDT 2008 -CONTFILE.ERROR_0004_CANNOT_DELETE_FOR_CREATE=[cn_7] the file {0} cannot be deleted for create. +CONTFILE.ERROR_0004_CANNOT_DELETE_FOR_CREATE=[cn_7] \u7121\u6cd5\u522a\u9664\u6a94\u6848 {0} \u4ee5\u9032\u884c\u5efa\u7acb\u3002 EMPTYSTRTYPE.DEBUG_NULL_SAFE_GET=[cn_86] EmptyStringUserType.nullSafeGet() -CONTITEM.ERROR_0004_OUTPUT_STREAM_NOT_AVAILABLE=[cn_24] OutputStream not available -HIBUTIL.ERROR_0002_DISCONNECT=[cn_48] disconnectSession() failed. -RTREPO.ERROR_0003_SAVING_ELEMENT=[cn_79] Error saving element to session -HIBUTIL.DEBUG_MAKE_PERSISTENT=[cn_60] Making object persistent - {0} -RTREPO.ERROR_0001_INVALIDTYPE=[cn_76] Parameter type mismatch - parameter was {0}, being set to {1} -RTREPO.DEBUG_NEW_ELEMENT_PARENT=[cn_80] newRuntimeElement({0},{1}) -HIBUTIL.DEBUG_CLOSING_SESSION=[cn_63] Closing Session of this thread. -HIBUTIL.DEBUG_COMMIT_TRANS=[cn_59] Committing database transaction of this thread. -HIBUTIL.ERROR_0012_CONFIG_NOT_FOUND=[cn_55] Configuration file specified in application context ({0}) could not be found. +CONTITEM.ERROR_0004_OUTPUT_STREAM_NOT_AVAILABLE=[cn_24] OutputStream \u7121\u6cd5\u4f7f\u7528 +HIBUTIL.ERROR_0002_DISCONNECT=[cn_48] disconnectSession() \u5931\u6557\u3002 +RTREPO.ERROR_0003_SAVING_ELEMENT=[cn_79] \u5c07\u5143\u7d20\u5132\u5b58\u5230\u5de5\u4f5c\u968e\u6bb5\u6642\u767c\u751f\u932f\u8aa4 +HIBUTIL.DEBUG_MAKE_PERSISTENT=[cn_60] \u6b63\u5728\u4f7f\u7269\u4ef6\u6301\u7e8c - {0} +RTREPO.ERROR_0001_INVALIDTYPE=[cn_76] \u53c3\u6578\u985e\u578b\u4e0d\u76f8\u7b26 - \u53c3\u6578\u70ba {0}\uff0c\u6b63\u5728\u8a2d\u5b9a\u70ba {1} +RTREPO.DEBUG_NEW_ELEMENT_PARENT=[cn_80] newRuntimeElement({0}\uff0c{1}) +HIBUTIL.DEBUG_CLOSING_SESSION=[cn_63] \u6b63\u5728\u95dc\u9589\u6b64\u57f7\u884c\u7dd2\u7684\u5de5\u4f5c\u968e\u6bb5\u3002 +HIBUTIL.DEBUG_COMMIT_TRANS=[cn_59] \u6b63\u5728\u8a8d\u53ef\u6b64\u57f7\u884c\u7dd2\u7684\u8cc7\u6599\u5eab\u4ea4\u6613\u3002 +HIBUTIL.ERROR_0012_CONFIG_NOT_FOUND=[cn_55] \u627e\u4e0d\u5230\u61c9\u7528\u7a0b\u5f0f\u4e0a\u4e0b\u6587 ({0}) \u4e2d\u6307\u5b9a\u7684\u8a2d\u5b9a\u6a94\u3002 BLOBUTYPE.DEBUG_NULL_SAFE_SET=[cn_84] BlobUserType.nullSafeSet RTREPO.DEBUG_LOAD_ELEMENT_BY_ID=[cn_75] loadElementById({0}) -HIBUTIL.ERROR_0010_SAVING_UPDATING=[cn_67] saving or updating object in Hibernate. -SolutionRepository.ERROR_0005_INVALID_SOLUTION_FILE=[cn_40] Could not find Action Definition document -HIBUTIL.DEBUG_START_TRANS=[cn_72] Starting new database transaction in this thread. -FileInfo.ERROR_0001_DOCUMENT_HAS_NO_TYPE=[cn_42] Solution document has no type -RuntimeContext.ERROR_0024_NO_CONTENT_REPOSITORY=[cn_45] Could not get content repository +HIBUTIL.ERROR_0010_SAVING_UPDATING=[cn_67] \u6b63\u65bc Hibernate \u4e2d\u5132\u5b58\u6216\u66f4\u65b0\u7269\u4ef6\u3002 +SolutionRepository.ERROR_0005_INVALID_SOLUTION_FILE=[cn_40] \u627e\u4e0d\u5230\u52d5\u4f5c\u5b9a\u7fa9\u6587\u4ef6 +HIBUTIL.DEBUG_START_TRANS=[cn_72] \u6b63\u65bc\u6b64\u57f7\u884c\u7dd2\u4e2d\u958b\u59cb\u65b0\u7684\u8cc7\u6599\u5eab\u4ea4\u6613\u3002 +FileInfo.ERROR_0001_DOCUMENT_HAS_NO_TYPE=[cn_42] \u65b9\u6848\u6587\u4ef6\u6c92\u6709\u985e\u578b +RuntimeContext.ERROR_0024_NO_CONTENT_REPOSITORY=[cn_45] \u7121\u6cd5\u53d6\u5f97\u5167\u5bb9\u5b58\u653e\u5eab EMPTYSTRTYPE.DEBUG_NULL_SAFE_SET=[cn_83] EmptyStringUserType.nullSafeSet() -SolutionRepository.ERROR_0003_NULL_SOLUTION_FILE=[cn_39] File does not exist in solution {0} -CONTLOC.ERROR_0004_PATH_DOES_NOT_EXIST=[cn_28] The specified Path ({0}) does not exist. -HIBUTIL.USER_HIBERNATEMANAGED=[cn_47] Hibernate being used in managed environment - using JNDI for factory. -BLOBUTYPE.ERROR_0001_SETTING_BLOB=[cn_87] setting blob -SolutionRepository.DEBUG_FILE_PATH=[cn_35] getFile path\={0} -HIBUTIL.ERROR_0004_START_TRANS=[cn_54] beginTransaction() failed. -HIBUTIL.DEBUG_ROLLBACK=[cn_56] Tyring to rollback database transaction of this thread. -HIBUTIL.ERROR_0006_BUILD_SESSION_FACTORY=[cn_51] Building SessionFactory failed. -RTELEMENT.ERROR_0001_INVALIDUPDATE=[cn_74] Update of runtime element is invalid - it is currently read-only. +SolutionRepository.ERROR_0003_NULL_SOLUTION_FILE=[cn_39] \u6a94\u6848\u4e0d\u5b58\u5728\u65bc\u65b9\u6848 {0} \u4e2d +CONTLOC.ERROR_0004_PATH_DOES_NOT_EXIST=[cn_28] \u6307\u5b9a\u7684\u8def\u5f91 ({0}) \u4e0d\u5b58\u5728\u3002 +HIBUTIL.USER_HIBERNATEMANAGED=[cn_47] \u6b63\u65bc\u53d7\u63a7\u74b0\u5883\u4e2d\u4f7f\u7528 Hibernate - \u6b63\u5728\u70ba\u8655\u7406\u7ad9\u4f7f\u7528 JNDI\u3002 +BLOBUTYPE.ERROR_0001_SETTING_BLOB=[cn_87] \u6b63\u5728\u8a2d\u5b9a Blob +SolutionRepository.DEBUG_FILE_PATH=[cn_35] getFile \u8def\u5f91={0} +HIBUTIL.ERROR_0004_START_TRANS=[cn_54] beginTransaction() \u5931\u6557\u3002 +HIBUTIL.DEBUG_ROLLBACK=[cn_56] \u6b63\u5728\u5617\u8a66\u56de\u5fa9\u6b64\u57f7\u884c\u7dd2\u7684\u8cc7\u6599\u5eab\u4ea4\u6613\u3002 +HIBUTIL.ERROR_0006_BUILD_SESSION_FACTORY=[cn_51] \u5efa\u7f6e SessionFactory \u5931\u6557\u3002 +RTELEMENT.ERROR_0001_INVALIDUPDATE=[cn_74] \u57f7\u884c\u968e\u6bb5\u5143\u7d20\u7684\u66f4\u65b0\u7121\u6548 - \u5b83\u76ee\u524d\u662f\u552f\u8b80\u7684\u3002 LONGSTRTYPE.DEBUG_NULL_SAFE_GET=[cn_89] LongStringUserType.nullSafeGet() -HIBUTIL.ERROR_0005_GET_SESSION=[cn_61] getSession() failed. -RTREPO.DEBUG_CREATE_INSTANCE=[cn_78] Created instanceId\: {0} -HIBUTIL.ERROR_0009_CLOSE_SESSION=[cn_58] closeSession() failed. -SolutionRepository.ERROR_0004_INVALID_CONTEXT=[cn_34] getActionDefinition - context, instance id and action name are not all valid -CONTLOC.ERROR_0002_CANNOT_CREATE_TMPFILE=[cn_4] Cannot create temp file in directory {0}. -RTREPO.ERROR_0002_SAVING_ELEMENT=[cn_77] Error saving element to session -HIBUTIL.ERROR_0007_REBUILD_SESSION_FACTORY=[cn_64] rebuildingSessionFactory failed. -SolutionRepository.ERROR_0006_INVALID_SEQUENCE_DOCUMENT=[cn_32] Solution action sequence document is not valid {0} -CONTFILE.ERROR_0005_CANNOT_CREATE=[cn_3] the file {0} cannot be created. -CONTITEM.ERROR_0002_NO_EXISTING_FILES=[cn_10] There is no input available because this content item ({0}) hasn't been written to. -RTREPO.DEBUG_NEW_ELEMENT_PARENT_SOLN=[cn_82] newRuntimeElement({0},{1},{2}) -CONTREP.ERROR_0003_GETTING_CONTENT_BY_ID=[cn_316] Error getting content by id - {0} -RTREPO.DEBUG_PROPERTY_GETSET=[cn_73] RuntimeElement.{0}Property - {1} -SolutionRepository.DEBUG_ADDING_ACTION=[cn_45] Adding action to solution repository {0} -HIBUTIL.DEBUG_MAKE_TRANSIENT=[cn_50] Making object transient (deleting from Hibernate) - {0} -FileInfo.ERROR_0002_COULD_NOT_LOAD=[cn_46] Could not load solution document -CONTREP.DEBUG_NEW_LOCATION=[cn_25] Creating new location for {0} -HIBUTIL.ERROR_0013_NO_SESSION_FACTORY=[cn_69] Managed configuration specified, but hibernate.session_factory_name is not specified in configuration file. -HIBUTIL.ERROR_0008_COMMIT_TRANS=[cn_53] commitTransaction() failed. -CONTFILE.ERROR_0006_DURING_COPY=[cn_26] during copy of file {0} to file {1}. -CONTREP.ERROR_0002_GETTING_LOCATION=[cn_18] Error getting location - {0} -CONTLOC.ERROR_0003_MKDIR=[cn_16] Cannot create subdirectory {0}. +HIBUTIL.ERROR_0005_GET_SESSION=[cn_61] getSession() \u5931\u6557\u3002 +RTREPO.DEBUG_CREATE_INSTANCE=[cn_78] \u5df2\u5efa\u7acb instanceId\uff1a{0} +HIBUTIL.ERROR_0009_CLOSE_SESSION=[cn_58] closeSession() \u5931\u6557\u3002 +SolutionRepository.ERROR_0004_INVALID_CONTEXT=[cn_34] getActionDefinition - \u4e0a\u4e0b\u6587\u3001\u57f7\u884c\u500b\u9ad4\u8b58\u5225\u78bc\u8207\u52d5\u4f5c\u540d\u7a31\u4e26\u975e\u5168\u90e8\u6709\u6548 +CONTLOC.ERROR_0002_CANNOT_CREATE_TMPFILE=[cn_4] \u7121\u6cd5\u5728\u76ee\u9304 {0} \u4e2d\u5efa\u7acb\u66ab\u5b58\u6a94\u3002 +RTREPO.ERROR_0002_SAVING_ELEMENT=[cn_77] \u5c07\u5143\u7d20\u5132\u5b58\u5230\u5de5\u4f5c\u968e\u6bb5\u6642\u767c\u751f\u932f\u8aa4 +HIBUTIL.ERROR_0007_REBUILD_SESSION_FACTORY=[cn_64] rebuildingSessionFactory \u5931\u6557\u3002 +SolutionRepository.ERROR_0006_INVALID_SEQUENCE_DOCUMENT=[cn_32] \u65b9\u6848\u52d5\u4f5c\u5e8f\u5217\u6587\u4ef6\u7121\u6548 {0} +CONTFILE.ERROR_0005_CANNOT_CREATE=[cn_3] \u7121\u6cd5\u5efa\u7acb\u6a94\u6848 {0}\u3002 +CONTITEM.ERROR_0002_NO_EXISTING_FILES=[cn_10] \u6c92\u6709\u8f38\u5165\u53ef\u7528\uff0c\u56e0\u70ba\u5c1a\u672a\u5beb\u5165\u6b64\u5167\u5bb9\u9805\u76ee ({0})\u3002 +RTREPO.DEBUG_NEW_ELEMENT_PARENT_SOLN=[cn_82] newRuntimeElement({0}\uff0c{1}\uff0c{2}) +CONTREP.ERROR_0003_GETTING_CONTENT_BY_ID=[cn_316] \u4f9d\u8b58\u5225\u78bc\u53d6\u5f97\u5167\u5bb9\u6642\u767c\u751f\u932f\u8aa4 - {0} +RTREPO.DEBUG_PROPERTY_GETSET=[cn_73] RuntimeElement\u3002{0}\u5c6c\u6027 - {1} +SolutionRepository.DEBUG_ADDING_ACTION=[cn_45] \u6b63\u5728\u5c07\u52d5\u4f5c\u65b0\u589e\u5230\u65b9\u6848\u5b58\u653e\u5eab {0} +HIBUTIL.DEBUG_MAKE_TRANSIENT=[cn_50] \u6b63\u5728\u4f7f\u7269\u4ef6\u6210\u70ba\u66ab\u5b58 (\u6b63\u5728\u5f9e Hibernate \u522a\u9664) - {0} +FileInfo.ERROR_0002_COULD_NOT_LOAD=[cn_46] \u7121\u6cd5\u8f09\u5165\u65b9\u6848\u6587\u4ef6 +CONTREP.DEBUG_NEW_LOCATION=[cn_25] \u6b63\u5728\u70ba {0} \u5efa\u7acb\u65b0\u4f4d\u7f6e +HIBUTIL.ERROR_0013_NO_SESSION_FACTORY=[cn_69] \u5df2\u6307\u5b9a\u53d7\u63a7\u8a2d\u5b9a\uff0c\u4f46\u5b83\u662f Hibernate\u3002\u672a\u5728\u8a2d\u5b9a\u6a94\u4e2d\u6307\u5b9a session_factory_name\u3002 +HIBUTIL.ERROR_0008_COMMIT_TRANS=[cn_53] commitTransaction() \u5931\u6557\u3002 +CONTFILE.ERROR_0006_DURING_COPY=[cn_26] \u5728\u5c07\u6a94\u6848 {0} \u8907\u88fd\u5230\u6a94\u6848 {1} \u671f\u9593\u3002 +CONTREP.ERROR_0002_GETTING_LOCATION=[cn_18] \u53d6\u5f97\u4f4d\u7f6e\u6642\u767c\u751f\u932f\u8aa4 - {0} +CONTLOC.ERROR_0003_MKDIR=[cn_16] \u7121\u6cd5\u5efa\u7acb\u5b50\u76ee\u9304 {0}\u3002 LONGSTRTYPE.DEBUG_NULL_SAFE_SET=[cn_85] LongStringUserType.nullSafeSet() -SolutionRepository.DEBUG_FILE_LIST_XPATH=[cn_41] getFileList xPath\={0} -SolutionRepository.ERROR_0001_FILE_DOES_NOT_EXIST=[cn_36] File does not exist {0} -SolutionRepository.ERROR_0007_COULD_NOT_READ_PROPERTIES=[cn_33] Could not read properties file {0} -SolutionRepository.ERROR_0008_ACTION_SEQUENCE_NAME_INVALID=[cn_95] Action Sequence has no name or no path -SolutionRepository.WARN_MISSING_RESOURCE_PROPERTY=[cn_44] Missing property "{0}" in resource file "{1}" for "{2}" -CONTITEM.ERROR_0001_NO_EXISTING_FILES=[cn_17] There is no input available because this content item ({0}) hasn't been written to. -CONTITEM.ERROR_0003_BAD_WRITE_MODE=[cn_20] Write mode {0} not understood. -CONTFILE.ERROR_0001_FILE_CANNOT_BE_READ=[cn_21] the file {0} cannot be read. -SolutionRepository.ERROR_0009_INVALID_DOCUMENT=[cn_385] The solution document {0} is not a valid XML document -CONTREP.DEBUG_CREATE_LOCATION_ID=[cn_27] Created location Id {0} -HIBUTIL.DEBUG_OPEN_NEW_SESSION=[cn_62] Opening new Session for this thread. -HIBUTIL.ERROR_0003_ROLLBACK=[cn_57] rollbackTransaction() failed. -HIBFILTER.INFO_INIT=[cn_52] Pentaho Hibernate Filter Init - Now opening and closing session for each request -HIBUTIL.USER_HIBERNATEUNMANAGED=[cn_68] Hibernate being used in un-managed environment - using static for factory. -HIBUTIL.DEBUG_USING_INTERCEPTOR=[cn_65] Using interceptor\: -RTREPO.ERROR_0001_LOAD_ELEMENT=[cn_81] Error loading element {0} -SolutionRepository.ERROR_0002_NULL_RUNTIME_CONTEXT=[cn_43] Runtime context is null -CONTFILE.ERROR_0003_OVERWRITE_DISALLOWED=[cn_5] the file {0} cannot be overwritten. -RuntimeContext.ERROR_0025_INVALID_CONTENT_LOCATION=[cn_38] Could not get content location -HIBUTIL.ERROR_0014_EVICTING_OBJECT=[cn_66] evicting object from Hibernate cache failed. +SolutionRepository.DEBUG_FILE_LIST_XPATH=[cn_41] getFileList xPath={0} +SolutionRepository.ERROR_0001_FILE_DOES_NOT_EXIST=[cn_36] \u6a94\u6848\u4e0d\u5b58\u5728 {0} +SolutionRepository.ERROR_0007_COULD_NOT_READ_PROPERTIES=[cn_33] \u7121\u6cd5\u8b80\u53d6\u5c6c\u6027\u6a94 {0} +SolutionRepository.ERROR_0008_ACTION_SEQUENCE_NAME_INVALID=[cn_95] \u52d5\u4f5c\u5e8f\u5217\u6c92\u6709\u540d\u7a31\u6216\u6c92\u6709\u8def\u5f91 +SolutionRepository.WARN_MISSING_RESOURCE_PROPERTY=[cn_44] "{2}" \u7684\u8cc7\u6e90\u6a94 "{1}" \u4e2d\u907a\u5931\u5c6c\u6027 "{0}" +CONTITEM.ERROR_0001_NO_EXISTING_FILES=[cn_17] \u6c92\u6709\u8f38\u5165\u53ef\u7528\uff0c\u56e0\u70ba\u5c1a\u672a\u5beb\u5165\u6b64\u5167\u5bb9\u9805\u76ee ({0})\u3002 +CONTITEM.ERROR_0003_BAD_WRITE_MODE=[cn_20] \u4e0d\u7406\u89e3\u5beb\u5165\u6a21\u5f0f {0}\u3002 +CONTFILE.ERROR_0001_FILE_CANNOT_BE_READ=[cn_21] \u7121\u6cd5\u8b80\u53d6\u6a94\u6848 {0}\u3002 +SolutionRepository.ERROR_0009_INVALID_DOCUMENT=[cn_385] \u65b9\u6848\u6587\u4ef6 {0} \u4e0d\u662f\u6709\u6548\u7684 XML \u6587\u4ef6 +CONTREP.DEBUG_CREATE_LOCATION_ID=[cn_27] \u5df2\u5efa\u7acb\u4f4d\u7f6e\u8b58\u5225\u78bc {0} +HIBUTIL.DEBUG_OPEN_NEW_SESSION=[cn_62] \u6b63\u5728\u958b\u555f\u6b64\u57f7\u884c\u7dd2\u7684\u65b0\u5de5\u4f5c\u968e\u6bb5\u3002 +HIBUTIL.ERROR_0003_ROLLBACK=[cn_57] rollbackTransaction() \u5931\u6557\u3002 +HIBFILTER.INFO_INIT=[cn_52] Pentaho Hibernate \u7be9\u9078\u521d\u59cb\u5316 - \u73fe\u5728\u6b63\u5728\u70ba\u6bcf\u500b\u8981\u6c42\u958b\u555f\u4e26\u95dc\u9589\u5de5\u4f5c\u968e\u6bb5 +HIBUTIL.USER_HIBERNATEUNMANAGED=[cn_68] \u6b63\u65bc\u975e\u53d7\u63a7\u74b0\u5883\u4e2d\u4f7f\u7528 Hibernate - \u6b63\u5728\u70ba\u8655\u7406\u7ad9\u4f7f\u7528\u975c\u614b\u3002 +HIBUTIL.DEBUG_USING_INTERCEPTOR=[cn_65] \u6b63\u5728\u4f7f\u7528\u6514\u622a\u5668\uff1a +RTREPO.ERROR_0001_LOAD_ELEMENT=[cn_81] \u8f09\u5165\u5143\u7d20 {0} \u6642\u767c\u751f\u932f\u8aa4 +SolutionRepository.ERROR_0002_NULL_RUNTIME_CONTEXT=[cn_43] \u57f7\u884c\u968e\u6bb5\u4e0a\u4e0b\u6587\u662f Null +CONTFILE.ERROR_0003_OVERWRITE_DISALLOWED=[cn_5] \u7121\u6cd5\u8986\u5beb\u6a94\u6848 {0}\u3002 +RuntimeContext.ERROR_0025_INVALID_CONTENT_LOCATION=[cn_38] \u7121\u6cd5\u53d6\u5f97\u5167\u5bb9\u4f4d\u7f6e +HIBUTIL.ERROR_0014_EVICTING_OBJECT=[cn_66] \u5c07\u7269\u4ef6\u5f9e Hibernate \u5feb\u53d6\u9010\u51fa\u5931\u6557\u3002 BLOBUTYPE.DEBUG_NULL_SAFE_GET=[cn_88] BlobUserType.nullSafeGet -CONTFILE.ERROR_0002_FILE_DOES_NOT_EXIST=[cn_11] the file {0} does not exist. -HIBUTIL.ERROR_0011_DELETING_OBJ=[cn_70] deleting object from Hibernate. -SolutionRepository.USER_DELETE_FOLDER_WARNING=[cn_437] Delete folder called with a file reference... should be a folder reference +CONTFILE.ERROR_0002_FILE_DOES_NOT_EXIST=[cn_11] \u6a94\u6848 {0} \u4e0d\u5b58\u5728\u3002 +HIBUTIL.ERROR_0011_DELETING_OBJ=[cn_70] \u6b63\u5728\u5f9e Hibernate \u522a\u9664\u7269\u4ef6\u3002 +SolutionRepository.USER_DELETE_FOLDER_WARNING=[cn_437] \u522a\u9664\u4f7f\u7528\u6a94\u6848\u53c3\u8003\u547c\u53eb\u7684\u8cc7\u6599\u593e... \u61c9\u8a72\u70ba\u8cc7\u6599\u593e\u53c3\u8003 +CONTITEM.ERROR_0005_COULD_NOT_DELETE_OS_FILE=\u7121\u6cd5\u522a\u9664 OS \u6a94\u6848 {0}\u3002 +CONTITEM.ERROR_0006_ACTION_NAME_CANNOT_BE_NULL=\u52d5\u4f5c\u540d\u7a31\u4e0d\u80fd\u662f Null\u3002 +CONTREP.ERROR_0004_SAVING_LOCATION=\u5132\u5b58\u5167\u5bb9\u4f4d\u7f6e\u6642\u767c\u751f\u932f\u8aa4\u3002 +CONTREP.ERROR_0005_SAVING_BACKGROUND_CONTENT_ID=\u5132\u5b58\u80cc\u666f\u5167\u5bb9\u8b58\u5225\u78bc\u6642\u767c\u751f\u932f\u8aa4 - {0} +ContentItem.ERROR_0001_CLOSE_OUTPUT_STREAM=\u7121\u6cd5\u95dc\u9589\u8f38\u51fa\u4e32\u6d41 +EMPTYSTRTYPE.CODE_PENTAHO_EMPTY_STRING= +HIBUTIL.ERROR_0420_CONFIGURATION_ERROR_NO_HIB_CFG_FILE_SETTING=\u8a2d\u5b9a\u932f\u8aa4 - \u627e\u4e0d\u5230 Hibernate \u8a2d\u5b9a\u6a94\u8a2d\u5b9a - \u6b63\u5728\u5617\u8a66\u9810\u8a2d\u7684 hibernate.cfg.xml\u3002 +SOLREPO.ERROR_0006_MISSING_RESOURCE=\u627e\u4e0d\u5230\u8cc7\u6e90\uff1a{0} +SOLREPO.AUDIT_DEL_FILE=\u5df2\u522a\u9664\u6a94\u6848\uff1a{0} +SOLREPO.AUDIT_DEL_FOLDER=\u5df2\u522a\u9664\u8cc7\u6599\u593e\uff1a{0} +CleanRepoPublisher.CLEAN_REPO=\u6e05\u9664\u5b58\u653e\u5eab +CleanRepoPublisher.CLEAN_REPO_DESCRIPTION=\u5f9e\u5167\u5bb9\u5b58\u653e\u5eab\u79fb\u9664\u5b58\u5728\u8d85\u904e 180 \u5929\u7684\u6a94\u6848\u3002 +CleanRepoPublisher.CLEAN_REPO_DONE=\u5df2\u6e05\u9664\u5b58\u653e\u5eab +CleanRepoPublisher.ERROR_0001_CLEAN_REPO_FAILED=\u5b58\u653e\u5eab\u6e05\u9664\u7a0b\u5f0f\u767c\u751f\u932f\u8aa4\uff1a{0} +SolutionRepository.ERROR_0012_INVALID_SOLUTION_ROOT=\u65b9\u6848\u6839\u8cc7\u6599\u593e ({0}) \u7121\u6548\u3002 +SolutionRepository.ERROR_0013_RESET_FAILED=\u91cd\u8a2d\u5931\u6557\uff1a{0} +SolutionRepository.ERROR_0014_COULD_NOT_SAVE_FILE=\u7121\u6cd5\u5132\u5b58\u6a94\u6848\uff1a{0} +SolutionRepository.ERROR_0015_SET_PERMISSIONS_DENIED=\u5728\u6a94\u6848 "{0}" \u4e0a\u8a2d\u5b9a\u6b0a\u9650\u7684\u8981\u6c42\u906d\u62d2\u3002 +SolutionRepository.ERROR_0017_INVALID_XML_DOCUMENT=XML \u6587\u4ef6\u7121\u6548 {0} +SolutionRepository.ERROR_0019_NO_DATA_IN_FILE=\u6a94\u6848\u6c92\u6709\u4efb\u4f55\u8cc7\u6599 {0} +SolutionRepository.ERROR_0020_FILE_IS_NOT_READABLE=\u6a94\u6848\u7121\u6cd5\u8b80\u53d6 {0} +SolutionRepository.ERROR_0021_FILE_NOT_ADDED=\u7121\u6cd5\u65b0\u589e\u5230\u5b58\u653e\u5eab{0} +SolutionRepository.ERROR_0022_HIBERNATE_EXCEPTION=Hibernate \u7121\u6cd5\u50b3\u56de\u6a94\u6848 {0} \u7684\u7d50\u679c +SolutionRepository.ERROR_0023_INVALID_PUBLISH_LOCATION_ROOT=\u7121\u6548\u7684\u767c\u884c\u4f4d\u7f6e\uff1a\u6839\u8cc7\u6599\u593e +SolutionRepository.ERROR_0024_CREATING_CLASSLOADER=\u7121\u6cd5\u5efa\u7acb\u985e\u5225\u8f09\u5165\u5668 +SolutionRepository.WARN_0001_UNDEFINED_SOLUTION_NAME=Pentaho.xml \u7bc0\u9ede solution-repository/db-repository-name \u4e2d\u672a\u5b9a\u7fa9\u65b9\u6848\u5b58\u653e\u5eab\u540d\u7a31 +SolutionRepository.WARN_0002_USING_SOLUTION_NAME=\u6b63\u5728\u4f7f\u7528\u65b9\u6848\u540d\u7a31\uff1a{0} +SolutionRepository.WARN_0003_REPOSITORY_NOT_FOUND_BY_NAME=\u7121\u6cd5\u4f9d\u540d\u7a31 {0} \u5c0b\u627e\u5b58\u653e\u5eab +SolutionRepository.ACCESS_DENIED=\u91dd\u5c0d\u4f5c\u696d {1} \u5b58\u53d6 {0} \u6642\u906d\u62d2\u3002 +SolutionRepository.INFO_0001_BEGIN_LOAD_DB_REPOSITORY=\u958b\u59cb - \u5f9e\u6a94\u6848\u7cfb\u7d71\u66f4\u65b0\u65b9\u6848 +SolutionRepository.INFO_0002_UPDATED_FOLDER=\u5df2\u66f4\u65b0 - \u8cc7\u6599\u593e\uff1a{0} +SolutionRepository.INFO_0003_END_LOAD_DB_REPOSITORY=\u7d50\u675f - \u5f9e\u6a94\u6848\u7cfb\u7d71\u66f4\u65b0\u65b9\u6848 +SolutionRepository.INFO_0004_ADDED_FOLDER=\u5df2\u65b0\u589e - \u8cc7\u6599\u593e\uff1a{0} +SolutionRepository.INFO_0006_ADDED_FILE=\u5df2\u65b0\u589e - \u6a94\u6848\uff1a{0} +SolutionRepository.INFO_0007_UPDATED_FILE=\u5df2\u66f4\u65b0 - \u6a94\u6848\uff1a{0} +SolutionRepository.INFO_0008_NOT_ADDED=\u672a\u65b0\u589e\u65b9\u6848\u6a94\uff1a"{0}"\u3002\u5df2\u5047\u8a2d\u4f4d\u65bc admin \u8cc7\u6599\u593e\u3002 +SolutionRepository.INFO_0009_RESET_SUCCESS=\u91cd\u8a2d\u6210\u529f\u3002\u5df2\u5957\u7528\u9810\u8a2d ACLS\u3002 +SolutionRepository.INFO_0010_DOCUMENT_NOT_FOUND=\u627e\u4e0d\u5230\u6587\u4ef6 {0} +SolutionRepository.QUERY_COLUMN_NAME=\u6a94\u6848\u540d\u7a31 +SolutionRepository.QUERY_COLUMN_PARENT=\u7236 +SolutionRepository.QUERY_COLUMN_PATH=\u5b8c\u6574\u8def\u5f91 +SubscriptionHelper.USER_SUBSCRIPTION_NOT_CREATE=\u7121\u6cd5\u5efa\u7acb\u516c\u7528\u6392\u7a0b +SubscriptionHelper.USER_SUBSCRIPTION_CREATED=\u5df2\u5132\u5b58/\u5df2\u5efa\u7acb\u516c\u7528\u6392\u7a0b +SubscriptionHelper.ACTION_SEQUENCE_NOT_ALLOWED=\u91dd\u5c0d\u516c\u7528\u6392\u7a0b\uff0c\u4e0d\u5141\u8a31\u52d5\u4f5c\u5e8f\u5217\uff1a{0} +SubscriptionHelper.USER_SUBSCRIPTION_NOT_DELETED=\u7121\u6cd5\u522a\u9664\u516c\u7528\u6392\u7a0b +SubscriptionHelper.USER_SUBSCRIPTION_DELETED=\u5df2\u522a\u9664\u516c\u7528\u6392\u7a0b +SubscriptionHelper.USER_ARCHIVE_NOT_FOUND=\u627e\u4e0d\u5230\u5c01\u5b58\u7684\u5831\u544a +SubscriptionHelper.USER_SUBSCRIPTION_DOES_NOT_EXIST=\u516c\u7528\u6392\u7a0b\u4e0d\u5b58\u5728 +SubscriptionHelper.USER_CONTENT_ITEM_DOES_NOT_EXIST=\u5167\u5bb9\u9805\u76ee\u4e0d\u5b58\u5728 +SubscriptionHelper.USER_ARCHIVE_DELETED=\u5df2\u522a\u9664\u5c01\u5b58\u7684\u9805\u76ee +SubscriptionHelper.USER_LOGIN_NEEDED=\u5132\u5b58\u524d\u5fc5\u9808\u5148\u767b\u5165 +SubscriptionHelper.USER_SUBSCRIPTION_NAME_ALREADY_EXISTS=\u540d\u70ba "{0}" \u7684\u516c\u7528\u6392\u7a0b\u5df2\u5b58\u5728\u3002\u7de8\u8f2f\u6642\u8acb\u5c07\u5b83\u91cd\u65b0\u547d\u540d\u3002 +SubscriptionPublisher.ERROR_0001=\u627e\u4e0d\u5230\u6a94\u6848\uff1a{0} +SubscriptionPublisher.ERROR_0002=\u627e\u4e0d\u5230\u6a94\u6848\uff1a{0} +SubscriptionPublisher.ERROR_0003=\u7121\u6cd5\u5256\u6790 XML \u6587\u4ef6\uff1a{0} +SubscriptionPublisher.ERROR_0004=\u7121\u6cd5\u5256\u6790 XML \u6587\u4ef6\uff1a{0} +SubscriptionPublisher.ERROR_0005=\u6a94\u6848\u6709\u672a\u77e5\u7684 IO \u4f8b\u5916\u72c0\u6cc1\uff1a{0} +SubscriptionPublisher.ERROR_0006=\u6a94\u6848\u6709\u672a\u77e5\u7684 IO \u4f8b\u5916\u72c0\u6cc1\uff1a{0} +SubscriptionPublisher.ERROR_0007=\u767c\u751f\u975e\u7279\u5b9a\u932f\u8aa4\u3002\u7d50\u679c\u7121\u6cd5\u9810\u6e2c\u3002\u6aa2\u67e5\u8a18\u9304\u3002 +SubscriptionPublisher.INFO_0001=\u5df2\u6210\u529f\u767c\u884c\u6392\u7a0b\u8207\u5167\u5bb9 +SubscriptionPublisher.INFO_0002=\u767c\u884c\u5df2\u532f\u5165\u7684\u6392\u7a0b\u8207\u5167\u5bb9 +SubscriptionPublisher.INFO_0003=\u8a02\u95b1\u767c\u884c\u8005 +SubscriptionExecute.DEBUG_EXECUTION_INFO=\u5df2\u6392\u7a0b {0} \u7684\u57f7\u884c +SubscriptionExecute.DEBUG_FINISHED_EXECUTION=\u5df2\u5b8c\u6210 {0} \u7684\u57f7\u884c +SubscriptionExecute.ERROR_0001_SOLUTION_NAME_MISSING=\u672a\u63d0\u4f9b\u65b9\u6848\u540d\u7a31 +SubscriptionExecute.ERROR_0001_UNABLE_TO_GET_SCHEDULE=\u7121\u6cd5\u53d6\u5f97\u4e0b\u5217\u9805\u76ee\u7684\u6392\u7a0b\uff1a{0} +SubscriptionExecute.ERROR_0002_ACTION_PATH_MISSING=\u672a\u63d0\u4f9b\u52d5\u4f5c\u8def\u5f91 +SubscriptionExecute.ERROR_0003_ACTION_NAME_MISSING=\u672a\u63d0\u4f9b\u52d5\u4f5c\u540d\u7a31 +SubscriptionExecute.ERROR_0004_SCHEDULE_DELETE_FAILED=\u7121\u6cd5\u5728\u6392\u7a0b\u7684\u6700\u7d42\u57f7\u884c\u671f\u9593\u5c07\u516c\u7528\u6392\u7a0b "{0}" \u5f9e\u8a02\u95b1\u5b58\u653e\u5eab\u522a\u9664\u3002 +SubscriptionExecute.ERROR_0005_INVALID_CRON_OR_REPEAT=\u8b58\u5225\u78bc\u70ba "{0}" \u7684\u516c\u7528\u6392\u7a0b\u672a\u6307\u5b9a Cron \u5b57\u4e32\u6216\u91cd\u8907\u8a08\u6578/\u9593\u9694\u3002 +SubscriptionExecute.INFO_TRIGGER_TIME=\u5df2\u89f8\u767c {0}\uff0c\u65bc\uff1a{1}\uff1a{2} +SubscriptionExecute.EMAIL_BODY_MESSAGE=\u6b64\u8a0a\u606f\u662f\u7531\u4f86\u81ea Pentaho BI \u4f3a\u670d\u5668\u7684\u8a02\u95b1\u81ea\u52d5\u7522\u751f +PRO_SUBSCRIPTREP.ERROR_0001_GETTING_SUBSCRIPTION=\u7121\u6cd5\u53d6\u5f97\u516c\u7528\u6392\u7a0b {0} +PRO_SUBSCRIPTREP.ERROR_0002_GETTING_SCHEDULE=\u7121\u6cd5\u53d6\u5f97\u6392\u7a0b {0} +PRO_SUBSCRIPTREP.ERROR_PROCESSING_IMPORTS=\u8655\u7406\u532f\u5165\u6642\u767c\u751f\u4f8b\u5916\u72c0\u6cc1\uff1a +PRO_SUBSCRIPTREP.EXCEPTION_WITH_SCHEDULE=\u6392\u7a0b {0} \u767c\u751f\u932f\u8aa4 +PRO_SUBSCRIPTREP.SCHEDULE_REF_NOT_UNIQUE_ADD=\u7121\u6cd5\u65b0\u589e\u5177\u6709\u540d\u7a31 {0} \u7684\u6392\u7a0b\u3002\u6392\u7a0b\u540d\u7a31\u5fc5\u9808\u662f\u552f\u4e00\u7684\u3002 +PRO_SUBSCRIPTREP.ADDED_SUBSCRIPTION_SCHEDULE=\u5df2\u65b0\u589e\u8a02\u95b1\u6392\u7a0b {0} +PRO_SUBSCRIPTREP.ADDED_SUBSCRIPTION_CONTENT=\u5df2\u65b0\u589e\u8a02\u95b1\u5167\u5bb9 {0} +PRO_SUBSCRIPTREP.USER_IMPORT_PROCESSING_SCHEDULES=\u6b63\u5728\u8655\u7406 {0} \u6392\u7a0b\u7bc0\u9ede\u3002 +PRO_SUBSCRIPTREP.NO_SCHEDULES_DEFINED=\u532f\u5165\u6587\u4ef6\u4e2d\u672a\u5b9a\u7fa9\u4efb\u4f55\u6392\u7a0b\u3002 +PRO_SUBSCRIPTREP.CANNOT_EDIT_SCHEDULE=\u7121\u6cd5\u7de8\u8f2f\u8b58\u5225\u78bc={0} \u7684\u6392\u7a0b +PRO_SUBSCRIPTREP.CANNOT_EDIT_CONTENT=\u7121\u6cd5\u7de8\u8f2f\u8b58\u5225\u78bc={0} \u7684\u5167\u5bb9 +PRO_SUBSCRIPTREP.ERROR_OCCURRED_WITH_SCHEDULE=\u6392\u7a0b {0} \u767c\u751f\u932f\u8aa4\uff1a{1} +PRO_SUBSCRIPTREP.ERROR_WITH_CONTENT_LOG=\u5167\u5bb9 {0} \u767c\u751f\u932f\u8aa4 +PRO_SUBSCRIPTREP.SCHEDULE_ID_NOT_FOUND=\u627e\u4e0d\u5230\u6392\u7a0b\u8b58\u5225\u78bc {0} +PRO_SUBSCRIPTREP.SUBSCRIPTION_ID_NOT_FOUND=\u627e\u4e0d\u5230\u8a02\u95b1\u8b58\u5225\u78bc {0} +PRO_SUBSCRIPTREP.USER_PROCESSING_CONTENT_NODES=\u6b63\u5728\u8655\u7406 {0} \u5167\u5bb9\u7bc0\u9ede\u3002 +PRO_SUBSCRIPTREP.ACTION_SEQUENCE_ALREADY_EXISTS=\u7121\u6cd5\u70ba\u52d5\u4f5c\u65b0\u589e\u8a02\u95b1\u5167\u5bb9\uff1a{0}\u3002\u52d5\u4f5c\u5e8f\u5217\u5df2\u5b58\u5728 +PRO_SUBSCRIPTREP.MODIFIED_SUBSCRIPTION_SCHEDULE=\u5df2\u4fee\u6539\u516c\u7528\u6392\u7a0b {0} +PRO_SUBSCRIPTREP.MODIFIED_SUBSCRIPTION_CONTENT=\u5df2\u4fee\u6539\u8a02\u95b1\u5167\u5bb9 {0} +PRO_SUBSCRIPTREP.SCHEDULE_REF_NOT_UNIQUE_EDIT=\u7121\u6cd5\u7de8\u8f2f\u5177\u6709\u53c3\u8003 {0} \u7684\u6392\u7a0b\u6392\u7a0b\u53c3\u8003\u5fc5\u9808\u662f\u552f\u4e00\u7684 +PRO_SUBSCRIPTREP.EXCEPTION_PROCESSING_IMPORTS=\u8655\u7406\u532f\u5165\u6642\u767c\u751f\u4f8b\u5916\u72c0\u6cc1 +PRO_SUBSCRIPTREP.USER_REMOVING_USER=\u6b63\u5728\u70ba\u4f7f\u7528\u8005\u79fb\u9664\u4f7f\u7528\u8005\u8a02\u95b1\u8207\u5167\u5bb9\uff1a{0} +PRO_SUBSCRIPTREP.DOCUMENT_IS_NULL=\u532f\u5165\u6587\u4ef6\u662f Null\u3002 +PRO_SUBSCRIPTREP.ERROR_WITH_CONTENT=\u5167\u5bb9 {0} \u767c\u751f\u932f\u8aa4\uff1a{1} +DbRepositoryClassLoader.RESOURCE_NOT_FOUND=\u627e\u4e0d\u5230\u8cc7\u6e90 [{0}] - \u6ce8\u610f\uff1a\u9019\u53ef\u80fd\u53ef\u63a5\u53d7 +MondrianCatalogPublisher.ERROR_0005_PUBLISH_EXCEPTION=\u767c\u884c\u6642\u767c\u751f\u4f8b\u5916\u72c0\u6cc1 +DatasourceMgmtService.ERROR_0001_UNABLE_TO_CREATE_DATASOURCE=\u5132\u5b58\u8cc7\u6599\u4f86\u6e90 {0} \u671f\u9593\u767c\u751f\u932f\u8aa4\u3002\u539f\u56e0\uff1a{1} +DatasourceMgmtService.ERROR_0002_UNABLE_TO_DELETE_DATASOURCE=\u522a\u9664\u8cc7\u6599\u4f86\u6e90 {0} \u671f\u9593\u767c\u751f\u932f\u8aa4\u3002\u539f\u56e0\uff1a{1} +DatasourceMgmtService.ERROR_0003_UNABLE_TO_UPDATE_DATASOURCE=\u66f4\u65b0\u8cc7\u6599\u4f86\u6e90 {0} \u671f\u9593\u767c\u751f\u932f\u8aa4\u3002\u539f\u56e0\uff1a{1} +DatasourceMgmtService.ERROR_0004_UNABLE_TO_RETRIEVE_DATASOURCE=\u64f7\u53d6\u8cc7\u6599\u4f86\u6e90 {0} \u671f\u9593\u767c\u751f\u932f\u8aa4\u3002\u539f\u56e0\uff1a{1} +DatasourceMgmtService.ERROR_0005_DATASOURCE_ALREADY_EXIST=\u8cc7\u6599\u4f86\u6e90 {0} \u5df2\u5b58\u5728\u65bc\u8cc7\u6599\u5eab\u4e2d\uff0c\u7121\u6cd5\u65b0\u589e\u5177\u6709\u76f8\u540c\u540d\u7a31\u7684\u8cc7\u6599\u4f86\u6e90 +DatasourceMgmtService.ERROR_0006_DATASOURCE_DOES_NOT_EXIST=\u7121\u6cd5\u5f9e\u8cc7\u6599\u5eab\u64f7\u53d6\u8cc7\u6599\u4f86\u6e90\uff0c\u56e0\u70ba\u8cc7\u6599\u5eab\u540d\u7a31 {0} \u4e0d\u5b58\u5728 +DatasourceMgmtService.ERROR_0007_UNABLE_TO_ENCRYPT_PASSWORD=\u7121\u6cd5\u5c07\u5bc6\u78bc\u52a0\u5bc6 +DatasourceMgmtService.ERROR_0008_UNABLE_TO_DECRYPT_PASSWORD=\u7121\u6cd5\u5c07\u5bc6\u78bc\u89e3\u5bc6 +DatasourceMgmtService.ERROR_0009_UNABLE_TO_INIT_PASSWORD_SERVICE=\u7121\u6cd5\u5177\u73fe\u5316 IPasswordService +DatasourceMgmtService.ERROR_0010_NULL_DATASOURCE_OBJECT=\u300c\u6536\u5230\u7684\u8cc7\u6599\u4f86\u6e90\u7269\u4ef6\u662f Null +UserSettingService.ERROR_0001_INSUFFICIENT_PRIVILEGES=\u6b0a\u9650\u4e0d\u8db3\uff0c\u56e0\u6b64\u7121\u6cd5\u8a2d\u5b9a\u5168\u57df\u4f7f\u7528\u8005\u8a2d\u5b9a\u3002 +ERROR.Restoring_Password=\u7121\u6cd5\u9084\u539f\u4f7f\u7528\u8005 {0} \u7684\u5bc6\u78bc\u3002\u6b63\u5728\u8a2d\u5b9a\u66ab\u5b58\u5bc6\u78bc\u3002 +ERROR.CreatingUser=\u7121\u6cd5\u5efa\u7acb\u4f7f\u7528\u8005 {0}\u3002 +ROLE.Already.Exists=\u89d2\u8272 {0} \u5df2\u5b58\u5728\uff0c\u7121\u6cd5\u5efa\u7acb\u3002 +USER.Already.Exists=\u4f7f\u7528\u8005 {0} \u5df2\u5b58\u5728\uff0c\u7121\u6cd5\u5efa\u7acb\u3002 +ERROR.SettingRolePermissions=\u7121\u5728\u532f\u5165\u671f\u9593\u70ba\u89d2\u8272 {0} \u8a2d\u5b9a\u6b0a\u9650\u3002 +ERROR.ImportingUserSetting=\u7121\u6cd5\u70ba\u4f7f\u7528\u8005 {0} \u532f\u5165\u4f7f\u7528\u8005\u8a2d\u5b9a\u3002 diff --git a/repository/src/main/resources/org/pentaho/platform/repository2/messages/messages_CN.properties b/repository/src/main/resources/org/pentaho/platform/repository2/messages/messages_CN.properties new file mode 100644 index 00000000000..91fb249951c --- /dev/null +++ b/repository/src/main/resources/org/pentaho/platform/repository2/messages/messages_CN.properties @@ -0,0 +1,107 @@ +# Copyright 2008 - 2017 Hitachi Vantara. All rights reserved. +# This program is free software; you can redistribute it and/or modify it under the +# terms of the GNU General Public License, version 2 as published by the Free Software +# Foundation. +# +# You should have received a copy of the GNU General Public License along with this +# program; if not, you can obtain a copy at http://www.gnu.org/licenses/gpl-2.0.html +# or from the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# +# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; +# without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU General Public License for more details. + +AbstractRepositoryLifecycleManager.ERROR_0001_STARTUP_NOT_CALLED=\u5fc5\u9808\u5148\u547c\u53eb startup +MondrianRepositoryLifecycleManager.USER_0001_VER_COMMENT_MONDRIAN=[\u7cfb\u7d71] \u5df2\u5efa\u7acb mondrian \u8cc7\u6599\u593e +PdiRepositoryLifecycleManager.USER_0001_VER_COMMENT_PDI=[\u7cfb\u7d71] \u5df2\u5efa\u7acb pdi \u8cc7\u6599\u593e +PdiRepositoryLifecycleManager.USER_0002_VER_COMMENT_DATABASES=[\u7cfb\u7d71] \u5df2\u5efa\u7acb databases \u8cc7\u6599\u593e +PdiRepositoryLifecycleManager.USER_0003_VER_COMMENT_SLAVESERVERS=[\u7cfb\u7d71] \u5df2\u5efa\u7acb slaveServers \u8cc7\u6599\u593e +PdiRepositoryLifecycleManager.USER_0004_CLUSTERSCHEMAS=[\u7cfb\u7d71] \u5df2\u5efa\u7acb clusterSchemas \u8cc7\u6599\u593e +PdiRepositoryLifecycleManager.USER_0005_PARTITIONSCHEMAS=[\u7cfb\u7d71] \u5df2\u5efa\u7acb partitionSchemas \u8cc7\u6599\u593e +PentahoJcrTemplate.ERROR_0001_ACCESS_DENIED=\u5b58\u53d6\u6b64\u8cc7\u6599\u6642\u906d\u62d2 +DefaultRepositoryLifecycleManager.USER_0001_VER_COMMENT_PENTAHO_ROOT=[\u7cfb\u7d71] \u5df2\u5efa\u7acb pentaho root \u8cc7\u6599\u593e +DefaultRepositoryLifecycleManager.USER_0002_VER_COMMENT_TENANT_ROOT=[\u7cfb\u7d71] \u5df2\u5efa\u7acb tenant root \u8cc7\u6599\u593e +DefaultRepositoryLifecycleManager.USER_0003_TENANT_PUBLIC=[\u7cfb\u7d71] \u5df2\u5efa\u7acb tenant public \u8cc7\u6599\u593e +DefaultRepositoryLifecycleManager.USER_0004_TENANT_HOME=[\u7cfb\u7d71] \u5df2\u5efa\u7acb tenant home \u8cc7\u6599\u593e +DefaultRepositoryLifecycleManager.USER_0005_TENANT_ETC=[\u7cfb\u7d71] \u5df2\u5efa\u7acb tenant etc \u8cc7\u6599\u593e +DefaultRepositoryLifecycleManager.USER_0006_USER_HOME=[\u7cfb\u7d71] \u5df2\u5efa\u7acb user home \u8cc7\u6599\u593e +DefaultUnifiedRepositoryWebService.ERROR_0001_NO_IMPL=\u7121 IUnifiedRepository \u5be6\u4f5c +ExceptionLoggingDecorator.lockException={0} \u6642\u767c\u751f\u9396\u5b9a\u932f\u8aa4 +ExceptionLoggingDecorator.transactionException={0} \u6642\u767c\u751f\u4ea4\u6613\u932f\u8aa4 +ExceptionLoggingDecorator.accessDeniedException={0} \u6642\u5b58\u53d6\u906d\u62d2 +ExceptionLoggingDecorator.referentialIntegrityException={0} \u6642\u767c\u751f\u53c3\u8003\u5b8c\u6574\u6027\u932f\u8aa4\uff1b(\u6a94\u6848 {1} \u6b63\u7531\u6a94\u6848 {2} \u53c3\u8003) +ExceptionLoggingDecorator.fileExistsException={0} \u6642\u767c\u751f\u6a94\u6848\u5df2\u5b58\u5728\u932f\u8aa4\uff1b\u8def\u5f91\u70ba "{1}" +ExceptionLoggingDecorator.malformedNameException={0} \u6642\u767c\u751f\u683c\u5f0f\u4e0d\u6b63\u78ba\u7684\u540d\u7a31\u932f\u8aa4\uff1b\u7121\u6548\u7684\u540d\u7a31\uff1a"{1}" +ExceptionLoggingDecorator.canUnlockFile=\u6b63\u5728\u5224\u65b7\u5c07\u8b58\u5225\u78bc\u70ba "{0}" \u4e4b\u6a94\u6848\u89e3\u9396\u7684\u80fd\u529b +ExceptionLoggingDecorator.createFile=\u6b63\u5728\u5efa\u7acb\u540d\u70ba "{0}" \u7684\u6a94\u6848 +ExceptionLoggingDecorator.createFolder=\u6b63\u5728\u5efa\u7acb\u540d\u70ba "{0}" \u7684\u8cc7\u6599\u593e +ExceptionLoggingDecorator.deleteFile=\u6b63\u5728\u522a\u9664\u8b58\u5225\u78bc\u70ba "{0}" \u7684\u6a94\u6848 +ExceptionLoggingDecorator.deleteFileAtVersion=\u6b63\u5728\u522a\u9664\u8b58\u5225\u78bc\u70ba "{0}" \u4e14\u7248\u672c\u8b58\u5225\u78bc\u70ba "{1}" \u7684\u6a94\u6848 +ExceptionLoggingDecorator.generalException={0} \u6642\u767c\u751f\u4f8b\u5916\u72c0\u6cc1 +ExceptionLoggingDecorator.getAcl=\u6b63\u5728\u53d6\u5f97\u8b58\u5225\u78bc\u70ba "{0}" \u4e4b\u6a94\u6848\u7684 ACL +ExceptionLoggingDecorator.getChildren=\u6b63\u5728\u53d6\u5f97\u8b58\u5225\u78bc\u70ba "{0}" \u4e4b\u8cc7\u6599\u593e\u7684\u5b50\u7cfb +ExceptionLoggingDecorator.getData=\u6b63\u5728\u53d6\u5f97\u8b58\u5225\u78bc\u70ba "{0}" \u4e4b\u6a94\u6848\u7684\u8cc7\u6599 +ExceptionLoggingDecorator.getDataInBatch=\u6b63\u5728\u53d6\u5f97\u6a94\u6848\u7684\u8cc7\u6599 +ExceptionLoggingDecorator.getDataAtVersion=\u6b63\u5728\u53d6\u5f97\u8b58\u5225\u78bc\u70ba "{0}" \u4e14\u7248\u672c\u8b58\u5225\u78bc\u70ba "{0}" \u4e4b\u6a94\u6848\u7684\u8cc7\u6599 +ExceptionLoggingDecorator.getDeletedFiles=\u6b63\u5728\u53d6\u5f97\u6240\u6709\u5df2\u522a\u9664\u7684\u6a94\u6848 +ExceptionLoggingDecorator.getDeletedFilesInFolder=\u6b63\u5728\u53d6\u5f97\u8def\u5f91\u70ba "{0}" \u4e4b\u8cc7\u6599\u593e\u4e2d\u6240\u6709\u5df2\u522a\u9664\u7684\u6a94\u6848 +ExceptionLoggingDecorator.getEffectiveAces=\u6b63\u5728\u53d6\u5f97\u8b58\u5225\u78bc\u70ba "{0}" \u4e4b\u6a94\u6848\u7684\u6709\u6548 ACE +ExceptionLoggingDecorator.getFile=\u6b63\u5728\u53d6\u5f97\u8def\u5f91\u70ba "{0}" \u7684\u6a94\u6848 +ExceptionLoggingDecorator.getReferrers=\u6b63\u5728\u53d6\u5f97\u8b58\u5225\u78bc\u70ba "{0}" \u4e4b\u6a94\u6848\u7684\u8f49\u4ecb\u8005 +ExceptionLoggingDecorator.getTree=\u6b63\u5728\u53d6\u5f97\u6839\u76ee\u9304\u70ba\u8def\u5f91 "{0}" \u7684\u6a39\u72c0\u76ee\u9304 +ExceptionLoggingDecorator.getFileAtVersion=\u6b63\u5728\u53d6\u5f97\u8b58\u5225\u78bc\u70ba "{0}" \u4e14\u7248\u672c\u8b58\u5225\u78bc\u70ba "{1}" \u7684\u6a94\u6848 +ExceptionLoggingDecorator.getFileById=\u6b63\u5728\u53d6\u5f97\u8b58\u5225\u78bc\u70ba "{0}" \u7684\u6a94\u6848 +ExceptionLoggingDecorator.getVersionSummaries=\u6b63\u5728\u53d6\u5f97\u8b58\u5225\u78bc\u70ba "{0}" \u4e4b\u6a94\u6848\u7684\u7248\u672c\u6b77\u53f2\u8a18\u9304 +ExceptionLoggingDecorator.getVersionSummary=\u6b63\u5728\u53d6\u5f97\u8b58\u5225\u78bc\u70ba "{0}" \u4e14\u7248\u672c\u8b58\u5225\u78bc\u70ba "{1}" \u4e4b\u6a94\u6848\u7684\u7248\u672c\u8cc7\u8a0a +ExceptionLoggingDecorator.getVersionSummaryInBatch=\u6b63\u5728\u53d6\u5f97\u6a94\u6848\u7684\u7248\u672c\u8cc7\u8a0a +ExceptionLoggingDecorator.hasAccess=\u6b63\u5728\u5224\u65b7\u8def\u5f91\u70ba "{0}" \u4e4b\u6a94\u6848\u7684\u5b58\u53d6\u6b0a +ExceptionLoggingDecorator.lockFile=\u6b63\u5728\u9396\u5b9a\u8b58\u5225\u78bc\u70ba "{0}" \u7684\u6a94\u6848 +ExceptionLoggingDecorator.moveFile=\u6b63\u5728\u5c07\u8b58\u5225\u78bc\u70ba "{0}" \u7684\u6a94\u6848\u79fb\u52d5\u5230\u76ee\u7684\u5730\u8def\u5f91 "{1}" +ExceptionLoggingDecorator.copyFile=\u6b63\u5728\u5c07\u8b58\u5225\u78bc\u70ba "{0}" \u7684\u6a94\u6848\u8907\u88fd\u5230\u76ee\u7684\u5730\u8def\u5f91 "{1}" +ExceptionLoggingDecorator.referenceNumber=\u53c3\u8003\u865f\u78bc\uff1a{0} +ExceptionLoggingDecorator.restoreFileAtVersion=\u6b63\u5728\u9084\u539f\u8b58\u5225\u78bc\u70ba "{0}" \u4e14\u7248\u672c\u8b58\u5225\u78bc\u70ba "{1}" \u7684\u6a94\u6848 +ExceptionLoggingDecorator.undeleteFile=\u6b63\u5728\u53d6\u6d88\u522a\u9664\u8b58\u5225\u78bc\u70ba "{0}" \u7684\u6a94\u6848 +ExceptionLoggingDecorator.unlockFile=\u6b63\u5728\u89e3\u9396\u8b58\u5225\u78bc\u70ba "{0}" \u7684\u6a94\u6848 +ExceptionLoggingDecorator.updateAcl=\u6b63\u5728\u66f4\u65b0\u8b58\u5225\u78bc\u70ba "{0}" \u4e4b\u6a94\u6848\u7684 ACL +ExceptionLoggingDecorator.updateFile=\u6b63\u5728\u66f4\u65b0\u8b58\u5225\u78bc\u70ba "{0}" \u7684\u6a94\u6848 +ExceptionLoggingDecorator.getReservedChars=\u6b63\u5728\u53d6\u5f97\u4fdd\u7559\u5b57\u5143 +ExceptionLoggingDecorator.getAvailableLocalesForFile=\u6b63\u5728\u53d6\u5f97\u6a94\u6848 "{0}" \u7684\u53ef\u7528\u5730\u5340\u8a2d\u5b9a +ExceptionLoggingDecorator.getLocalePropertiesForFile=\u6b63\u5728\u53d6\u5f97\u6a94\u6848 "{0}" \u7684\u5730\u5340\u8a2d\u5b9a\u5c6c\u6027 +ExceptionLoggingDecorator.setLocalePropertiesForFile=\u6b63\u5728\u8a2d\u5b9a\u6a94\u6848 "{0}" \u7684\u5730\u5340\u8a2d\u5b9a\u5c6c\u6027 +ExceptionLoggingDecorator.deleteLocalePropertiesForFile=\u6b63\u5728\u522a\u9664\u6a94\u6848 "{0}" \u7684\u5730\u5340\u8a2d\u5b9a\u5c6c\u6027 +FileImporter.WARN_0001_NO_EXT=\u6b63\u5728\u8df3\u904e {0}\uff0c\u56e0\u70ba\u6a94\u6848\u6c92\u6709\u526f\u6a94\u540d +FileImporter.WARN_0002_NO_CONVERTER=\u6b63\u5728\u8df3\u904e {0}\uff0c\u56e0\u70ba\u627e\u4e0d\u5230\u526f\u6a94\u540d\u7684\u8f49\u63db\u7a0b\u5f0f +FileImporter.WARN_0003_IOEXCEPTION=\u6b63\u5728\u8df3\u904e {0}\uff0c\u56e0\u70ba\u767c\u751f\u4f8b\u5916\u72c0\u6cc1 +FileImporter.WARN_0004_NO_MIME=\u6b63\u5728\u8df3\u904e {0}\uff0c\u56e0\u70ba\u627e\u4e0d\u5230\u526f\u6a94\u540d\u7684 MIME \u985e\u578b +FileImporter.USER_0001_IMPORT_COUNT=\u5df2\u532f\u5165 {0} \u500b\u6a94\u6848 (\u5171 {1} \u500b) ({2} \u6beb\u79d2) +FileImporter.ERROR_0001_ERROR_RETRIEVING_FILES=\u64f7\u53d6\u6a94\u6848\u6642\u767c\u751f\u932f\u8aa4 +FileImporter.ERROR_0002_ERROR_IMPORTING_FILE=\u532f\u5165\u6a94\u6848\u6642\u767c\u751f\u932f\u8aa4\uff1a{1}\uff1a{0} +JackrabbitRepositoryFileAclDao.ERROR_0001_NODE_NOT_FOUND=\u627e\u4e0d\u5230\u8b58\u5225\u78bc\u70ba [{0}] \u7684\u7bc0\u9ede +JackrabbitRepositoryFileAclDao.ERROR_0002_POLICY=\u5f88\u53ef\u80fd\u662f\u7531\u65bc\u5728\u547c\u53eb createAcl \u4e4b\u524d\u547c\u53eb readAclById +JackrabbitRepositoryFileAclDao.USER_0001_VER_COMMENT_CREATED_ACL=[\u7cfb\u7d71] \u5df2\u5efa\u7acb ACL +JackrabbitRepositoryFileAclDao.USER_0002_VER_COMMENT_UPDATED_ACL=[\u7cfb\u7d71] \u5df2\u66f4\u65b0 ACL +JcrRepositoryFileDao.ERROR_0001_NO_TRANSFORMER=\u627e\u4e0d\u5230\u8f49\u63db\u7a0b\u5f0f +JcrRepositoryFileDao.ERROR_0002_CANNOT_OVERWRITE_FILE_WITH_FOLDER=\u7121\u6cd5\u4ee5\u8cc7\u6599\u593e\u8986\u5beb\u6a94\u6848 +JcrRepositoryFileDao.ERROR_0003_ILLEGAL_DEST_PATH=\u4e0d\u5408\u6cd5\u7684\u76ee\u7684\u5730\u8def\u5f91 +JcrRepositoryFileDao.ERROR_0004_PARENT_MUST_EXIST=\u76ee\u7684\u5730\u8def\u5f91\u7684\u76f4\u5c6c\u7236\u8cc7\u6599\u593e\u5fc5\u9808\u5b58\u5728 +JcrRepositoryFileDao.ERROR_0005_PARENT_MUST_BE_FOLDER=\u76ee\u7684\u5730\u8def\u5f91\u7684\u76f4\u5c6c\u7236\u7cfb\u4e0d\u662f\u8cc7\u6599\u593e +JcrRepositoryFileDao.USER_0001_VER_COMMENT_ADD_FOLDER=[\u7cfb\u7d71] \u5df2\u5c07\u5b50\u8cc7\u6599\u593e ''{0}'' \u65b0\u589e\u5230 {1} +JcrRepositoryFileDao.USER_0002_VER_COMMENT_ADD_FILE=[\u7cfb\u7d71] \u5df2\u5c07\u5b50\u6a94\u6848 ''{0}'' \u65b0\u589e\u5230 {1} +JcrRepositoryFileDao.USER_0003_VER_COMMENT_LOCK_FILE=[\u7cfb\u7d71] \u5df2\u9396\u5b9a\u8b58\u5225\u78bc={0} \u7684\u6a94\u6848 +JcrRepositoryFileDao.LOCALE_0001_UPDATE_PROPERTIES=\u66f4\u65b0\u8b58\u5225\u78bc={0} \u7684\u5730\u5340\u8a2d\u5b9a\u5c6c\u6027 +JcrRepositoryFileDao.LOCALE_0002_DELETE_PROPERTIES=\u522a\u9664\u8b58\u5225\u78bc={0} \u7684\u5730\u5340\u8a2d\u5b9a\u5c6c\u6027 +JcrRepositoryFileUtils.ERROR_0001_MISSING_EXT=\u6a94\u6848\u540d\u7a31\u5fc5\u9808\u6709\u526f\u6a94\u540d +JcrRepositoryFileUtils.USER_0001_VER_COMMENT_UNLOCK_FILE=[\u7cfb\u7d71] \u5df2\u89e3\u9396\u8b58\u5225\u78bc={0} \u7684\u6a94\u6848 +JcrRepositoryFileUtils.WARN_0001_NPE_FROM_CR=\u300c\u6b63\u5728\u5f9e\u5167\u5bb9\u5b58\u653e\u5eab\u53d6\u5f97 NPE\u300d +XmlAdapter.ERROR_0001_MARSHAL=\u5c07 {0} \u5c01\u9001\u8655\u7406\u5230 {1} \u6642\u767c\u751f\u932f\u8aa4 +XmlAdapter.ERROR_0002_UNMARSHAL=\u5c07 {0} \u53d6\u6d88\u5c01\u9001\u8655\u7406\u5230 {1} \u6642\u767c\u751f\u932f\u8aa4 +DefaultDeleteHelper.ERROR_0001_PATH_NOT_FOUND=\u7121\u6cd5\u5224\u65b7\u539f\u59cb\u7236\u8cc7\u6599\u593e\u8b58\u5225\u78bc\uff0c\u56e0\u70ba\u539f\u59cb\u7236\u8cc7\u6599\u593e\u8def\u5f91\u4e0d\u5b58\u5728 +DefaultDeleteHelper.ERROR_0002_NOT_CLEAN=\u5728\u53d6\u6d88\u522a\u9664\u6216\u6c38\u4e45\u522a\u9664\u6642\u61c9\u8a72\u5df2\u6e05\u9664\u6b64\u9805\u76ee +DefaultDeleteHelper.PATH_NOT_FOUND_EXCEPTION=\u300c\u627e\u4e0d\u5230\u4f7f\u7528\u8005 [ {1} ] \u7684\u8def\u5f91 [ {0} ]\u300d +JcrRepositoryFileDao.ERROR_0006_ACCESS_DENIED_DELETE=\u522a\u9664\u8b58\u5225\u78bc\u70ba [ {0} ] \u7684\u6a94\u6848\u6642\u5b58\u53d6\u906d\u62d2 +JcrRepositoryFileDao.ERROR_0006_ACCESS_DENIED_CREATE=\u5728\u8b58\u5225\u78bc\u70ba [ {0} ] \u7684\u8cc7\u6599\u593e\u4e2d\u5efa\u7acb\u6a94\u6848\u6642\u5b58\u53d6\u906d\u62d2 +DefaultUnifiedRepository.ERROR_0001_ACCESS_DENIED_UPDATE_ACL=\u5728\u8b58\u5225\u78bc\u70ba [ {0} ] \u7684\u6a94\u6848\u4e0a\u66f4\u65b0\u6b0a\u9650\u6642\u5b58\u53d6\u906d\u62d2 +AclNodeHelper.ERROR_0001_ROOT_FOLDER_NOT_AVAILABLE=\u6839\u8cc7\u6599\u593e {0} \u7121\u6cd5\u4f7f\u7528\u3002\u6b63\u5728\u6539\u70ba\u4f7f\u7528\u9810\u8a2d\u7684 {1} +AclNodeHelper.WARN_0001_REMOVE_ACL_NODE=\u6b63\u5728\u79fb\u9664 ACL \u7bc0\u9ede\uff1a +AclNodeHelper.WARN_0002_REMOVE_ACL_STORE=\u6b63\u5728\u79fb\u9664 ACL \u5b58\u653e\u5340\uff1a{0} diff --git a/repository/src/main/resources/org/pentaho/platform/repository2/unified/jcr/jackrabbit/security/messages/messages_CN.properties b/repository/src/main/resources/org/pentaho/platform/repository2/unified/jcr/jackrabbit/security/messages/messages_CN.properties new file mode 100644 index 00000000000..a0a8e5a022b --- /dev/null +++ b/repository/src/main/resources/org/pentaho/platform/repository2/unified/jcr/jackrabbit/security/messages/messages_CN.properties @@ -0,0 +1,5 @@ +AbstractPentahoLoginModule.ERROR_0001_PRE_AUTH_TOKENS_MALFORMED=\u5b58\u5728\u53c3\u6578 [{0}] \u4f46\u662f\u683c\u5f0f\u4e0d\u6b63\u78ba +DefaultPentahoJackrabbitAccessControlHelper.ERROR_0001_ITEM_NOT_FOUND=\u9805\u76ee\u8d85\u51fa\u968e\u5c64\u3002 +DefaultPentahoJackrabbitAccessControlHelper.ERROR_0002_NO_ROOT_NODE_ACES=\u6839\u7bc0\u9ede\u6c92\u6709\u4efb\u4f55 ACE +SpringSecurityPrincipalProvider.ERROR_0001_ALREADY_INITIALIZED=\u5df2\u521d\u59cb\u5316 +SpringSecurityPrincipalProvider.ERROR_0003_NOT_INITIALIZED=\u672a\u521d\u59cb\u5316\u3002 diff --git a/repository/src/main/resources/org/pentaho/platform/security/policy/rolebased/messages/messages_CN.properties b/repository/src/main/resources/org/pentaho/platform/security/policy/rolebased/messages/messages_CN.properties new file mode 100644 index 00000000000..7fb89b40b30 --- /dev/null +++ b/repository/src/main/resources/org/pentaho/platform/security/policy/rolebased/messages/messages_CN.properties @@ -0,0 +1,28 @@ +# Copyright 2008 - 2017 Hitachi Vantara. All rights reserved. +# This program is free software; you can redistribute it and/or modify it under the +# terms of the GNU General Public License, version 2 as published by the Free Software +# Foundation. +# +# You should have received a copy of the GNU General Public License along with this +# program; if not, you can obtain a copy at http://www.gnu.org/licenses/gpl-2.0.html +# or from the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# +# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; +# without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU General Public License for more details. + +DefaultAuthorizationPolicyWebService.ERROR_0001_MISSING_AUTHZ_POLICY=\u7121 IAuthorizationPolicy \u5be6\u4f5c +DefaultRoleAuthorizationPolicyRoleBindingDaoWebService.ERROR_0001_MISSING_ROLE_BINDING_DAO=\u7121 IRoleAuthorizationPolicyRoleBindingDao \u5be6\u4f5c +JcrRoleAuthorizationPolicyRoleBindingDao.ERROR_0001_ATTEMPT_MOD_IMMUTABLE=\u7121\u6cd5\u4fee\u6539\u89d2\u8272 "{0}" +JcrRoleAuthorizationPolicyRoleBindingDao.ERROR_0002_REPO_NOT_INITIALIZED=\u5b58\u653e\u5eab\u672a\u6b63\u78ba\u521d\u59cb\u5316 + +org.pentaho.repository.read=\u8b80\u53d6\u5167\u5bb9 +org.pentaho.repository.create=\u5efa\u7acb\u5167\u5bb9 +org.pentaho.repository.execute=\u57f7\u884c +org.pentaho.security.administerSecurity=\u7ba1\u7406\u5b89\u5168\u6027 +org.pentaho.security.administerSystem=\u7ba1\u7406\u7cfb\u7d71 +org.pentaho.security.publish=\u767c\u884c\u5167\u5bb9 +org.pentaho.scheduler.manage=\u6392\u7a0b\u5167\u5bb9 +RepositoryTenantManager.publicFolderDisplayName=\u516c\u7528 +RepositoryTenantManager.usersFolderDisplayName=\u9996\u9801 diff --git a/repository/src/main/resources/org/pentaho/platform/security/userroledao/messages/messages_CN.properties b/repository/src/main/resources/org/pentaho/platform/security/userroledao/messages/messages_CN.properties new file mode 100644 index 00000000000..679cb45dda0 --- /dev/null +++ b/repository/src/main/resources/org/pentaho/platform/security/userroledao/messages/messages_CN.properties @@ -0,0 +1,73 @@ +# +# Copyright 2006-2017 Hitachi Vantara. All rights reserved. +# +# Copyright 2006 - 2017 Hitachi Vantara. All rights reserved. +# This program is free software; you can redistribute it and/or modify it under the +# terms of the GNU General Public License, version 2 as published by the Free Software +# Foundation. +# +# You should have received a copy of the GNU General Public License along with this +# program; if not, you can obtain a copy at http://www.gnu.org/licenses/gpl-2.0.html +# or from the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# +# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; +# without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU General Public License for more details. + +AuthorizationPolicyBasedUserRoleWebService.ERROR_0001_MISSING_AUTHZ_POLICY=\u7121 IAuthorizationPolicy \u5be6\u4f5c +UserRoleDaoUserDetailsService.ERROR_0001_USER_NOT_FOUND=\u627e\u4e0d\u5230\u4f7f\u7528\u8005 +UserRoleDaoUserDetailsService.ERROR_0002_NO_AUTHORITIES=\u4f7f\u7528\u8005\u6c92\u6709 GrantedAuthority +UserRoleDaoUserDetailsService.ERROR_0003_DATA_ACCESS_EXCEPTION=\u8cc7\u6599\u5b58\u53d6\u4f8b\u5916\u72c0\u6cc1 +HibernateUserRoleDao.ERROR_0001_USER_CANNOT_BE_NULL=\u4f7f\u7528\u8005\u4e0d\u80fd\u662f Null +HibernateUserRoleDao.ERROR_0002_USERNAME_CANNOT_BE_BLANK=\u4f7f\u7528\u8005\u540d\u7a31\u4e0d\u80fd\u662f Null \u6216\u7a7a\u767d +HibernateUserRoleDao.ERROR_0003_PASSWORD_CANNOT_BE_NULL=\u4f7f\u7528\u8005\u7684\u5bc6\u78bc\u4e0d\u80fd\u662f Null +HibernateUserRoleDao.ERROR_0004_DATA_ACCESS_EXCEPTION=\u8cc7\u6599\u5b58\u53d6\u4f8b\u5916\u72c0\u6cc1 +HibernateUserRoleDao.ERROR_0005_ROLE_CANNOT_BE_NULL=\u89d2\u8272\u4e0d\u80fd\u662f Null +HibernateUserRoleDao.ERROR_0006_ROLE_NAME_CANNOT_BE_BLANK=\u89d2\u8272\u540d\u7a31\u4e0d\u80fd\u662f Null \u6216\u7a7a\u767d +HibernateUserRoleDao.ERROR_0007_ALL_USERS_QUERY_CANNOT_BE_BLANK=allUsersQuery \u4e0d\u80fd\u662f Null \u6216\u7a7a\u767d +HibernateUserRoleDao.ERROR_0008_ALL_ROLES_QUERY_CANNOT_BE_BLANK=allRolesQuery \u4e0d\u80fd\u662f Null \u6216\u7a7a\u767d +SampleUsersAndRolesInitHandler.ERROR_0001_COULD_NOT_INSERT_SAMPLES=\u7121\u6cd5\u63d2\u5165\u7bc4\u4f8b\u4f7f\u7528\u8005\u8207\u89d2\u8272 + +UserRoleWebService.ERROR_0001_NOT_ADMIN=\u4f7f\u7528\u8005\u6c92\u6709\u53ef\u7ba1\u7406\u4f7f\u7528\u8005\u8207\u89d2\u8272\u7684\u7cfb\u7d71\u7ba1\u7406\u6b0a\u9650\u3002 +UserRoleWebService.ERROR_0002_IUSERROLEDAO_NOT_AVAILABLE=IUserRoleDao \u5be6\u4f5c\u7121\u6cd5\u4f7f\u7528\u3002 +UserRoleWebService.ERROR_0003_USER_DELETION_FAILED_NO_USER=\u522a\u9664\u4f7f\u7528\u8005\u5931\u6557\uff0c\u4f7f\u7528\u8005\u4e0d\u5b58\u5728\uff1a{0} +UserRoleWebService.ERROR_0004_FAILED_TO_FIND_USER=\u7121\u6cd5\u5c0b\u627e\u4f7f\u7528\u8005\uff1a{0} +UserRoleWebService.ERROR_0005_FAILED_TO_FIND_ROLE=\u7121\u6cd5\u5c0b\u627e\u89d2\u8272\uff1a{0} +UserRoleWebService.ERROR_0006_ROLE_UPDATE_FAILED=\u7121\u6cd5\u66f4\u65b0\u89d2\u8272\uff1a{0} +UserRoleWebService.ERROR_0007_ROLE_DELETION_FAILED_NO_ROLE=\u522a\u9664\u89d2\u8272\u5931\u6557\uff0c\u89d2\u8272\u4e0d\u5b58\u5728\uff1a{0} +UserRoleWebService.ERROR_0008_ROLE_UPDATE_FAILED_DOES_NOT_EXIST=\u8981\u66f4\u65b0\u7684\u89d2\u8272\u4e0d\u5b58\u5728\uff1a{0} + +org.pentaho.repository.read=\u8b80\u53d6\u5167\u5bb9 +org.pentaho.repository.create=\u5efa\u7acb\u5167\u5bb9 +org.pentaho.repository.execute=\u57f7\u884c +org.pentaho.security.administerSecurity=\u7ba1\u7406\u79df\u7528\u6236 +org.pentaho.security.administerSystem=\u7ba1\u7406\u7cfb\u7d71 +org.pentaho.security.publish=\u767c\u884c\u5167\u5bb9 +org.pentaho.scheduler.manage=\u6392\u7a0b\u5167\u5bb9 + +AbstractJcrBackedUserRoleDao.ERROR_0001_LAST_ADMIN_ROLE=\u4e0d\u5141\u8a31\u5f9e\u89d2\u8272 {0} \u79fb\u9664\u6700\u5f8c\u4e00\u500b\u7cfb\u7d71\u7ba1\u7406\u4f7f\u7528\u8005\u3002 +AbstractJcrBackedUserRoleDao.ERROR_0002_ROLE_NOT_FOUND=\u627e\u4e0d\u5230\u89d2\u8272\u3002 +AbstractJcrBackedUserRoleDao.ERROR_0003_USER_NOT_FOUND=\u627e\u4e0d\u5230\u4f7f\u7528\u8005\u3002 +AbstractJcrBackedUserRoleDao.ERROR_0004_LAST_USER_NEEDED_IN_ROLE=\u81f3\u5c11\u8981\u6709\u4e00\u500b\u4f7f\u7528\u8005\u5c6c\u65bc\u89d2\u8272 [{0}]\u3002 +AbstractJcrBackedUserRoleDao.ERROR_0005_YOURSELF_OR_DEFAULT_ADMIN_USER=\u4e0d\u5141\u8a31\u5f9e\u60a8\u81ea\u8eab\u6216\u9810\u8a2d\u7cfb\u7d71\u7ba1\u7406\u4f7f\u7528\u8005\u53d6\u6d88\u6307\u6d3e/\u79fb\u9664\u7cfb\u7d71\u7ba1\u7406\u89d2\u8272\u3002 +AbstractJcrBackedUserRoleDao.ERROR_0006_TENANT_NOT_FOUND=\u627e\u4e0d\u5230\u79df\u7528\u6236 {0}\u3002 +AbstractJcrBackedUserRoleDao.ERROR_0007_ATTEMPTED_SYSTEM_ROLE_DELETE=\u4e0d\u5141\u8a31\u522a\u9664\u6b63\u5728\u79fb\u9664\u7684\u7cfb\u7d71\u5b9a\u7fa9\u89d2\u8272\u3002 +AbstractJcrBackedUserRoleDao.ERROR_0008_UNABLE_TO_DELETE_USER_IS_YOURSELF_OR_DEFAULT_ADMIN_USER=\u7121\u6cd5\u522a\u9664\u5df2\u767b\u5165\u7684\u7cfb\u7d71\u7ba1\u7406\u4f7f\u7528\u8005\u6216\u9810\u8a2d\u7cfb\u7d71\u7ba1\u7406\u4f7f\u7528\u8005 +AbstractJcrBackedUserRoleDao.ERROR_0009_USER_REMOVE_FAILED_YOURSELF_OR_DEFAULT_ADMIN_USER=\u4e0d\u5141\u8a31\u5f9e\u7cfb\u7d71\u7ba1\u7406\u54e1\u89d2\u8272\u53d6\u6d88\u6307\u6d3e/\u79fb\u9664\u60a8\u81ea\u8eab\u6216\u9810\u8a2d\u7cfb\u7d71\u7ba1\u7406\u4f7f\u7528\u8005\u3002 + +JcrUserRoleDao.ERROR_0001_UPDATING_ROLE=\u66f4\u65b0\u89d2\u8272\u6642\u767c\u751f\u932f\u8aa4\u3002\u539f\u56e0\uff1a[ {0} ] +JcrUserRoleDao.ERROR_0002_CREATING_ROLE=\u5efa\u7acb\u89d2\u8272\u6642\u767c\u751f\u932f\u8aa4\u3002\u539f\u56e0\uff1a[ {0} ] +JcrUserRoleDao.ERROR_0003_CREATING_USER=\u5efa\u7acb\u4f7f\u7528\u8005\u6642\u767c\u751f\u932f\u8aa4\u3002\u539f\u56e0\uff1a[ {0} ] +JcrUserRoleDao.ERROR_0004_DELETING_ROLE=\u522a\u9664\u89d2\u8272\u6642\u767c\u751f\u932f\u8aa4\u3002{0} \u539f\u56e0\uff1a[ {1} ] +JcrUserRoleDao.ERROR_0005_DELETING_USER=\u522a\u9664\u4f7f\u7528\u8005\u6642\u767c\u751f\u932f\u8aa4\u3002{0} \u539f\u56e0\uff1a[ {1} ] +JcrUserRoleDao.ERROR_0006_UPDATING_USER=\u66f4\u65b0\u4f7f\u7528\u8005\u6642\u767c\u751f\u932f\u8aa4\u3002[ {0} ] +JcrUserRoleDao.ERROR_0007_UPDATING_USER_PASSWORD=\u8a2d\u5b9a\u4f7f\u7528\u8005\u5bc6\u78bc\u6642\u767c\u751f\u932f\u8aa4\u3002\u539f\u56e0\uff1a[ {0} ] +JcrUserRoleDao.ERROR_0008_LISTING_ROLES=\u5217\u51fa\u89d2\u8272\u6642\u767c\u751f\u932f\u8aa4\u3002\u539f\u56e0\uff1a[ {0} ] +JcrUserRoleDao.ERROR_0009_LISTING_USERS=\u5217\u51fa\u4f7f\u7528\u8005\u6642\u767c\u751f\u932f\u8aa4\u3002\u539f\u56e0\uff1a[ {0} ] +JcrUserRoleDao.ERROR_0010_GETTING_ROLE=\u53d6\u5f97\u89d2\u8272\u6642\u767c\u751f\u932f\u8aa4\u3002\u539f\u56e0\uff1a[ {0} ] +JcrUserRoleDao.ERROR_0011_LISTING_ROLE_MEMBERS=\u5217\u51fa\u89d2\u8272\u6210\u54e1\u6642\u767c\u751f\u932f\u8aa4\u3002\u539f\u56e0\uff1a[ {0} ] +JcrUserRoleDao.Role.Already.Exists=\u62b1\u6b49\uff0c\u6211\u5011\u7121\u6cd5\u5efa\u7acb\u89d2\u8272\u3002\u8a72\u89d2\u8272\u5df2\u5b58\u5728\u3002 +JcrUserRoleDao.User.Already.Exists=\u62b1\u6b49\uff0c\u6211\u5011\u7121\u6cd5\u5efa\u7acb\u4f7f\u7528\u8005\u3002\u8a72\u4f7f\u7528\u8005\u540d\u7a31\u5df2\u5b58\u5728\u3002 + +AbstractJcrBackedUserRoleDao.usersFolderDisplayName=\u9996\u9801 diff --git a/scheduler/src/main/resources/org/pentaho/platform/scheduler2/messsages/messages_CN.properties b/scheduler/src/main/resources/org/pentaho/platform/scheduler2/messsages/messages_CN.properties new file mode 100644 index 00000000000..9319e67f343 --- /dev/null +++ b/scheduler/src/main/resources/org/pentaho/platform/scheduler2/messsages/messages_CN.properties @@ -0,0 +1,46 @@ +ComplexJobTrigger.ERROR_0001_InvalidCronExpression=\u7121\u6548\u7684 cron \u904b\u7b97\u5f0f\u3002 +ActionAdapterQuartzJob.ERROR_0001_REQUIRED_PARAM_MISSING=\u5fc5\u9808\u5728\u4f5c\u696d\u8cc7\u6599\u5c0d\u61c9\u4e2d\u8a2d\u5b9a\u5c6c\u6027 "{0}" \u6216 "{1}" +ActionAdapterQuartzJob.ERROR_0002_FAILED_TO_CREATE_ACTION=\u7121\u6cd5\u5efa\u7acb\u52d5\u4f5c "{0}" \u7684\u57f7\u884c\u500b\u9ad4\uff1a{1} +ActionAdapterQuartzJob.ERROR_0003_ACTION_WRONG_TYPE=\u985e\u5225 {0} \u5fc5\u9808\u662f "{1}" \u7684\u57f7\u884c\u500b\u9ad4 +ActionAdapterQuartzJob.ERROR_0004_ACTION_FAILED=\u52d5\u4f5c "{0}" \u7121\u6cd5\u4ee5 Quartz \u4f5c\u696d\u7684\u5f62\u5f0f\u57f7\u884c +ActionAdapterQuartzJob.WARN_0001_SKIP_REMOVING_OUTPUT_FILE=\u7531 XActions \u5beb\u5165\u7684\u6a94\u6848\u5fc5\u9808\u4ee5\u5916\u90e8\u65b9\u5f0f\u6e05\u9664\uff1a{0} +ActionAdapterQuartzJob.WARN_0002_NO_STATUS=\u52d5\u4f5c "{0}" \u7684\u72c0\u614b\u7121\u6cd5\u53ef\u7528\uff1b\u52d5\u4f5c\u53ef\u80fd\u5df2\u57f7\u884c + remotely: {1} + +QuartzJobKey.ERROR_0000=\u7121\u6cd5\u7522\u751f\u4f5c\u696d\u7d22\u5f15\u9375\uff0cjobName \u907a\u5931 +QuartzJobKey.ERROR_0001=\u7121\u6cd5\u7522\u751f\u4f5c\u696d\u7d22\u5f15\u9375\uff0c\u4f7f\u7528\u8005\u540d\u7a31\u907a\u5931 +QuartzJobKey.ERROR_0002=jobId "{0}" \u4e2d\u7684\u8cc7\u6599\u907a\u5931\u3002 +QuartzScheduler.ERROR_0001_FAILED_TO_SCHEDULE_JOB=Quartz \u7121\u6cd5\u5c0d\u4f5c\u696d "{0}" \u9032\u884c\u6392\u7a0b +QuartzScheduler.ERROR_0002_TRIGGER_WRONG_TYPE=\u89f8\u767c\u7a0b\u5e8f\u662f\u4e0d\u5408\u6cd5\u985e\u578b +QuartzScheduler.ERROR_0003_ACTION_IS_NULL=\u52d5\u4f5c\u4e0d\u80fd\u662f Null +QuartzScheduler.ERROR_0004_FAILED_TO_LIST_JOBS=Quartz \u7121\u6cd5\u5217\u51fa\u4f5c\u696d\u3002 +QuartzScheduler.ERROR_0005_FAILED_TO_PAUSE_JOB=Quartz \u7121\u6cd5\u66ab\u505c\u4f5c\u696d\u3002 +QuartzScheduler.ERROR_0005_FAILED_TO_RESUME_JOB=Quartz \u7121\u6cd5\u7e7c\u7e8c\u4f5c\u696d\u3002 +QuartzScheduler.ERROR_0006_FAILED_TO_GET_SCHEDULER_STATUS=\u7121\u6cd5\u53d6\u5f97 Quartz \u6392\u7a0b\u5668\u72c0\u614b\u3002 +QuartzScheduler.ERROR_0007_FAILED_TO_GET_JOB=\u7121\u6cd5\u53d6\u5f97\u4f5c\u696d "{0}" +QuartzScheduler.ERROR_0008_SCHEDULING_IS_NOT_ALLOWED=\u60a8\u6c92\u6709\u6b64\u6a94\u6848\u7684\u6392\u7a0b\u6b0a\u9650\u3002 +QuartzScheduler.ERROR_0009_SCHEDULING_IS_NOT_ALLOWED_AFTER_CHANGE=\u7531\u65bc\u4f7f\u7528\u8005/\u89d2\u8272\u8b8a\u66f4\uff0c"{1}" \u7121\u6cd5\u57f7\u884c\u4f5c\u696d "{0}" +EmbeddedQuartzSystemListener.ERROR_0001_Scheduler_Not_Initialized=\u6392\u7a0b\u5668\u672a\u5728\u555f\u52d5\u6642\u6b63\u78ba\u521d\u59cb\u5316 +EmbeddedQuartzSystemListener.ERROR_0004_LOAD_PROPERTIES_FROM_CLASSPATH=\u5f9e\u985e\u5225\u8def\u5f91\u8f09\u5165 quartz.properties \u5931\u6557\u3002 +EmbeddedQuartzSystemListener.ERROR_0005_UNABLE_TO_INSTANTIATE_OBJECT=\u7121\u6cd5\u5c07\u7269\u4ef6\u5177\u73fe\u5316 +EmbeddedQuartzSystemListener.ERROR_0006_UNABLE_TO_GET_DATASOURCE=\u7121\u6cd5\u53d6\u5f97\u8cc7\u6599\u4f86\u6e90\u7269\u4ef6 +EmbeddedQuartzSystemListener.ERROR_0007_SQLERROR=\u5efa\u7acb Quartz \u8cc7\u6599\u8868\u6642\u767c\u751f SQL \u932f\u8aa4 +EmbeddedQuartzSystemListener.ERROR_0008_UNABLE_TO_FIND_INIT_SCRIPT=\u627e\u4e0d\u5230 Quartz \u521d\u59cb\u5316\u6307\u4ee4\u78bc system/quartz/quartzinit.sql +JobParamsAdapter.ERROR_0001={1} \u4e0d\u652f\u63f4\u985e\u578b {0} + +schedulerEmailFromName=Pentaho \u6392\u7a0b\u5668 +PentahoBlockoutManager.ERROR_0001_WRONG_BLOCKER_TYPE=\u5df2\u5617\u8a66\u65b0\u589e\u4e0d\u662f\u89f8\u767c\u7a0b\u5e8f\u57f7\u884c\u500b\u9ad4\u7684 IBlockOutTrigger \u7269\u4ef6 +PentahoBlockoutManager.ERROR_0002_CANT_CREATE_BLOCKOUT=\u627e\u4e0d\u5230\u5177\u6709\u4e0b\u5217\u540d\u7a31\u7684\u5c01\u9396\uff1a"{0}" +PentahoBlockoutManager.ERROR_0003_CANT_PARSE_RECURRENCE_INTERVAL=\u7121\u6cd5\u5f9e\u6240\u63d0\u4f9b\u7684\u89f8\u767c\u7a0b\u5e8f\u5256\u6790\u6709\u6548\u9031\u671f\u9593\u9694 + +Unknown=\u672a\u77e5 + +ActionInvoker.INFO_0001_RUNNING_IN_BG_LOCALLY=\u6b63\u65bc\u672c\u6a5f\u80cc\u666f\u57f7\u884c\u52d5\u4f5c "{0}"\uff1a{1} + +ActionInvoker.WARN_0001_SKIP_REMOVING_OUTPUT_FILE=\u7531 XActions \u5beb\u5165\u7684\u6a94\u6848\u5fc5\u9808\u4ee5\u5916\u90e8\u65b9\u5f0f\u6e05\u9664\uff1a{0} + +ActionInvoker.ERROR_0004_ACTION_FAILED=\u7121\u6cd5\u57f7\u884c\u52d5\u4f5c "{0}" +ActionInvoker.ERROR_0005_ACTION_NULL=\u52d5\u4f5c\u662f Null\uff0c\u7121\u6cd5\u53eb\u7528 +ActionInvoker.ERROR_0006_ACTION_NULL=\u4e0d\u652f\u63f4\u52d5\u4f5c "{0}" +ActionInvoker.ERROR_0008_MAP_NULL_CANT_RETURN_SP=\u5c0d\u61c9\u662f Null\uff0c\u7121\u6cd5\u50b3\u56de\u4e32\u6d41\u63d0\u4f9b\u8005 +ActionInvoker.ERROR_0010_CANNOT_GET_REPO_FILE=\u7121\u6cd5\u53d6\u5f97\u5b58\u653e\u5eab\u6a94\u6848 "{0}"\uff1a{1} diff --git a/user-console/src/main/resources/org/pentaho/mantle/public/browser/messages_CN.properties b/user-console/src/main/resources/org/pentaho/mantle/public/browser/messages_CN.properties new file mode 100644 index 00000000000..5cdbfa4b5fc --- /dev/null +++ b/user-console/src/main/resources/org/pentaho/mantle/public/browser/messages_CN.properties @@ -0,0 +1,79 @@ +# +# ******************************************************************************* +# Hitachi Vantara +# +# Copyright (C) 2002-2017 by Hitachi Vantara : http://www.pentaho.com +# ******************************************************************************* +# + +browse=\u700f\u89bd\u6a94\u6848 +create_new=\u5efa\u7acb\u65b0\u9805\u76ee +analysis_report=\u5206\u6790\u5831\u544a +interactive_report=\u4e92\u52d5\u5f0f\u5831\u544a +dashboard=\u5100\u8868\u677f +manage_datasources=\u7ba1\u7406\u8cc7\u6599\u4f86\u6e90 +documentation=\u6587\u4ef6 +analyzer_report=\u5206\u6790\u5831\u544a +analyzer_tooltip=\u65b0\u589e\u5206\u6790\u5831\u544a +getting_started_heading=\u958b\u59cb\u4f7f\u7528 Pentaho \u4f7f\u7528\u8005\u4e3b\u63a7\u53f0 +favorites=\u6700\u611b +recents=\u6700\u8fd1 +refresh=\u91cd\u65b0\u6574\u7406 +clearAllRecents=\u6e05\u9664\u6240\u6709\u6700\u8fd1\u7684\u9805\u76ee +clearAllFavorites=\u6e05\u9664\u6240\u6709\u6700\u611b\u7684\u9805\u76ee +emptyList=\u7121\u9805\u76ee +clear=\u6e05\u9664 +cancel=\u53d6\u6d88 +ok=\u78ba\u5b9a +confirm=\u78ba\u8a8d +close=\u95dc\u9589 +confirmClearRecents=\u60a8\u78ba\u5b9a\u8981\u6e05\u9664\u6240\u6709\u6700\u8fd1\u7684\u9805\u76ee\uff1f +confirmClearFavorites=\u60a8\u78ba\u5b9a\u8981\u6e05\u9664\u6240\u6709\u6700\u611b\u7684\u9805\u76ee\uff1f +trash_contents=\u5783\u573e\u6876\u5167\u5bb9 +contextAction_open=\u958b\u555f +contextAction_openNewWindow=\u5728\u65b0\u8996\u7a97\u4e2d\u958b\u555f +contextAction_runBackground=\u5728\u80cc\u666f\u57f7\u884c... +contextAction_edit=\u7de8\u8f2f +contextAction_delete=\u79fb\u5230\u5783\u573e\u6876 +contextAction_purge=\u6e05\u7a7a\u5783\u573e\u6876 +contextAction_restore=\u9084\u539f +contextAction_permDelete=\u6c38\u4e45\u522a\u9664 +contextAction_cut=\u526a\u4e0b +contextAction_copy=\u8907\u88fd +contextAction_rename=\u91cd\u65b0\u547d\u540d... +contextAction_download=\u4e0b\u8f09... +contextAction_share=\u5171\u7528... +contextAction_schedule=\u6392\u7a0b... +contextAction_addToFavorites=\u65b0\u589e\u5230\u6700\u611b\u7684\u9805\u76ee +contextAction_removeFromFavorites=\u5f9e\u6700\u611b\u79fb\u9664 +contextAction_properties=\u5c6c\u6027... +contextAction_newFolder=\u65b0\u8cc7\u6599\u593e... +contextAction_delete=\u79fb\u5230\u5783\u573e\u6876 +contextAction_paste=\u8cbc\u4e0a +contextAction_upload=\u4e0a\u50b3... +browsing_trash=\u700f\u89bd\uff1a\u5783\u573e\u6876 +trash_actions=\u9069\u7528\u65bc\u5783\u573e\u6876\u7684\u52d5\u4f5c +trash=\u5783\u573e\u6876 +originText=\u4f86\u6e90\uff1a +browsing=\u700f\u89bd\uff1a +folders=\u8cc7\u6599\u593e +files=\u6a94\u6848 +folderActions=\u8cc7\u6599\u593e\u52d5\u4f5c +fileActions=\u6a94\u6848\u52d5\u4f5c +emptyFolder=\u6b64\u8cc7\u6599\u593e\u4e2d\u6c92\u6709\u4efb\u4f55\u6a94\u6848\u3002 +overrideTitle=\u5c07\u6703\u907a\u5931\u9023\u7d50 +overrideDescription_file=\u53c3\u8003\u6b64\u6a94\u6848\u7684\u4efb\u4f55\u5100\u8868\u677f\u3001\u6392\u7a0b\u6216\u6700\u611b\u7684\u9805\u76ee\u5c07\u7121\u6cd5\u7e7c\u7e8c\u904b\u4f5c\u3002\u60a8\u662f\u5426\u4ecd\u8981\u91cd\u65b0\u547d\u540d\u6b64\u6a94\u6848\uff1f +overrideDescription_folder=\u53c3\u8003\u6b64\u8cc7\u6599\u593e\u4e2d\u6a94\u6848\u7684\u4efb\u4f55\u5100\u8868\u677f\u3001\u6392\u7a0b\u6216\u6700\u611b\u7684\u9805\u76ee\u5c07\u7121\u6cd5\u7e7c\u7e8c\u904b\u4f5c\u3002\u60a8\u662f\u5426\u4ecd\u8981\u91cd\u65b0\u547d\u540d\u6b64\u8cc7\u6599\u593e\uff1f +overrideCheckbox=\u4e0d\u8981\u518d\u91dd\u5c0d\u6b64\u5de5\u4f5c\u968e\u6bb5\u986f\u793a\u6b64\u8a0a\u606f\u3002 +overrideYesButton=\u662f\uff0c\u91cd\u65b0\u547d\u540d +overrideNoButton=\u5426 +renameTitle=\u91cd\u65b0\u547d\u540d +renameName=\u540d\u7a31\uff1a +cannotRenameDialogTitle = \u7121\u6cd5\u91cd\u65b0\u547d\u540d +cannotRenameDialogDescription = \u7121\u6cd5\u5728\u6b64\u4f4d\u7f6e\u4f7f\u7528\u8a72\u540d\u7a31\u3002\u8acb\u5617\u8a66\u4e0d\u540c\u7684\u540d\u7a31\u3002 +cannotRenameHomeDialogTitle = \u7121\u6cd5\u91cd\u65b0\u547d\u540d +cannotRenameHomeDialogDescription = \u6b64\u8cc7\u6599\u593e\u7684\u4f7f\u7528\u8005\u76ee\u524d\u5df2\u5b58\u5728\u4e14\u7121\u6cd5\u91cd\u65b0\u547d\u540d\u3002 +invalidCharactersDialogDescription = \u8f38\u5165\u7684\u5b57\u5143\u7121\u6548\uff1a"{0}"\u3002\u7121\u6cd5\u4f7f\u7528\u4e0b\u5217\u5b57\u5143\uff1a{1} +accessDeniedDialogDescription = \u60a8\u6c92\u6709\u91cd\u65b0\u547d\u540d\u6b64\u8cc7\u6599\u593e\u7684\u6b0a\u9650\u3002\u8acb\u9023\u7d61\u60a8\u7684\u7cfb\u7d71\u7ba1\u7406\u54e1\u4ee5\u53d6\u5f97\u5354\u52a9\u3002 +containsIllegalCharacters=\u63d0\u4f9b\u7684\u540d\u7a31\u5305\u542b\u4e0d\u5408\u6cd5\u7684\u5b57\u5143\u3002 +fileNotFound=\u8981\u91cd\u65b0\u547d\u540d\u7684\u6a94\u6848\u4e0d\u5b58\u5728\u3002 diff --git a/user-console/src/main/resources/org/pentaho/mantle/public/home/properties/messages_CN.properties b/user-console/src/main/resources/org/pentaho/mantle/public/home/properties/messages_CN.properties new file mode 100644 index 00000000000..aa7147927b7 --- /dev/null +++ b/user-console/src/main/resources/org/pentaho/mantle/public/home/properties/messages_CN.properties @@ -0,0 +1,79 @@ +# +# ******************************************************************************* +# Hitachi Vantara +# +# Copyright (C) 2002-2017 by Hitachi Vantara : http://www.pentaho.com +# ******************************************************************************* +# + +browse=\u700f\u89bd\u6a94\u6848 +create_new=\u5efa\u7acb\u65b0\u9805\u76ee +analysis_report=\u5206\u6790\u5831\u544a +interactive_report=\u4e92\u52d5\u5f0f\u5831\u544a +dashboard=\u5100\u8868\u677f +manage_datasources=\u7ba1\u7406\u8cc7\u6599\u4f86\u6e90 +documentation=\u6587\u4ef6 +analyzer_report=\u5206\u6790\u5831\u544a +analyzer_tooltip=\u65b0\u589e\u5206\u6790\u5831\u544a +getting_started_heading=\u958b\u59cb\u4f7f\u7528 +favorites=\u6700\u611b +recents=\u6700\u8fd1 +refresh=\u91cd\u65b0\u6574\u7406 +clearAllRecents=\u6e05\u9664\u6240\u6709\u6700\u8fd1\u7684\u9805\u76ee +clearAllFavorites=\u6e05\u9664\u6240\u6709\u6700\u611b\u7684\u9805\u76ee +emptyList=\u7121\u9805\u76ee +clear=\u6e05\u9664 +cancel=\u53d6\u6d88 +confirm=\u78ba\u8a8d +video=\u5f71\u7247 +confirmClearRecents=\u60a8\u78ba\u5b9a\u8981\u6e05\u9664\u6240\u6709\u6700\u8fd1\u7684\u9805\u76ee\uff1f +confirmClearFavorites=\u60a8\u78ba\u5b9a\u8981\u6e05\u9664\u6240\u6709\u6700\u611b\u7684\u9805\u76ee\uff1f +pentaho_user_console_guide=Pentaho \u4f7f\u7528\u8005\u4e3b\u63a7\u53f0\u6307\u5357 +pentaho_user_console_guide_description=\u95dc\u65bc Pentaho \u5100\u8868\u677f\u8a2d\u8a08\u5de5\u5177\u3001Pentaho \u5206\u6790\u7a0b\u5f0f\u3001Pentaho \u4e92\u52d5\u5f0f\u5831\u544a\uff0c\u4ee5\u53ca Pentaho \u4f7f\u7528\u8005\u4e3b\u63a7\u53f0\u4e2d\u7684\u5167\u5bb9\u6392\u7a0b\u8207\u6388\u6b0a\u529f\u80fd\u7684\u53c3\u8003\u8cc7\u6599\u8207\u5de5\u4f5c\u578b\u6587\u4ef6\u3002 +pentaho_bi_suite_guide=\u958b\u59cb\u4f7f\u7528 BI \u5957\u4ef6 +pentaho_bi_suite_guide_description=\u793a\u7bc4\u5982\u4f55\u4f7f\u7528 Pentaho \u4f7f\u7528\u8005\u4e3b\u63a7\u53f0\u8a2d\u8a08\u5de5\u5177\u5efa\u7acb\u5167\u5bb9\u7684\u8a73\u7d30\u9010\u6b65\u89e3\u8aaa\u3002 +error_could_not_get_favorites=\u53d6\u5f97\u6700\u611b\u7684\u9805\u76ee\u6642\u767c\u751f\u932f\u8aa4\u3002 +error_could_not_get_recents=\u53d6\u5f97\u6700\u8fd1\u7684\u9805\u76ee\u6642\u767c\u751f\u932f\u8aa4\u3002 +error_could_not_mark_favorite=\u5c07\u9805\u76ee\u6a19\u8a18\u70ba\u6700\u611b\u7684\u9805\u76ee\u6642\u767c\u751f\u932f\u8aa4\u3002 +error_could_not_unmark_favorite=\u5c07\u9805\u76ee\u53d6\u6d88\u6a19\u8a18\u70ba\u6700\u611b\u7684\u9805\u76ee\u6642\u767c\u751f\u932f\u8aa4\u3002 +error_could_not_clear_recents=\u6e05\u9664\u6700\u8fd1\u7684\u9805\u76ee\u6642\u767c\u751f\u932f\u8aa4\u3002 +error_could_not_clear_favorites=\u6e05\u9664\u6700\u611b\u7684\u9805\u76ee\u6642\u767c\u751f\u932f\u8aa4\u3002 +add_favorite_tooltip=\u65b0\u589e\u5230\u6700\u611b\u7684\u9805\u76ee +remove_favorite_tooltip=\u79fb\u9664\u6700\u611b\u7684\u9805\u76ee +empty_favorites_panel_message=\u60a8\u5c1a\u672a\u9078\u53d6\u4efb\u4f55\u6700\u611b\u7684\u9805\u76ee\u3002\u65b0\u589e\u4e00\u4e9b\u6700\u611b\u7684\u9805\u76ee\u3002 +empty_recents_panel_message=\u60a8\u6700\u8fd1\u5c1a\u672a\u958b\u555f\u4efb\u4f55\u9805\u76ee\u3002\u700f\u89bd\u60a8\u7684\u6a94\u6848\u3002 + +getting_started_tab1=\u6b61\u8fce +getting_started_tab1_title=\u6df1\u5165\u4e86\u89e3 +getting_started_tab1_message1=\u6b64\u5f71\u7247\u5c07\u63d0\u4f9b\u60a8\u4e0b\u5217\u9805\u76ee\u7684\u7c21\u8981\u6982\u89c0\uff1a +getting_started_tab1_message2=- Pentaho \u7684\u904b\u4f5c\u65b9\u5f0f +getting_started_tab1_message3=- \u5b83\u6709\u54ea\u4e9b\u529f\u80fd +getting_started_tab1_message4=- \u5982\u4f55\u958b\u59cb\u4f7f\u7528 +getting_started_tab1_message5=- \u8981\u5728\u54ea\u88e1\u53d6\u5f97\u8aaa\u660e + +getting_started_tab2=\u7bc4\u4f8b +getting_started_tab3=\u6559\u5b78\u8ab2\u7a0b + +getting_started_samples_button_title=\u63a2\u7d22 +getting_started_tutorials_button_title=\u89c0\u770b\u5f71\u7247 +error_no_sample_content=\u627e\u4e0d\u5230\u7bc4\u4f8b\u5167\u5bb9 '{{sample_title}}'\u3002\u8acb\u9023\u7d61\u60a8\u7684\u7cfb\u7d71\u7ba1\u7406\u54e1\u3002 +error_propterty_does_not_exist=\u8a2d\u5b9a\u5c6c\u6027 ' +error_no_internet_access=\u672a\u5075\u6e2c\u5230\u4efb\u4f55\u7db2\u969b\u7db2\u8def\u9023\u7dda\u3002 + +# Samples and videos are formatted as TITLE|DESCRIPTION +getting_started_sample1=\u4e3b\u8981\u7522\u54c1\u7dda +getting_started_sample2=\u92b7\u552e\u660e\u7d30 +getting_started_sample3=\u6b50\u6d32\u92b7\u552e +getting_started_sample4=\u570b\u5bb6/\u5730\u5340\u7e3e\u6548 +getting_started_sample5=\u5ee0\u5546\u92b7\u552e +getting_started_sample6=\u5eab\u5b58\u6e05\u55ae +getting_started_sample7=\u4e3b\u8981\u5ba2\u6236 +getting_started_sample8=\u92b7\u552e\u7e3e\u6548 +getting_started_sample9=\u5730\u5340\u7522\u54c1\u7d44\u5408 +getting_started_video1=Pentaho \u4f7f\u7528\u8005\u4e3b\u63a7\u53f0\u6982\u89c0|\u719f\u6089 Pentaho \u4f7f\u7528\u8005\u4e3b\u63a7\u53f0\u7684\u7279\u8272\u8207\u529f\u80fd\u3002 +getting_started_video2=\u5efa\u7acb\u8cc7\u6599\u4f86\u6e90|\u4e86\u89e3\u5982\u4f55\u4f7f\u7528\u9010\u6b65\u8cc7\u6599\u4f86\u6e90\u7cbe\u9748\u5f9e CSV \u6a94\u6848\u5efa\u7acb\u8cc7\u6599\u4f86\u6e90\u3002 +getting_started_video3=\u5efa\u7acb\u4e92\u52d5\u5f0f\u5831\u544a|\u4f7f\u7528\u62d6\u653e\u4ecb\u9762\u5feb\u901f\u5efa\u7acb\u53ef\u904b\u4f5c\u7684\u5831\u544a\u3002 +getting_started_video4=\u5efa\u7acb\u5206\u6790\u7a0b\u5f0f\u5831\u544a|\u5141\u8a31\u4f7f\u7528\u8005\u5efa\u7acb\u5831\u544a\u8207\u5716\u8868\u4ee5\u5feb\u901f\u63a2\u7d22\u53ca\u8996\u89ba\u5316\u5546\u696d\u8cc7\u6599\u3002 +getting_started_video5=\u5efa\u7acb\u5100\u8868\u677f|\u91dd\u5c0d\u60a8\u6240\u5efa\u7acb\u7684\u591a\u500b\u5831\u544a\u8207\u5716\u8868\u5efa\u7acb\u55ae\u4e00\u6aa2\u8996\u3002 + +marketplace=\u900f\u904e\u5546\u5834\u65b0\u589e\u9078\u9805 From c0d9b81536f6521a31af6ae5de2e546025cf5ac1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ramos?= Date: Thu, 14 Dec 2023 11:22:39 +0000 Subject: [PATCH 28/31] [BAD-1930] - When Cloudera HIVE driver is used, a side effect in the LOGs with error messages start to show --- .../connections/PentahoSystemDriver.java | 27 ++-- .../connections/PentahoSystemDriverTest.java | 119 ++++++++++++++++++ 2 files changed, 137 insertions(+), 9 deletions(-) diff --git a/extensions/src/main/java/org/pentaho/platform/plugin/services/connections/PentahoSystemDriver.java b/extensions/src/main/java/org/pentaho/platform/plugin/services/connections/PentahoSystemDriver.java index ecded2baa43..0327131e715 100644 --- a/extensions/src/main/java/org/pentaho/platform/plugin/services/connections/PentahoSystemDriver.java +++ b/extensions/src/main/java/org/pentaho/platform/plugin/services/connections/PentahoSystemDriver.java @@ -35,8 +35,7 @@ import java.util.List; import java.util.Map; import java.util.Properties; -import java.util.logging.Logger; - +import org.pentaho.platform.util.logging.Logger; //This driver will delegate to drivers found in the Hitachi Vantara Object System //For example it can delegate to the Mondrian 4 Olap4J Driver that lives in an OSGI Bundle @@ -45,7 +44,7 @@ public class PentahoSystemDriver implements Driver { try { DriverManager.registerDriver( new PentahoSystemDriver() ); } catch ( SQLException e ) { - org.pentaho.platform.util.logging.Logger.warn( + Logger.warn( PentahoSystemDriver.class.getName(), Messages.getInstance().getErrorString( "PentahoSystemDriver.ERROR_0001_COULD_NOT_REGISTER_DRIVER" ), e ); @@ -84,7 +83,8 @@ private String translate( String url ) { @Override public Connection connect( final String url, final Properties info ) throws SQLException { String translatedUrl = translate( url ); - List listOfExceptions = new ArrayList<>(); + List listOfExceptions = new ArrayList<>(); + SQLException exception = new SQLException("There were failing connections to the url: " + url); for ( Driver driver : getAllDrivers() ) { if ( driver.acceptsURL( translatedUrl ) ) { @@ -93,13 +93,22 @@ public Connection connect( final String url, final Properties info ) throws SQLE if ( conn != null ) { return conn; } - } catch ( Exception e ) { - listOfExceptions.add( e ); + } catch ( SQLException e ) { + exception.setNextException( e ); + } catch(Exception e ){ + throw e; } } + } - if ( !listOfExceptions.isEmpty() ) { - throw new SQLException( listOfExceptions.get( 0 ) ); + if ( exception.getNextException() != null && !exception.getNextException().getMessage().equals(exception.getMessage())) { + SQLException currentException = exception.getNextException(); + while(currentException != null && currentException.getNextException()!= null && !currentException.getNextException().getMessage().equals(currentException.getMessage()) ){ + Logger.info( PentahoSystemDriver.class.getName(), currentException.getMessage(),currentException ); + currentException = currentException.getNextException(); + + } + throw exception; } return null; } @@ -142,7 +151,7 @@ public boolean jdbcCompliant() { } //don't add @Override annotation for Java 6 compatibility (class Driver doesn't have getParentLogger method in Java 6) - public Logger getParentLogger() throws SQLFeatureNotSupportedException { + public java.util.logging.Logger getParentLogger() throws SQLFeatureNotSupportedException { throw new SQLFeatureNotSupportedException( "Impossible to know which Driver to fetch the logger from" ); } } diff --git a/extensions/src/test/java/org/pentaho/platform/plugin/services/connections/PentahoSystemDriverTest.java b/extensions/src/test/java/org/pentaho/platform/plugin/services/connections/PentahoSystemDriverTest.java index 11efb99a372..af58adb5b8d 100644 --- a/extensions/src/test/java/org/pentaho/platform/plugin/services/connections/PentahoSystemDriverTest.java +++ b/extensions/src/test/java/org/pentaho/platform/plugin/services/connections/PentahoSystemDriverTest.java @@ -21,19 +21,38 @@ package org.pentaho.platform.plugin.services.connections; import junit.framework.Assert; +import org.junit.Before; import org.junit.Test; import org.mockito.Mockito; +import org.pentaho.platform.util.logging.Logger; +import org.springframework.test.context.event.annotation.BeforeTestMethod; import java.sql.Connection; import java.sql.Driver; import java.sql.DriverManager; +import java.sql.SQLException; import java.util.Arrays; +import java.util.Enumeration; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Properties; public class PentahoSystemDriverTest { + + @Before + public void beforeTest (){ + Enumeration drivers = DriverManager.getDrivers(); + try { + while ( drivers.hasMoreElements() ) { + DriverManager.deregisterDriver( drivers.nextElement() ); + } + + + }catch (SQLException e){ + Logger.error(this.getClass(), e.getLocalizedMessage()); + } + } @Test public void testPentahoSystemDriversAreRegistered() throws Exception { final Driver mockDriver = Mockito.mock( Driver.class ); @@ -61,6 +80,8 @@ public void testPentahoSystemDriversAreRegistered() throws Exception { Connection conn2 = DriverManager.getConnection( url2 ); Assert.assertSame( mockConn2, conn2 ); DriverManager.deregisterDriver( driver ); + mockConn.close(); + conn.close(); } @Test @@ -86,5 +107,103 @@ public void testSystemDriversCanBeUsedWithAlternateJdbcIdentifier() throws Exce Connection conn = DriverManager.getConnection( url ); Assert.assertSame( mockConn, conn ); DriverManager.deregisterDriver( driver ); + mockConn.close(); + conn.close(); + } + + @Test + public void testSystemDriversConflictingOnSameUrlSuccess() throws Exception { + final Driver mockDriver1 = Mockito.mock( Driver.class ); + final Driver mockDriver2 = Mockito.mock( Driver.class ); + final Connection mockConn = Mockito.mock( Connection.class ); + + PentahoSystemDriver driver = new PentahoSystemDriver() { + @Override List getAllDrivers() { + return Arrays.asList( mockDriver1,mockDriver2 ); + } + + @Override Map getTranslationMap() { + HashMap map = new HashMap(); + map.put( "driver1", "driver1" ); + map.put( "driver2", "driver2" ); + return map; + } + }; + DriverManager.registerDriver( driver ); + String url = "jdbc:testing123:morestuff"; + //both accept url + Mockito.when( mockDriver1.acceptsURL( url ) ).thenReturn( true ); + Mockito.when( mockDriver2.acceptsURL( url ) ).thenReturn( true ); + + Mockito.when( mockDriver1.connect( url, new Properties() ) ).thenThrow( new SQLException("TestException1") ); + Mockito.when( mockDriver2.connect( url, new Properties() ) ).thenReturn( mockConn); + Connection conn = DriverManager.getConnection( url ); + + Assert.assertSame( mockConn, conn ); + + DriverManager.deregisterDriver( driver ); + } + + @Test(expected=SQLException.class) + public void testSystemDriversConflictingOnSameUrlShouldThrowException() throws Exception { + final Driver mockDriver1 = Mockito.mock( Driver.class ); + final Driver mockDriver2 = Mockito.mock( Driver.class ); + PentahoSystemDriver driver = new PentahoSystemDriver() { + @Override List getAllDrivers() { + return Arrays.asList( mockDriver1,mockDriver2 ); + } + + @Override Map getTranslationMap() { + HashMap map = new HashMap(); + map.put( "driver1", "driver2" ); + return map; + } + }; + DriverManager.registerDriver( driver ); + String url = "jdbc:testing123:morestuff"; + //both accept url + Mockito.when( mockDriver1.acceptsURL( url ) ).thenReturn( true ); + Mockito.when( mockDriver2.acceptsURL( url ) ).thenReturn( true ); + + Mockito.when( mockDriver1.connect( url, new Properties() ) ).thenThrow( new SQLException("TestException1") ); + Mockito.when( mockDriver2.connect( url, new Properties() ) ).thenThrow( new SQLException("TestException2") ); + + Connection conn = DriverManager.getConnection( url ); + + DriverManager.deregisterDriver( driver ); + } + + @Test + public void testSystemDriversConflictingOnSameUrlShouldThrowTwoLevelException() throws Exception { + final Driver mockDriver1 = Mockito.mock( Driver.class ); + final Driver mockDriver2 = Mockito.mock( Driver.class ); + PentahoSystemDriver driver = new PentahoSystemDriver() { + @Override List getAllDrivers() { + return Arrays.asList( mockDriver1,mockDriver2 ); + } + + @Override Map getTranslationMap() { + HashMap map = new HashMap(); + map.put( "driver1", "driver2" ); + return map; + } + }; + DriverManager.registerDriver( driver ); + String url = "jdbc:testing123:morestuff"; + //both accept url + Mockito.when( mockDriver1.acceptsURL( url ) ).thenReturn( true ); + Mockito.when( mockDriver2.acceptsURL( url ) ).thenReturn( true ); + + Mockito.when( mockDriver1.connect( url, new Properties() ) ).thenThrow( new SQLException("TestException1") ); + Mockito.when( mockDriver2.connect( url, new Properties() ) ).thenThrow( new SQLException("TestException2") ); + try { + Connection conn = DriverManager.getConnection( url ); + }catch (SQLException e) { + Assert.assertTrue(e.getLocalizedMessage().contains( "There were failing connections to the url" )); + Assert.assertTrue(e.getNextException().getLocalizedMessage().contains( "TestException1" )); + Assert.assertTrue(e.getNextException().getNextException().getLocalizedMessage().contains( "TestException2" )); + } + + DriverManager.deregisterDriver( driver ); } } From bdc562049a48ebd1df01b44fbac2e66dc378799e Mon Sep 17 00:00:00 2001 From: Eddie Martinez Date: Wed, 27 Dec 2023 11:48:20 -0500 Subject: [PATCH 29/31] [BACKLOG-39432] Add the option to choose traditional Chinese language in PDI and PUC --- .../messages_supported_languages.properties | 1 + .../services/messages/messages_cn.properties | 67 +++++++++++-------- .../config_supported_languages.properties | 1 + .../messages_supported_languages.properties | 1 + 4 files changed, 43 insertions(+), 27 deletions(-) diff --git a/assemblies/pentaho-solutions/src/main/resources/pentaho-solutions/system/default-plugin/resources/messages/messages_supported_languages.properties b/assemblies/pentaho-solutions/src/main/resources/pentaho-solutions/system/default-plugin/resources/messages/messages_supported_languages.properties index 6e7fe6b69eb..8704771f460 100644 --- a/assemblies/pentaho-solutions/src/main/resources/pentaho-solutions/system/default-plugin/resources/messages/messages_supported_languages.properties +++ b/assemblies/pentaho-solutions/src/main/resources/pentaho-solutions/system/default-plugin/resources/messages/messages_supported_languages.properties @@ -11,3 +11,4 @@ de=Deutsch ja=\u65E5\u672C\u8A9E en=English zh_CN=\u7b80\u4f53\u4e2d\u6587 +CN=\u7E41\u4F53\u4E2D\u6587 diff --git a/extensions/src/main/resources/org/pentaho/platform/plugin/services/messages/messages_cn.properties b/extensions/src/main/resources/org/pentaho/platform/plugin/services/messages/messages_cn.properties index 027f89307e2..845e6eae828 100644 --- a/extensions/src/main/resources/org/pentaho/platform/plugin/services/messages/messages_cn.properties +++ b/extensions/src/main/resources/org/pentaho/platform/plugin/services/messages/messages_cn.properties @@ -205,33 +205,46 @@ CommandLineProcessor.INFO_EXPORT_WRITTEN_TO=\u532f\u51fa\u5df2\u5beb\u5165\uff1a CommandLineProcessor.INFO_RESPONSE_STATUS=\u56de\u61c9\u72c0\u614b\uff1a{0} CommandLineProcessor.INFO_PRINTHELP_CMDLINE=importexport CommandLineProcessor.INFO_PRINTHELP_HEADER=\u7d71\u4e00\u5b58\u653e\u5eab\u547d\u4ee4\u5217\u532f\u5165/\u532f\u51fa\u5de5\u5177 -CommandLineProcessor.INFO_PRINTHELP_FOOTER=\u9069\u7528\u65bc\u532f\u5165\u7684\u5e38\u898b\u9078\u9805 ---import --url=http://localhost:8080/pentaho --username=admin ---password=password --charset=UTF-8 --path=/public ---file-path=c:/temp/steel-wheels.zip ---logfile=c:/temp/logfile.log ---permission=True ---overwrite=True ---retainOwnership=True ---import --url=http://localhost:8080/pentaho ---username=admin --password=password ---file-path=metadata.xmi --resource-type=DATASOURCE ---datasource-type=METADATA --overwrite=true ---metadata-domain-id=steel-wheels ---import --url=http://localhost:8080/pentaho ---username=admin --password=password ---file-path=analysis/steelwheels.mondrian.xml --resource-type=DATASOURCE ---datasource-type=ANALYSIS --overwrite=true ---analysis-datasource=steelwheels ---export --url=http://localhost:8080/pentaho --username=admin --password=password ---file-path=c:/temp/export.zip --charset=UTF-8 --path=/public/steel-wheels ---backup --url=http://localhost:8080/pentaho --username=admin --password=password ---file-path=c:/temp/export.zip --logfile=c:/temp/logfile.log ---restore --url=http://localhost:8080/pentaho --username=admin --password=password ---overwrite=true --file-path=c:/temp/export.zip --logfile=c:/temp/logfile.log ---rest --url=http://localhost:8080/pentaho --username=admin --password=password ---path=/public/pentaho-solutions/steel-wheels/reports ---logfile=c:/temp/logfile.log --service=acl +CommandLineProcessor.INFO_PRINTHELP_FOOTER=\u9069\u7528\u65bc\u532f\u5165\u7684\u5e38\u898b\u9078\u9805\n\ + Example arguments for import:\n\ +--import --url=http://localhost:8080/pentaho --username=admin\n\ +--password=password --charset=UTF-8 --path=/public\n\ +--file-path=c:/temp/steel-wheels.zip\n\ +--logfile=c:/temp/logfile.log\n\ +--permission=true\n\ +--overwrite=true\n\ +--retainOwnership=true\n\n\ +\n\n\ +Example arguments for import metadata datasource:\n\ +--import --url=http://localhost:8080/pentaho\n\ +--username=admin --password=password\n\ +--file-path=metadata.xmi --resource-type=DATASOURCE\n\ +--datasource-type=METADATA --overwrite=true\n\ +--metadata-domain-id=steel-wheels\n\n\ +\n\n\ +Example arguments for import analysis datasource:\n\ +--import --url=http://localhost:8080/pentaho\n\ +--username=admin --password=password\n\ +--file-path=analysis/steelwheels.mondrian.xml --resource-type=DATASOURCE\n\ +--datasource-type=ANALYSIS --overwrite=true\n\ +--analysis-datasource=steelwheels\n\n\ +\n\n\ +Example arguments for export:\n\ +--export --url=http://localhost:8080/pentaho --username=admin --password=password \n\ +--file-path=c:/temp/export.zip --charset=UTF-8 --path=/public/steel-wheels\n --withManifest=true --logfile=c:/temp/logfile.log\n\ +\n\n\ +Example arguments for backup:\n\ +--backup --url=http://localhost:8080/pentaho --username=admin --password=password \n\ +--file-path=c:/temp/export.zip --logfile=c:/temp/logfile.log\n\ + \n\n\ +Example arguments for restore:\n\ +--restore --url=http://localhost:8080/pentaho --username=admin --password=password \n\ +--overwrite=true --file-path=c:/temp/export.zip --logfile=c:/temp/logfile.log\n\ +Example arguments for running REST services:\n\ +--rest --url=http://localhost:8080/pentaho --username=admin --password=password \n\ + --path=/public/pentaho-solutions/steel-wheels/reports\n\ + --logfile=c:/temp/logfile.log --service=acl\n + CommandLineProcessor.INFO_OPTION_RESOURCE_TYPE_DESCRIPTION=\u532f\u5165\u8cc7\u6e90\u985e\u578b (\u4f8b\u5982\u8cc7\u6599\u4f86\u6e90) CommandLineProcessor.INFO_OPTION_DATASOURCE_TYPE_DESCRIPTION=\u8cc7\u6599\u4f86\u6e90\u985e\u578b CommandLineProcessor.INFO_OPTION_ANALYSIS_CATALOG_DESCRIPTION=\u76ee\u9304\u63cf\u8ff0 diff --git a/user-console/src/main/resources/org/pentaho/mantle/public/home/properties/config_supported_languages.properties b/user-console/src/main/resources/org/pentaho/mantle/public/home/properties/config_supported_languages.properties index 6e7fe6b69eb..8704771f460 100644 --- a/user-console/src/main/resources/org/pentaho/mantle/public/home/properties/config_supported_languages.properties +++ b/user-console/src/main/resources/org/pentaho/mantle/public/home/properties/config_supported_languages.properties @@ -11,3 +11,4 @@ de=Deutsch ja=\u65E5\u672C\u8A9E en=English zh_CN=\u7b80\u4f53\u4e2d\u6587 +CN=\u7E41\u4F53\u4E2D\u6587 diff --git a/user-console/src/main/resources/org/pentaho/mantle/public/home/properties/messages_supported_languages.properties b/user-console/src/main/resources/org/pentaho/mantle/public/home/properties/messages_supported_languages.properties index 6e7fe6b69eb..1ed5b59fd3a 100644 --- a/user-console/src/main/resources/org/pentaho/mantle/public/home/properties/messages_supported_languages.properties +++ b/user-console/src/main/resources/org/pentaho/mantle/public/home/properties/messages_supported_languages.properties @@ -11,3 +11,4 @@ de=Deutsch ja=\u65E5\u672C\u8A9E en=English zh_CN=\u7b80\u4f53\u4e2d\u6587 +CN=\u7E41\u4F53\u4E2D\u6587 \ No newline at end of file From 01415be75a1a1cbf29e59e2f0d0badb7a3bafa78 Mon Sep 17 00:00:00 2001 From: Dean DiRoma Date: Wed, 27 Dec 2023 16:09:47 -0500 Subject: [PATCH 30/31] [BACKLOG-39432] Add the option to choose traditional Chinese language to PUC --- .../public/browser/messages_supported_languages.properties | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/user-console/src/main/resources/org/pentaho/mantle/public/browser/messages_supported_languages.properties b/user-console/src/main/resources/org/pentaho/mantle/public/browser/messages_supported_languages.properties index bf54e0be1fa..721f624b70d 100644 --- a/user-console/src/main/resources/org/pentaho/mantle/public/browser/messages_supported_languages.properties +++ b/user-console/src/main/resources/org/pentaho/mantle/public/browser/messages_supported_languages.properties @@ -2,7 +2,7 @@ # ******************************************************************************* # Hitachi Vantara # -# Copyright (C) 2018 by Hitachi Vantara : http://www.pentaho.com +# Copyright (C) 2018-2023 by Hitachi Vantara : http://www.pentaho.com # ******************************************************************************* # @@ -11,3 +11,4 @@ fr=Français de=Deutsch ja=\u65E5\u672C\u8A9E zh_CN=\u7b80\u4f53\u4e2d\u6587 +CN=\u7E41\u4F53\u4E2D\u6587 From 89255d98acb9177403bfa59ecee2062f6e61180f Mon Sep 17 00:00:00 2001 From: ssindhu23 Date: Thu, 4 Jan 2024 10:16:19 +0000 Subject: [PATCH 31/31] [BACKLOG-39494]-javax.ws.rs.WebApplicationException: com.sun.jersey.api.MessageException --- .../javax/ws/rs/core/NoContentException.java | 70 +++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 api/src/main/java/javax/ws/rs/core/NoContentException.java diff --git a/api/src/main/java/javax/ws/rs/core/NoContentException.java b/api/src/main/java/javax/ws/rs/core/NoContentException.java new file mode 100644 index 00000000000..78bcb32e4b1 --- /dev/null +++ b/api/src/main/java/javax/ws/rs/core/NoContentException.java @@ -0,0 +1,70 @@ +/*! ****************************************************************************** + * + * Pentaho Data Integration + * + * Copyright (C) 2024 by Hitachi Vantara : http://www.pentaho.com + * + ******************************************************************************* + * + * Licensed 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 javax.ws.rs.core; + +import java.io.IOException; + +/** + * An I/O exception thrown by {@link javax.ws.rs.ext.MessageBodyReader} implementations + * when reading a zero-length message content to indicate that the message body reader + * is not able to produce an instance representing an zero-length message content. + *

+ * This exception, when thrown while reading a server request entity, is automatically + * translated by JAX-RS server runtime into a {@link javax.ws.rs.BadRequestException} + * wrapping the original {@code NoContentException} and rethrown for a standard processing by + * the registered {@link javax.ws.rs.ext.ExceptionMapper exception mappers}. + *

+ */ +public class NoContentException extends IOException { + private static final long serialVersionUID = -3082577759787473245L; + + /** + * Construct a new {@code NoContentException} instance. + * + * @param message the detail message (which is saved for later retrieval + * by the {@link #getMessage()} method). + */ + public NoContentException(String message) { + super(message); + } + + /** + * Construct a new {@code NoContentException} instance. + * + * @param message the detail message (which is saved for later retrieval + * by the {@link #getMessage()} method). + * @param cause the underlying cause of the exception. + */ + public NoContentException(String message, Throwable cause) { + super(message, cause); + } + + /** + * Construct a new {@code NoContentException} instance. + * + * @param cause the underlying cause of the exception. + */ + public NoContentException(Throwable cause) { + super(cause); + } +}